キーボード配列 変更 キーボードマップ 設定 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が交換される。