キーまたはキーコードは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キーを押すか離すかをキャプチャできないようです。次の2つのファンクションキーの組み合わせ(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キーコードが正しくバインドされていないようです。

私は何が間違っていましたか?別の方法がありますか?

答え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

関連情報