Ubuntu 20.04でキーマップをカスタマイズする
前回に引き続き、久しぶりにUbuntuを触ったらてこずったのでメモ。
Linuxでキーマップをカスタマイズする方法といったらXmodmapだったが現在は違うらしい。 Xmodmapでも一時的にキーマップは変わるが、いつのまにか元に戻ってしまう。 代わりに現在ではxkbというものを使うらしい。
調べたところ設定方法はいくつかありそうだった
自分の場合はキーマップの設定はdotfilesで管理したいため2番目の方法を採用した。 ホームディレクトリ以下に追加のキーマップを定義するファイルを作成し、ログイン後に読み込むことにする。
設定したいキーマップ
以下のようにキーマップに変更したい。
- Caps Lock を Control へ
- 無変換 を Control へ
- 変換 を Shift へ
- (Apple Magic Keyboard) 英数 を Control へ
- (Apple Magic Keyboard) かな を Control へ
xkbのドキュメントをすべて読めば書き方がわかるのかもしれないが、よくわからなかったのでひとまずネット上の記事を参考にして書いた。
$ mkdir -p $HOME/.xkb/symbols
$ cat - <<EOF >$HOME/.xkb/symbols/custom
partial modifier_keys
xkb_symbols {
key <CAPS> { [ Control_L, Control_L ] };
modifier_map Control { <CAPS> };
key <MUHE> { [ Control_L, Control_L ] };
modifier_map Control { <MUHE> };
key <HENK> { [ Shift_R ] };
modifier_map Shift { <HENK> };
key <HJCV> { [ Control_L, Control_L ] };
modifier_map Control { <HJCV> };
key <HNGL> { [ Shift_R ] };
modifier_map Shift { <HNGL> };
};
EOF
CAPS、MUHEなどの文字列は
xev
でkeycodeを調べて/usr/share/X11/xkb/keycodes/evdev
からkeycodeに対応する行を探す
で見つけることができる。
Control_L, Control_L
と書いている箇所の2つめのControl_L
はShiftを押しながそのキーを押したときもControlとして動作させるため。
後述するが期待通り動いていない。
上で定義したcustom
シンボルを上書きで読み込めばよい。現在のキーマップを調べてcustom
を追加する。
$ setxkbmap -print
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+jp+us:2+inet(evdev)" };
xkb_geometry { include "pc(pc105)" };
};
の場合は、
$ cat - <<EOF >$HOME/.keymap.xkb
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+jp+us:2+inet(evdev)+custom" };
xkb_geometry { include "pc(pc105)" };
};
EOF
$ xkbcomp -I$HOME/.xkb $HOME/.keymap.xkb $DISPLAY 2>/dev/null
最後のxkbcomp
で適用される。このコマンドをログイン時に自動で実行されるようにすればよい。
課題
- Shift+Caps+aでShift+Ctrl+aと同じように動作してほしいがうまくいかない
- サスペンドからの復帰後に元に戻ってしまう
参考
関連記事
- Ubuntu 20.04でMagic Trackpadのマルチタッチジェスチャーを使う
- fail2banでBotからsshdとNginxを守る
- NginxでLet's Encryptの証明書を扱う
- 必要最低限の設定で監視エージェントに監視させる
- XtraBackupによるバックアップ設計
comments powered by Disqus