X11

鍵或鍵碼如何映射到 X 鍵符號?

  • July 21, 2015

我正在嘗試將功能鍵組合映射到 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 添加到鍵碼中會得到 474 的 X 鍵碼。儘管,執行xev似乎並沒有捕捉到按鍵的按下或釋放。它確實擷取了接下來的兩個功能鍵組合(Fn+ F2Fn+ 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沒有正確綁定鍵碼。

我做的不對嗎?還有另一種方法可以做到這一點嗎?

經過研究,我發現這是X11協議的一個根本限制。具體來說,用於表示鍵碼的數據類型是字節,它將值限制在 8 到 255 之間(+8 偏差)。這是一個旨在在X12協議中解決的問題(請參閱資源限制)。

一種解決方法是使用xorg.conf 中的修補evdev將鍵碼重新映射到有效範圍。

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

密鑰程式碼也可以在核心中重新映射。

jason@io ~ $ sudo setkeycodes e0xx 266

引用自:https://unix.stackexchange.com/questions/194754