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などは送信され続け、他のすべてのキーはそのまま残ります)。DELE
END
PGUP
Prior
これらの特定のキーコードの割り当てをどのように変更できますか?ファイルをロードしようとしています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
include
XKBコンパイラにロードされ、インクルード~/.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
ことです(評価されたインクルードと同じキーマップです)。これにより、複数の定義に関する警告は表示されませんが、読みにくくなります。