キーボード配列 変更 キーボードマップ 設定 xkb (ubuntu)

特定のキーと特定のキーを交換させたい、
と思うことがたまにあるので、
その方法をまとめてみました。

# mkdir -p ~/.xkb/keymap ~/.xkb/symbols

# setxkbmap -print > ~/.xkb/keymap/mykbd
# vim ~/.xkb/symbols/myswap

以下をコピペ

partial modifier_keys
xkb_symbols "swapkeys" {
replace key <ESC> {[ A ] };
};

ここでの<ESC>をキーコード、Aをキーシンボルと呼ぶことにする

#vim ~/.xkb/keymap/mykbd

xkb_symbols { include "pc+us+inet(evdev)" };

xkb_symbols { include "pc+us+inet(evdev)+myswap(swapkeys)" };
に変更*us(dvorak)のようにusの後にかっこでくくってsetxbkmapの引数を書けばdvorak配列に固定される。

#vim ~/.bashrc

以下を追記

xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2> /dev/null

# source ~/.bashrc

これで、ESCボタンを押すことで大文字のAが出力されるようになる
これから希望のキーボードマップにするために
myswapのreplaceの行を適宜変更していく

特定のキーコード、キーシンボルを特定する方法
#xev

適宜キーを押下
keycodeに書いてある数字と、keysymの右の右のキー名(かっこの右端の文字列)を控える
この数字がキーコード数値、キー名がキーシンボルである。
Ctrl+Cで終了xev終了

# cat /usr/share/X11/xkb/keycodes/evdev | grep [キーコード数値]

そのキーコード数値と一致するキーコードを控える(<と>で囲まれているもの)

# vim ~/.xkb/symbols/myswap

replaceの行のキーコードとキーシンボルを書き換える

(例)

partial modifier_keys
xkb_symbols "swapkeys" {
replace key <LFSH> {[ Caps_Lock ] };
 replace key <CAPS> {[ Shift_L ] };
};

こう書けば左SHIFTとCapsLockが交換される。