키 또는 키코드는 X 키 기호에 어떻게 매핑됩니까?

키 또는 키코드는 X 키 기호에 어떻게 매핑됩니까?

기능 키 조합을 XF86 키 기호에 매핑하려고 합니다. 키 조합은 Fn+ 이며 F1, 이를 사용하여 showkey원래 키코드를 얻을 수 있습니다.

jason@io ~ $ showkey
kb mode was RAW
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]

press any key (program terminates 10s after last keypress)...
keycode  28 release
keycode 466 press
keycode 466 release
keycode 113 press
keycode 113 release
keycode 114 press
keycode 114 release

showkey다른 게시물에서 언급한 대로 키코드에 8을 추가하세요.질문, 주어진 X 키 코드는 474입니다. 그럼에도 불구하고 실행은 xev키 누르기 또는 떼기를 캡처하지 못하는 것 같습니다. 다음 두 개의 기능 키 조합( Fn+ F2, Fn+ ) 을 캡처합니다 F3.

jason@io ~ $ xev -root

FocusIn event, serial 18, synthetic NO, window 0x71,
    mode NotifyGrab, detail NotifyInferior

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

FocusOut event, serial 18, synthetic NO, window 0x71,
    mode NotifyUngrab, detail NotifyInferior

FocusIn event, serial 18, synthetic NO, window 0x71,
    mode NotifyGrab, detail NotifyInferior

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

FocusOut event, serial 18, synthetic NO, window 0x71,
    mode NotifyUngrab, detail NotifyInferior

Fn+ F2Fn+를 포함하여 다른 많은 작업 바인딩이 있는 창 관리자에서 키 조합을 처리하려고 합니다 F3. 그러나 X가 키 누르기를 수신하지 않거나 .Xmodmap키코드가 올바르게 바인딩되지 않은 것 같습니다 .

내가 뭐 잘못 했어요? 다른 방법이 있나요?

답변1

몇 가지 연구 끝에 이것이 X11 프로토콜의 근본적인 한계라는 것을 발견했습니다. 구체적으로 키 코드를 나타내는 데 사용되는 데이터 유형은 바이트이므로 값을 8에서 255(+8 편향) 사이로 제한합니다. 이는 해결하기 위해 고안된 문제입니다.X12프로토콜(리소스 제한 참조)

한 가지 해결 방법은 패치를 사용하여 키 코드를 유효한 범위로 다시 매핑하는 것입니다.evdevxorg.conf에서.

Section "InputDevice"
    Identifier     "keyboard"
    Driver         "evdev"
    Option         "event_key_remap" "474=247"
EndSection

키코드는 커널에서 다시 매핑될 수도 있습니다.

jason@io ~ $ sudo setkeycodes e0xx 266

관련 정보