XKBを使用して一部のキーコードを上書きする

XKBを使用して一部のキーコードを上書きする

XKBを使っていくつかのキーをスクランブルしたいです。 (なぜ?ノートブックでは、いくつかのキーの位置が不便です。)現在、xmodmapを使用しています。

keycode 110 = Prior
keycode 115 = Delete
keycode 112 = Next
keycode 117 = Insert
keycode 119 = End
keycode 118 = Home

代わりに、XKBを使用して特定のキーコードに異なるキーシンボルを割り当てるのではなく、特定の物理キーに異なるシンボル名を割り当てたいと思います。 (これだから。 )キーコード110をPGUP代わりに転送したい、キーコード115を代わりにHOME送信したいと思います。残りの設定は影響を受けてはいけません(したがってkeyymなどは送信され続け、他のすべてのキーはそのまま残ります)。DELEENDPGUPPrior

これらの特定のキーコードの割り当てをどのように変更できますか?ファイルをロードしようとしていますxkbcomp somefile.xkb $DISPLAY。ファイルに何を入れるべきですかsomefile.xkb

答え1

キーコードの変更を含むファイルを作成し(たとえば)保存します~/.xkb/keycodes/local。 (keycodesディレクトリはハードコーディングされています。デフォルトディレクトリは別のディレクトリにすることができ、ファイル名は別のディレクトリにすることができます。)これはあなたの状況に含まれます。

xkb_keycodes {
  <PGUP> = 110;
  <PGDN> = 112;
  <DELE> = 115;
  <INS> = 117;
  <HOME> = 118;
  <END> = 119;
};

ロードするには:

setxkbmap -print | sed -e '/xkb_keycodes/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.xkb - $DISPLAY

+localこれにより、現在の設定が出力されステートメントに追加され、xkb_keycodes includeXKBコンパイラにロードされ、インクルード~/.xkbパスに追加されます。 (ファイル名を以外の名前で指定した場合と~/.xkb/keycodes/local変更する必要があります。)これにより、他のすべての設定が維持されます。+local-I${HOME}/.xkb}

答え2

まずsetxkbmap -print > somefile.xkb、デフォルトとして使用するキーマップをインポートしてから、そのxkb_keycodesセクションで次のように必要なキー名をオーバーライドできます。

xkb_keymap {
 xkb_keycodes {
  include "evdev+aliases(azerty)"
  // Custom <key name> = keycode
  <INS> = 117;
  <HOME> = 118;
  <PGUP> = 110;
  <DELE> = 115;
  <END> = 119;
  <PGDN> = 112;
 };
 xkb_types { include "complete"};
 xkb_compatibility { include "complete"};
 xkb_symbols { include "pc+fr+inet(evdev)"};
 xkb_geometry { include "pc(pc104)"};
};

これにより、いくつかのキー名が複数回割り当てられるという警告が生成されますが、最後の名前だけが重要であるために機能します(したがって、インクルードの後に​​カスタム設定を指定することが重要です)。そして、ファイルを読むことができるという利点があります。

別の方法は、使用中のキーマップをファイルにダンプし、同じ行を変更するxkbcomp $DISPLAY somefile.xkbことです(評価されたインクルードと同じキーマップです)。これにより、複数の定義に関する警告は表示されませんが、読みにくくなります。

関連情報