Linuxのキーマップを変更する方法はいくつかあるのですが、Xの設定ですると意外にハマるので udevを使って根本から変更していきます。
- USB KeyBoard : NIZ ATOM66
- OS : POP OS 22.04
最終的なものは以下のファイル /etc/udev/hwdb.d/90-bluetoothkey.hwdb
を作成します
evdev:input:b0005v05ACp0110e0100*
KEYBOARD_KEY_700e6=rightalt
KEYBOARD_KEY_700e4=hiragana
KEYBOARD_KEY_700e3=katakana
KEYBOARD_KEY_700e2=leftmeta
KEYBOARD_KEY_700e0=capslock
KEYBOARD_KEY_70039=leftctrl
設定内容を更新するためには systemd-hwdb update && udevadm trigger
で実施します
設定ファイルの中身を見ていく前に、1行目の evdev のあとの番号を調べるのが結構手間なのですが以下のコマンドを実行してからBluetoothを接続すると情報がだらだらっと出てきます。これの input の項目が該当します。
❯❯❯ sudo udevadm monitor --environment | grep -i modalias
MODALIAS=hid:b0005g0001v000005ACp00000110
MODALIAS=input:b0005v05ACp0110e0100-e0,1,2,3,4,11,14,k71,72,73,74,77,7D,7E,7F,80,82,83,85,86,87,88,89,8A,8B,8C,8E,8F,90,96,98,9B,9C,9E,9F,A1,A3,A4,A5,A6,A7,A8,A9,AB,AC,AD,AE,B1,B2,B5,CE,CF,D0,D1,D2,D4,D8,D9,DB,E0,E1,E4,E5,E6,EA,EB,F0,F1,F4,100,161,162,166,16A,16E,172,174,176,177,178,179,17A,17B,17C,17D,17F,180,182,183,185,188,189,18C,18D,18E,18F,190,191,192,193,195,197,198,199,19A,19C,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA,1AB,1AC,1AD,1AE,1AF,1B0,1B1,1B7,1BA,240,241,242,243,244,245,246,247,249,24A,250,251,r6,C,a20,m4,l0,1,2,3,4,sfw
MODALIAS=input:b0005v05ACp0110e0100-e0,1,2,4,k110,111,112,r0,1,8,B,am4,lsfw
MODALIAS=hid:b0005g0001v000005ACp00000110
MODALIAS=hid:b0005g0001v000005ACp00000110
MODALIAS=input:b0005v05ACp0110e0100-e0,1,2,3,4,11,14,k71,72,73,74,77,7D,7E,7F,80,82,83,85,86,87,88,89,8A,8B,8C,8E,8F,90,96,98,9B,9C,9E,9F,A1,A3,A4,A5,A6,A7,A8,A9,AB,AC,AD,AE,B1,B2,B5,CE,CF,D0,D1,D2,D4,D8,D9,DB,E0,E1,E4,E5,E6,EA,EB,F0,F1,F4,100,161,162,166,16A,16E,172,174,176,177,178,179,17A,17B,17C,17D,17F,180,182,183,185,188,189,18C,18D,18E,18F,190,191,192,193,195,197,198,199,19A,19C,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA,1AB,1AC,1AD,1AE,1AF,1B0,1B1,1B7,1BA,240,241,242,243,244,245,246,247,249,24A,250,251,r6,C,a20,m4,l0,1,2,3,4,sfw
MODALIAS=input:b0005v05ACp0110e0100-e0,1,2,4,k110,111,112,r0,1,8,B,am4,lsfw
MODALIAS=hid:b0005g0001v000005ACp00000110
次にどのキーを変更するかは evtest でわかります。適切なInputを選択します。
❯❯❯ sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Lid Switch
(略)
/dev/input/event19: Bluetooth Keyboard
/dev/input/event20: Bluetooth Keyboard Mouse
Select the device event number [0-20]: 19
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x5ac product 0x110 version 0x100
Input device name: "Bluetooth Keyboard"
Supported events:
キーボードのキーを打つと以下のように出てきます。この1行目の最後の値がキーコードになります。以下の例では 700e4 が該当します。これを hiragana キーに変換しているという内容です。
Event: time 1673948095.958733, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e4
Event: time 1673948095.958733, type 1 (EV_KEY), code 91 (KEY_HIRAGANA), value 0
Event: time 1673948095.958733, -------------- SYN_REPORT ------------
以上で変更ができます。updateコマンドを実行するのをお忘れなく