今まではsetxkbmapなどでキーボードのキーをマッピングしていましたが、Waylandではsetxkbmapは効果がありません (その名の通り、X.Orgに対するツールだから)。そこで、udevで直接キーのマッピングができるのを知ったので、記しておきます。
Arch Linuxのこのページを見れば丁寧に説明されていますが、基本的にはhwdbファイルと呼ばれるあらゆるデバイスからの入力をマッピングするファイルを使って、自分の好みのマッピングを定義します。
ここでは、Mi Notebook Air 13.3を使っていて、左のAltをCtrl、Caps LockをESCにマッピングする場合を例として書きます。
/etc/udev/hwdb.d/70-custom-keyboard.hwdb
というファイルを作成し、以下の内容を書いて保存します。
# my custom keyboard key remap
evdev:atkbd:dmi:bvnInsydeCorp.:bvrA05:bd08/11/2016:svnTimi:pnTM1613:pvrA05:rvnTimi:rnTM1613:rvrA05:cvnTimi:ct10:cvrA05*
KEYBOARD_KEY_38=leftctrl
KEYBOARD_KEY_3a=esc
evdev:
から始まる部分が、デバイスを指定するところです。Mi Notebook Air 13.3では、その長い値が内蔵されているキーボードに対するデバイスのIDみたいな感じのようです。evemu-describeを使うと、内蔵されているキーボード以外のデバイスのIDも見れます。
# evemu-describe
そのIDの下にあるのが、マッピングです。KEYBOARD_KEY_38=leftctrl
の38
の部分が16進法のscancode、leftctrl
の部分がkeycodeになります。
scancodeは以下のコマンドで確認できます。
# showkey --scancodes
キーを押した時とキーを離した時の値が違いますが、私はキーを押した時の値を使いました。
keycodeは数値では指定できないので、ここにあるリストから相応の文字列を使います。
これで設定はおしまいです。後は最後にhwdbをbinファイルにしたりして、変更を反映させます。以下のコマンドで変更が反映されます。
# systemd-hwdb update
# udevadm trigger --verbose --sysname-match="event*"
以上でudevによってキーボードのキーをマッピングできます。