X: xrandr을 사용하여 모니터를 껐다가 다시 켜면 alt/ctrl/f1이 더 이상 작동하지 않습니다.

X: xrandr을 사용하여 모니터를 껐다가 다시 켜면 alt/ctrl/f1이 더 이상 작동하지 않습니다.

(문제의 중요한 새로운 정보를 편집한 후)

명령줄에서 디스플레이를 껐다 xrandr --output ... --off가 다시 켠 후( xrandr --output ... --auto) X 데스크탑에서 문자 콘솔로 전환하는 기능이 손실되었습니다(즉, alt/ctrl/f1이 더 이상 작동하지 않음).

다른 X 컨트롤 단축키(alt/ctrl/backspace)는 계속 작동합니다.

왜? 이 기능을 다시 활성화하려면 어떻게 해야 합니까?


정보: 최신 안정 버전인 Linux Mint입니다. 분명히 문제는 명령줄을 사용하여 X를 닫은 다음 xrandr --output ... --off다음날 아침에 다시 열었을 때 발생했습니다(명령 사용 ).xrandr --output ... --auto

집에 가기 전에 전원을 완전히 꺼야하고 일반 설정(제어판 어딘가에 있는 에너지 설정)이 부족하거나 문제가 있기 때문에 이것을 사용합니다.

내 키보드는 괜찮습니다. 예를 들어 xevalt/ctrl/f3이 표시됩니다.풀어 주다이벤트가 정확합니다.

KeyRelease event, serial 37, synthetic NO, window 0x3c00001,
    root 0x2e1, subw 0x0, time 1622285717, (99,77), root:(961,532),
    state 0xc, keycode 69 (keysym 0x1008fe03, XF86Switch_VT_3), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

하지만 핵심 이벤트는아니요목록에 있습니다. 그러므로,xev 볼 수 없다alt/ctrl/f3을 누르면 어떻게든 릴리스가 표시됩니다.


디버그 출력:

$ xmodmap -pke|grep -i xf86switch
keycode  67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1 F1 F1 XF86Switch_VT_1
keycode  68 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2 F2 F2 XF86Switch_VT_2
keycode  69 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3 F3 F3 XF86Switch_VT_3
keycode  70 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4 F4 F4 XF86Switch_VT_4
keycode  71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5 F5 F5 XF86Switch_VT_5
keycode  72 = F6 F6 F6 F6 F6 F6 XF86Switch_VT_6 F6 F6 XF86Switch_VT_6
keycode  73 = F7 F7 F7 F7 F7 F7 XF86Switch_VT_7 F7 F7 XF86Switch_VT_7
keycode  74 = F8 F8 F8 F8 F8 F8 XF86Switch_VT_8 F8 F8 XF86Switch_VT_8
keycode  75 = F9 F9 F9 F9 F9 F9 XF86Switch_VT_9 F9 F9 XF86Switch_VT_9
keycode  76 = F10 F10 F10 F10 F10 F10 XF86Switch_VT_10 F10 F10 XF86Switch_VT_10
keycode  95 = F11 F11 F11 F11 F11 F11 XF86Switch_VT_11 F11 F11 XF86Switch_VT_11
keycode  96 = F12 F12 F12 F12 F12 F12 XF86Switch_VT_12 F12 F12 XF86Switch_VT_12

이 명령은 xmodmap -pke | grep ' F[0-9]\+'정확히 동일한 결과를 제공합니다.


추가 정보: 종료 시에는 문자 콘솔로 전환하는 기능이 손실되지만 시작 시에는 손실되지 않습니다(따라서 명령을 입력하려면 전화기에서 워크스테이션으로 ssh를 실행해야 합니다 xrandr --output ... --auto).


스크립트 테스트: @GeorgeVasilou의 스크립트를 사용해 보았습니다.스크립트, X11 이벤트를 삽입하여 키보드 클릭을 시뮬레이션합니다. 결과는 부정적입니다. 시뮬레이션된 alt/ctrl/f1 시퀀스는 단일 시퀀스로만 나타납니다 H.

답변1

이것은 답변이 아닌 확장된 의견입니다.

