Waylandでマウスボタンをリマップする
手元の Ubuntu を 20.04 から 21.04 に変えたらデフォルトセッションが Wayland になったことで /usr/share/X11/xorg.conf.d の設定が効かなくなりました.今回,udev hwdb を利用してみたところ Wayland でも問題なくマウスボタンのリマップができたので,その方法をメモしておきます.
やりたいこと
わたしは Kensington の Wireless Expert Mouse を左側に置いて使用しているので, 左クリックと右クリックを入れ替えて使用しています.ここでは単純に左右クリックを入れ替える方法を例に説明しますが,他のデバイス・他のキーでも同じ方法でリマップできるはずです.
evtest でキーコードを調査する
まずは evtest で必要な情報を集めます.
$sudo apt install evtest
$sudo su
#evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Power Button
/dev/input/event1: Power Button
/dev/input/event2: Kensington Expert Wireless TB Mouse
/dev/input/event3: Kensington Expert Wireless TB Consumer Control
/dev/input/event4: ZSA Technology Labs Inc ErgoDox EZ
/dev/input/event5: ZSA Technology Labs Inc ErgoDox EZ Mouse
/dev/input/event6: ZSA Technology Labs Inc ErgoDox EZ System Control
/dev/input/event7: ZSA Technology Labs Inc ErgoDox EZ Consumer Control
/dev/input/event8: ZSA Technology Labs Inc ErgoDox EZ Keyboard
/dev/input/event9: HDA ATI HDMI HDMI/DP,pcm=3
/dev/input/event10: Logitech M185
Select the device event number [0-10]: 2
デバイスを訊かれるので目的のデバイスを選択します.Consumer Control と Mouse がありますが,Mouse を選択しました.
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x47d product 0x8018 version 0x111
Input device name: "Kensington Expert Wireless TB Mouse"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 272 (BTN_LEFT)
Event code 273 (BTN_RIGHT)
Event code 274 (BTN_MIDDLE)
Event code 275 (BTN_SIDE)
Event code 276 (BTN_EXTRA)
Event type 2 (EV_REL)
Event code 0 (REL_X)
Event code 1 (REL_Y)
Event code 6 (REL_HWHEEL)
Event code 8 (REL_WHEEL)
Event code 11 (REL_WHEEL_HI_RES)
Event code 12 (REL_HWHEEL_HI_RES)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
このような情報が出てきます.vendor ID や product ID, デバイス名がわかります. ここで入力待ち状態になっているのでトラックボールのボタンを押してキーコードを調べます.
Event: time 1624788775.418841, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1624788775.418841, type 1 (EV_KEY), code 272 (BTN_LEFT), value 1
Event: time 1624788775.418841, -------------- SYN_REPORT ------------
Event: time 1624788775.434840, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1624788775.434840, type 1 (EV_KEY), code 272 (BTN_LEFT), value 0
Event: time 1624788775.434840, -------------- SYN_REPORT ------------
Event: time 1624788778.622320, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
Event: time 1624788778.622320, type 1 (EV_KEY), code 273 (BTN_RIGHT), value 1
Event: time 1624788778.622320, -------------- SYN_REPORT ------------
Event: time 1624788778.712303, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
Event: time 1624788778.712303, type 1 (EV_KEY), code 273 (BTN_RIGHT), value 0
Event: time 1624788778.712303, -------------- SYN_REPORT ------------
これでデバイス名(Kensington Expert Wireless TB Mouse)とキーコード(左クリックが90001, 右クリックが90002)がわかりました.
udev/hwdb でキーをリマップする
/etc/udev/hwdb.d/ に設定ファイルを作成してデバイスの設定をオーバーライドします.
/etc/udev/hwdb.d/70-Kensington-TBMouse.hwdb
evdev:name:Kensington Expert Wireless TB Mouse:*
KEYBOARD_KEY_90001=BTN_RIGHT
KEYBOARD_KEY_90002=BTN_LEFT
Kensington Expert Wireless TB Mouseというデバイスが接続された場合,90001を右クリックに,90002を左クリックに割り当てるという設定になります.この設定を反映させます.
#systemd-hwdb update
ここでエラーが出力される場合は設定ファイルを見直してください.何も出力されなければOKです.対象のデバイスを抜き差しすると設定が反映されます.