前説
サークルのLT会で発表した内容を再編集して投稿します.
US配列キーボードのCapsLockを全角半角に割り当て直す試みをもととしています.
Ubuntuの事情
Ubuntuのデフォルトのディスイプレイサーバーが,数年前からX window systemからWaylandに変わっているため.情報の多いxmodmapやxkbの設定ファイルの構成といった方法は動作しない.そのため,キーマップの変更にあたっては,X window systemでもWaylandでも問題なく動作するudevを用いた方法を勧める.
参考サイト
上記サイトが詳しい.上記サイトに記載がなかった情報はさいごににまとめる.
実際の変更手順
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 systemd-hwdb update
sudo udevadm trigger
と打てば完了
さいごに
私の環境では,この設定を反映した状態でCapsLockを押してもなんの反応もありませんでした.
xev
で確認してみるとkeysym(キーの役割)が消えていたのでzenkakuhankakuは割り当てられない様子.
に使用できる可能性のあるキーがまとまっているので,この中から地道に試して,ZenkakuHankakuの代わりの都合の良いキーを探してみると,
Hiraganaが割り当てられ,CapsLockを置き換える目的が達成されました.