내 시스템에서는 Ctrl++가 Alt제대로 작동합니다. 및 KeyPress 이벤트는 발생 F1하지만 KeyPress 이벤트는 발생하지 않습니다. tty1로 이동했기 때문에 작동한다는 것을 알고 있지만.controlaltF1

내 예제의 전체 출력은 다음과 같습니다 xev(비교용).

root@debi64:/home/gv/Desktop/PythonTests# xev -event keyboard
Outer window is 0x4400001, inner window is 0x4400002

KeymapNotify event, serial 18, synthetic NO, window 0x0,
    keys:  4294967192 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyPress event, serial 25, synthetic NO, window 0x4400001,
    root 0x281, subw 0x0, time 11550957, (157,186), root:(748,462),
    state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 28, synthetic NO, window 0x4400001,
    root 0x281, subw 0x0, time 11550960, (157,186), root:(748,462),
    state 0x8, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 28, synthetic NO, window 0x4400001,
    root 0x281, subw 0x0, time 11553775, (157,186), root:(748,462),
    state 0xc, keycode 67 (keysym 0x1008fe01, XF86Switch_VT_1), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 28, synthetic NO, window 0x4400001,
    root 0x281, subw 0x0, time 11553902, (157,186), root:(748,462),
    state 0xc, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 28, synthetic NO, window 0x4400001,
    root 0x281, subw 0x0, time 11553902, (157,186), root:(748,462),
    state 0x8, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeymapNotify event, serial 28, synthetic NO, window 0x0,
    keys:  4294967169 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

ClientMessage event, serial 28, synthetic YES, window 0x4400001,
    message_type 0x11b (WM_PROTOCOLS), format 32, message 0x119 (WM_DELETE_WINDOW)

Ctrl나는 또한 + 키 누르기를 시뮬레이션하기 위해 작은 Python 스크립트를 만들었습니다 alt. F1스크립트를 실행할 때 아무 문제 없이 tty1로 전송됩니다.

키보드가 작동하는지 다시 확인/검증하기 위해 컴퓨터에서 이 스크립트를 실행하여 tty1에 접속했는지 확인할 수도 있습니다.

https://github.com/gevasiliou/PythonTests/blob/master/pykey-test.py

추신: 스크립트 대신 이것을 실행해 보면 #chvt 1tty1로 전송됩니다.

Ctrl일부 조사 후, 다른 사용자들은 xserver 업데이트(분명히)로 인해 tty에 적용된 일부 해상도 설정이 수정되어 ++ 키가 작동을 멈췄다고 보고했습니다 .altfn

예를 들어이 기사에서, 부팅 중에 vga=0x0362와 같은 특정 vga 해상도를 커널 매개변수(vga=mode)로 적용하여 문제가 해결되었습니다. 분명히 시스템 업데이트 중 하나가 해당 사람들을 위한 솔루션을 망쳤으므로 아마도 귀하의 경우도 그럴 것입니다(이유는 신만이 아실 것입니다).

PS: 시스템에서 지원하는 사용 가능한 모드를 보려면 hwinfo --framebuffer | grep 'Mode'나열된 모드 중 하나를 실행하고 선택해야 합니다.

그런데, F3질문에 xev with 의 일부를 포함시켰는데, 결과는 무엇입니까 with F1?

고쳐 쓰다:
추가 문제 해결을 위해 다음 중 일부를 시도해 볼 가치가 있습니다.

  1. 보고 있다xrandr 소스 코드--off 옵션은 다음 명령을 실행하는 것 같습니다.

    set_name_xid (&config_output->mode, None);
    set_name_xid (&config_output->crtc, None);
    config_output->changes |= changes_mode | changes_crtc;
    

--auto 대신 --mode 및 --crtc xrandr 옵션을 지정하여 --output을 다시 활성화할 수 있습니다(xrandr "자동화"가 제대로 작동하지 않는 경우).

  1. 이것에콘솔에 대한 커널 문서, 디렉토리에서 가상 콘솔 작업에 사용할 수 있는 드라이버/지원 모듈을 확인할 수 있습니다 /sys/class/vtconsole.
    시작하는 동안과 종료한 후에는 모든 파일/모듈의 값을 비교할 수 있으며 동작이 다릅니다. 어쩌면 종료 시간 동안 이 값을 수정하는 것이 있을 수도 있습니다.

