修飾子のキーコードは、キーボードレイアウトやキーボードモデルとは独立していますか?

修飾子のキーコードは、キーボードレイアウトやキーボードモデルとは独立していますか?

たとえば、左コントロールのキーコードは常に37ですか?そのようなキーコードのリストはどこにありますか?

答え1

いいえ。これはキーボード構成(および最終的にハードウェア)によって異なります。同じハードウェアを使用している場合は問題ありません。

xtermでキーコードを使用するmodifyOtherKeys特徴。いくつかの背景知識(および複数のキーボードタイプの例)XTerm - 「その他」修飾キーページ。

このページのテーブルは、次のように作成されました。修正キー.pl、与えられたXキーボード構成に対するxtermの動作をエミュレートするスクリプトです。以下から情報を取得します。「ローカライズ状態」、そして一部はkbmapの設定(やや読みやすい形で)。最終的に、このデータは他のソースからコンパイルされたテーブルから来ますが、これらのユーティリティはXキーボード構成で利用可能な情報を取得する最も簡単な方法です。

私の記憶を確認しながら、次の表の変更に関する詳細を表示するスクリプトを作成しました。

#!/bin/sh
for kbd in apple altgr-intl pc105
do
for lang in us gb fr
do
setxkbmap -model $kbd -layout $lang -print | \
        xkbcomp - -C -o - >/tmp/$kbd-$lang.log 2>/dev/null
done
done

XキーコードsymCacheこれらのソースファイルで定義された配列のインデックスは、正確に次のようになります。たとえば、次のようになります。

#define NUM_SYMBOLS     358
static KeySym   symCache[NUM_SYMBOLS]= {

ただし、テーブルのサイズは構成によって変わります。

altgr-intl-fr.log:#define NUM_SYMBOLS   347
altgr-intl-gb.log:#define NUM_SYMBOLS   348
altgr-intl-us.log:#define NUM_SYMBOLS   254
apple-fr.log:#define NUM_SYMBOLS        358
apple-gb.log:#define NUM_SYMBOLS        359
apple-us.log:#define NUM_SYMBOLS        265
pc105-fr.log:#define NUM_SYMBOLS        375
pc105-gb.log:#define NUM_SYMBOLS        376
pc105-us.log:#define NUM_SYMBOLS        282

そして、左/右のコントロールシンボルは、いくつかのテーブルで異なるオフセットとして表示されます。

altgr-intl-fr.log:       XK_Control_L,      XK_Super_L,      XK_Shift_R,    XK_Control_R,
altgr-intl-gb.log:       XK_Control_L,      XK_Super_L,      XK_Shift_R,    XK_Control_R,
altgr-intl-us.log:        XK_Num_Lock,      XK_Shift_L,    XK_Control_L,      XK_Super_L,
apple-fr.log:       XK_Control_L,      XK_Super_L,      XK_Shift_R,    XK_Control_R,
apple-gb.log:       XK_Control_L,      XK_Super_L,      XK_Shift_R,    XK_Control_R,
apple-us.log:        XK_Num_Lock,      XK_Shift_L,    XK_Control_L,      XK_Super_L,
pc105-fr.log:       XK_Control_L,            XK_q,            XK_Q,           XK_at,
pc105-gb.log:       XK_Control_L,            XK_a,            XK_A,           XK_ae,
pc105-us.log:        XK_Num_Lock,      XK_Shift_L,    XK_Control_L,      XK_Super_L,

だから私はこのキーコードを望んでいませんいつもすべてのキーボード構成では、値は同じです。

問題のコメントには、xev現在設定されているキーコードを表示する方法が記載されています。私の左のコントロールは67(いいえ37):

KeyRelease event, serial 34, synthetic NO, window 0xa00001,
    root 0x111, subw 0xa00002, time 51155669, (23,30), root:(43,73),
    state 0x4, keycode 67 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0xa00001,
    root 0x111, subw 0xa00002, time 51156901, (23,30), root:(43,73),
    state 0x0, keycode 70 (keysym 0xffe4, Control_R), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

関連情報