Kensington SlimBlade Pro を Fedora Wayland 環境で使う

はじめに

長いこと Logcool MX ERGO を使っていたけれど,5 年も使っていると表面のラバー部分の加水分解が進み,見るに耐えなくなってきた.乗り換え先として Kensington Slimblade Pro を買ってしまったものの,デフォルトのキーアサインだと絶妙にかゆいところに手が届かない感じがしないでもないので,キーアサインの設定方法を模索した.

買ったのはこの黒い玉のやつ.赤いのもいいよね

Amazon.co.jp

それとシリコンスプレーは必須だ.絶対に.

https://amzn.to/3GxLhqB

Windows ユーザは公式が提供している KensingtonWorks を使ってどうぞ.

Wayland 環境を取り巻く入力デバイスの事情

Wayland

Wayland は X11 の代替として開発されているウィンドウシステムプロトコルおよびアーキテクチャ.増築に次ぐ増築で複雑化した X Window System をモダンで安全でシンプルなものに置き換えるコンポジット型ウィンドウシステム.数年前から多くのディストリビューションで採用されはじめ,最近では各アプリケーションの対応も進み概ね安定してきたように思う.

X 環境では Xmodmap を使って簡単にキーコードを変換する仕組みがあったが,Wayland では Wayland Compositor を通じで各ウィンドウを操作するアーキテクチャとなっているため,カーネルと Wayland Compositor の間(①の部分)に evdev からの入力イベントを変換する仕組みを配置する必要がある.

What is libinput? — libinput 1.24.0 documentation

Wayland Compositor では libinput を使って入力イベントをスタックし,Wayland Client となる各アプリケーションへイベントを連携する.libinput はコマンドツールとしても提供されており,認識されたデバイスの確認や入力イベントのデバッグ等ができる.

SlimBlade は次のように認識されている.

$ sudo libinput list-devices | grep SlimBlade -A18
Device:           SlimBlade Pro
Kernel:           /dev/input/event21
Group:            10
Seat:             seat0, default
Capabilities:     pointer 
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      disabled
Nat.scrolling:    disabled
Middle emulation: disabled
Calibration:      n/a
Scroll methods:   button
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   flat *adaptive
Rotation:         n/a

入力イベントも次のように確認できる.

$ sudo libinput debug-events
***
***
***
-event21  DEVICE_ADDED            SlimBlade Pro                     seat0 default group10 cap:p left scroll-nat scroll-button
 event21  POINTER_MOTION          +0.000s         1.98/ -0.33 ( +6.00/ -1.00)
 event21  POINTER_MOTION          +0.008s         4.69/ -0.94 ( +5.00/ -1.00)
 event21  POINTER_MOTION          +0.017s         6.21/ -2.48 ( +5.00/ -2.00)
 event21  POINTER_MOTION          +0.025s         7.96/ -2.65 ( +6.00/ -2.00)

入力ユーティリティの選択肢

入力イベント変換の実装はいくつかあるが,毎度のことならが ArchLinux のページがよくまとめられている.

入力リマップユーティリティ - ArchWiki

今回は比較的ユーザー数が多そうで使い勝手の良さそうな Input Remapper を導入してみることにする.Arch のページには載ってないが,xmodmap が好きな人は xremap の方が雰囲気近いかもしれない.

https://github.com/sezanzeb/input-remapper/
GitHub - k0kubun/xremap: Key remapper for X11 and Wayland
Key remapper for X11 and Wayland. Contribute to k0kubun/xremap development by creating an account on GitHub.

前項で説明したとおり,これらのユーティリティは evdev からのイベントを変換してくれる仕組みなので,当然デバイス側にはマッピング設定を埋め込めない.どうしても接続先ホストに依存しないでデバイス側にマッピング設定を埋め込みたい場合は,途中にマッピング設定を保持できる変換デバイスを置くか,自作キーボード界隈のようにファームウェアに手を加える必要がある.

GitHub - jfedor2/hid-remapper: USB input remapping dongle
USB input remapping dongle. Contribute to jfedor2/hid-remapper development by creating an account on GitHub.
Hardware Keyboard Remapper(OS に依存しないキーボードのキー入れ替え)を作った
皆さんはキーボードのキーを入れ替えてますか? キー入れ替えのメジャーな用途は、 Ctrl キーと Cap Lock キーの入れ替えでしょう。 そのような人は、 「OS のキー

公式の KensingtonWorks もイベント変換するだけのツールのようだし,今回は簡単に使えるイベント変換で良しとする.

SlimBlade と Input Remapper

SlimBlade のボタン配置はデフォルトで次のような入力構成になっている.これはこれでよく考えられたボタン配置で,使っているとだんだんこのままでいい気がしてくる.が,とりあえず色々配置を変えて本当にこれが最適解なのか試してみたくなる.

┏━━━━━┳━━━━━┓
┃MIDDLE  ┃SIDE   ┃
┃  ┏━━┻━━┓  ┃
┃  ┃WHEEL UP↑┃  ┃
┝━━┫     ┣━━┫
┃  ┃WHEEL DN↓┃  ┃
┃  ┗━━┳━━┛  ┃
┃     ┃     ┃
┃LEFT   ┃RIGHT   ┃
┗━━━━━┻━━━━━┛

Input Remapper の設定にあたり,最低限目を通す必要があるドキュメントはこのあたり.入力イベントのシンボルやマクロを組み合わせて複雑なマッピングが設定できるので,理想の挙動をイメージしながら読むべし.

ということでインストールしてサービスを起動する.

$ sudo dnf install input-remapper
$ sudo systemctl enable input-remapper
$ sudo systemctl start  input-remapper

GUI の設定画面を起動する.あまり複雑な設定をしなければ,GUI 自体は結構直感的な UI になっているので設定に困ることはないはず.

$ input-remapper-gtk

少し注意が必要なのは複数ボタンを組み合わせたマッピング.複数ボタンの組み合わせでは,すべての組み合わせキーが押されたタイミングで割り当てたマッピングがトリガーされる.例えば MIDDLE + SIDE に何らかのマッピングを設定した場合,各ボタンを押したタイミングが若干ずれると先に押した MIDDLE もしくは SIDE のマッピングがトリガーされてから,MIDDLE + SIDE のマッピングがトリガーされる.

いちおう Release Input トグルを設定することで組み合わせの一部である入力を開放できるようだが,理想の状態にするにはちょっと試行錯誤がいるかもしれない.

A mapping with an input combination is only injected once all combination keys are pressed. This means all the input keys you press before the combination is complete will be injected unmodified. In some cases this can be desirable, in others not. In the advanced input configuration there is the Release Input toggle. This will release all inputs which are part of the combination before the mapping is injected. 

https://github.com/sezanzeb/input-remapper/blob/main/readme/usage.md#combinations

なんやかんやあって最終的な状態はこんな感じ.ブラウザの進むボタンを追加しただけ.

おわりに

簡単な Wayland の仕様と Input Remapper を使った入力イベントを変換する方法を整理した.

SlimBlade って結構ボタンの隙間開いてるけど,みんなどうやって掃除してるんでしょう.全面に貼れる保護フィルム的なものがほしいなぁ.

コメント

タイトルとURLをコピーしました