XKBでいくつかのキーコードを上書きする


10

XKBでいくつかのキーをシャッフルしたいと思います。(なぜですか?いくつかのキーが不便に配置されているラップトップで。)私は現在xmodmapを使用しています:

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

代わりに、特定のキーコードに異なるキーシムを割り当てるのではなく、XKBを使用して、特定の物理キーに異なるシンボリック名を割り当てたいと思います。(これが理由です。)私はキーコード110を送信するPGUP代わりにHOME、キーコード115を送信するDELE代わりにEND他の構成は受けていないことなど、(そのPGUPキーシンボルを送信しておくことですPriorなど、他のすべてのキーが残っています彼らはあるとして)。

これらの特定のキーコードの割り当てを変更するにはどうすればよいですか?でファイルをロードしますがxkbcomp somefile.xkb $DISPLAY、何を入れる必要がありsomefile.xkbますか?

回答:


14

キーコードの変更を含むファイルを作成し、(たとえば)という名前で保存し~/.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}ます。)これにより、他のすべての設定が保持されます。


1
したがって、これは予想されるパスであり、-Iスイッチにパスを渡す方法です。おかげで、マンページからこれを理解することができませんでした。
L.レブレル2016

魅力のように働いた!希望更新xkb_symbols場合、それは働いた、ちょうどそれとxkb_keycodesを置き換える、働いていた
zw963

5

まず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)"};
};

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

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


1
これらの名前(evdev+aliases(azerty)など)はどこから来たのですか?完全な再構成ではなく、相対的な変更を明示的に実行したい。質問にリストされている6つ以外のキーは影響を受けてはならず、コマンドを発行したときの状態のままである必要があります。
Gilles「SO-邪悪なことをやめよう」

1
これらはからのものでsetxkbmap -print、からのファイルです/usr/share/X11/xkb/。キーマップ全体を与える必要があると思いますがxkbcomp、私は間違っている可能性があります...
Leiaz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.