
前説
LT会にて発表した内容を再編集してお届けしています.
US配列キーボードのCapsLockを全角半角に割り当て直す試みをもととしています.
Ubuntuの事情
Ubuntuのデフォルトのディスイプレイサーバーが,数年前からX window systemからWaylandに変わっているため,情報の多いxmodmapやxkbの設定ファイルの構成といった方法は動作しません.そのため,キーマップの変更にあたっては,X window systemでもWaylandでも問題なく動作するudevを用いた方法を勧めます.
参考サイト
http://iranoan.my.coocan.jp/essay/pc/202104020.htm
上記サイトが詳しいです.上記サイトに記載がなかった情報はさいごににまとめてあります.
実際の変更手順
Udevでkeymapを変更する流れ
- キーボードを特定する
- キーを特定する
- 設定ファイルを作る
- 設定を再読込する
以下ではCapslockを全角半角に変えてみます.
1.キーボードを特定する
cat /proc/bus/input/devices
を実行する.

こんなのがいっぱい出てきます.そのなかから,キーボードっぽいやつを一つ選んで(Name や Handlersに注目),
I: Bus=0003 Vendor=.... Product=.... Version=....
をメモ.ちなみにUSBキーボードならBus=0003です.
2.キーを特定する
evtestを使おう.aptで落とせます.以下のようにコマンドを打てばインストールされます.
sudo apt install evtest
インストール後
sudo evtest
で,インプットイベントをモニタするか聞いてくれます. キーボードっぽいやつを選んでCapsLockを押してみよう.

うまく行かなかったら,他のキーボードっぽいイベントを試してみましょう.多分どれかがちゃんと動きます.
動いた様子:

ここの,"value"の値をメモっておきましょう.
3.設定ファイルを作る
/etc/udev/hwdb.dに設定ファイルを作ります. 名前は拡張子が.hwdbなら何でもOK. 内容はこんな感じ:
evdev:input:b....v....p....*
KEYBOARD_KEY_....=zenkakuhankaku
b....v....p....* のところは,キーボードを特定のところでメモったBus,Vendor,Productの値を入れます.*はワイルドカードなのでそのまま.
KEYBOARD_KEY_....のところは,キーを特定のところでメモったValueの値を入れましょう
4. 設定を再読込する
端末で
sudo system-hwdb update
sudo udevadm trigger
と打てば完了
さいごに
私の環境では,この設定を反映した状態でCapsLockを押してもなんの反応もありませんでした. xevで確認してみるとkeysym(キーの役割)が消えていたのでzenkakuhankakuは割り当てられない様子.
https://hal.freedesktop.org/quirk/quirk-keymap-list.txt
に使用できる可能性のあるキーがまとまっているので,この中から地道に試して,ZenkakuHankakuの代わりの都合の良いキーを探してみると, Hiraganaが割り当てられ,CapsLockを置き換える目的が達成されました.