다음은 tty1-2-3-4-5-6으로 전환하면 제대로 작동하는 내 시스템의 출력물입니다.

root@debi64:/home/gv/Desktop/PythonTests# for f in $(find /sys/class/vtconsole/vtcon0/ -type f);do echo -e "File : $f \c\c\c";echo -e "-VALUE : \c";cat $f;done
File : /sys/class/vtconsole/vtcon0/bind -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/runtime_active_kids -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/runtime_suspended_time -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/autosuspend_delay_ms -VALUE : cat: /sys/class/vtconsole/vtcon0/power/autosuspend_delay_ms: Input/output error
File : /sys/class/vtconsole/vtcon0/power/runtime_enabled -VALUE : disabled
File : /sys/class/vtconsole/vtcon0/power/runtime_active_time -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/control -VALUE : auto
File : /sys/class/vtconsole/vtcon0/power/async -VALUE : disabled
File : /sys/class/vtconsole/vtcon0/power/runtime_usage -VALUE : 0
File : /sys/class/vtconsole/vtcon0/power/runtime_status -VALUE : unsupported
File : /sys/class/vtconsole/vtcon0/uevent -VALUE : 
File : /sys/class/vtconsole/vtcon0/name -VALUE : (S) VGA+
root@debi64:/home/gv/Desktop/PythonTests# for f in $(find /sys/class/vtconsole/vtcon1/ -type f);do echo -e "File : $f \c\c\c";echo -e "-VALUE : \c";cat $f;done
File : /sys/class/vtconsole/vtcon1/bind -VALUE : 1
File : /sys/class/vtconsole/vtcon1/power/runtime_active_kids -VALUE : 0
File : /sys/class/vtconsole/vtcon1/power/runtime_suspended_time -VALUE : 0
File : /sys/class/vtconsole/vtcon1/power/autosuspend_delay_ms -VALUE : cat: /sys/class/vtconsole/vtcon1/power/autosuspend_delay_ms: Input/output error
File : /sys/class/vtconsole/vtcon1/power/runtime_enabled -VALUE : disabled
File : /sys/class/vtconsole/vtcon1/power/runtime_active_time -VALUE : 0
File : /sys/class/vtconsole/vtcon1/power/control -VALUE : auto
File : /sys/class/vtconsole/vtcon1/power/async -VALUE : disabled
File : /sys/class/vtconsole/vtcon1/power/runtime_usage -VALUE : 0
File : /sys/class/vtconsole/vtcon1/power/runtime_status -VALUE : unsupported
File : /sys/class/vtconsole/vtcon1/uevent -VALUE : 
File : /sys/class/vtconsole/vtcon1/name -VALUE : (M) frame buffer device
  1. 마지막으로 Xserver와 같은 가능한 자동 절전 기능을 살펴보는 것이 좋습니다.DPMS장기간 사용하지 않으면 자동으로 활성화되는 설정입니다.

두 번째 업데이트:

주변을 둘러보니 가상 터미널의 DPMS 및 기타 유용한 절전 관련 설정을 setterm명령을 통해 제어할 수 있다는 것을 알았습니다. 가상 터미널이 잠자고 있는 것처럼 보이면 setterm --reset명령을 보내 깨울 수 있습니다(이 경우). 일반 tty7에서 다른 tty로 명령을 보내려면 다음을 사용해야 합니다. setsid bash -c 'exec setterm --reset <> /dev/tty1 >&0 2>&1'
유일한 문제는 tty1에 로그인해야 한다는 것입니다.

setsid bash -c 'exec setterm --reverse on <> /dev/tty1 >&0 2>&1'테스트를 위해 작동하는 동안 tty1을 사용할 수 있으며 tty1로 전환하면 chvt 1결과를 관찰할 수 있습니다(터미널에서 색상을 역으로 교체 - Debian에서 테스트되었으며 작동함).

setterm --powersave off또한 setterm은 등을 사용하여 절전을 활성화/비활성화하는 옵션도 제공합니다. (참조 man setterm)

관련 정보