コンバーチブルPC(2-in-1 ノートPC)とkanata

先日導入したVersaPro Eシリーズ タイプVRについて、タブレットモード時に音量キーが効かなくなることに気づいた。色々調べてみると、どうやらキーリマップに用いているkanataがタブレットモード時に全部のボタンをひとまとめで無効にしてしまっているようだ。

以下、調査と対策について。

下記のコマンドを実行すると、ボリュームボタンのデバイス名、タブレットモードへの切り替え検知、ボタンを押したことを検知した際にその内容が表示される。

sudo apt update && sudo apt install libinput-tools -y
sudo libinput debug-events

このとき、タブレットモードに入る前はちゃんとボリュームボタンとしてイベントが発生しているのに、タブレットモードに入ったあとはイベントが発生していない。下記のコマンドでevtestで個別のデバイスについて調べようとすると、何かのプロセスが掴んでるから調べられないよ、と表示される。

sudo apt install evtest -y
sudo evtest /dev/input/eventX

(Xにはイベントの番号が入る。ちなみに、私の場合はevent11 Intel HID 5 button arrayだった)

その掴んでるプロセスが何かを下記のコマンドで調べる。

fuser -v /dev/input/eventX

すると、私の環境で出てきたのはgnome-shellkanataだった。試しにkanatasystemctl --user stop kanataで止めると、音量ボタンはタブレットモードでも動作した。

さて、どうするか。kanatalinux-dev-names-excludeを使ってデバイス名でgrab対象から外すことができる。これを使うことにした。キーリマップを設定しているファイルに下記の記述を追加する。デバイス名は環境に合わせて変更する。

(defcfg
  linux-dev-names-exclude (
    "Intel HID 5 button array"
  )
)

systemctlでserviceを再起動して、ついでにどのデバイスをgrabしているかを確認する。

systemctl --user restart kanata
journalctl --user -u kanata -e

これで音量ボタンに関係するデバイスを掴んでいなければ一件落着ってワケ。まだ余計なものをgrabしていたらlinux-dev-names-excludeに追加しておいてもいいかもしれない。