ファンクションキーの組み合わせを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
キーを押すか離すかをキャプチャできないようです。次の2つのファンクションキーの組み合わせ(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+F2とFn+を含む他の多くのタスクバインディングを持つウィンドウマネージャでキーの組み合わせを処理しようとしていますF3。ただし、Xがキー押下を受信していないか、.Xmodmap
キーコードが正しくバインドされていないようです。
私は何が間違っていましたか?別の方法がありますか?
答え1
いくつかの研究の終わりに、これがX11プロトコルの基本的な制限であることがわかりました。具体的には、キーコードを表すために使用されるデータ型はバイトなので、値を8から255(+8偏向)の間に制限します。これは解決するために設計された問題です。X12プロトコル(リソース制限を参照)
解決策の1つは、パッチを使用してキーコードを有効な範囲に再マッピングすることです。evdevxorg.confから。
Section "InputDevice"
Identifier "keyboard"
Driver "evdev"
Option "event_key_remap" "474=247"
EndSection
キーコードはカーネルから再マップすることもできます。
jason@io ~ $ sudo setkeycodes e0xx 266