キーボードリマッパーをXremapに移行した
Waylandでアプリケーション毎にキー配列を変えられるようなリマッパーを探していたのだが、なかなか良いものが見つけられずにいた。
最近ふとしたことで、Xremapを目にすることがあり、READMEをあらためて読んでみた。 このツール自体は昔から知っているのだが、当時はPython製で、Waylandはサポートされていなかったと記憶している。 しかしいまはRustで書かれていて、Waylandにも対応していた。そしてわたしのやりたいことはすべてサポートされているように見えた。すごい進化だ…!
というわけで試してみることにした。
インストール
自分の環境はArch Linuxで、riverを使っている。
riverはwlroots系なので以下をインストール
❯ paru -S xremap-wlroots-bin
設定
ユーザーをinputグループにいれて、udevのルールを追加。
❯ sudo usermod -a -G input $USER
❯ echo 'KERNEL=="uinput", GROUP="input", TAG+="uaccess"' | sudo tee /etc/udev/rules.d/99-input.rules
で、再起動。
リマップ設定
それでこれらのツールで実現したいことの基本的なことは以下の通り:
- SpaceキーをShiftとして利用。しかし単独で押したときはSpaceとして機能する
- 特定のアプリケーション(主にゲーム)ではこの機能は無効にしたい
- キーボードハードウェア毎の配列の調整
Xremapでこれらをみたす設定はこんなかんじになった。
shared:
games: &games
- steam_app_default # DiabloIV
- steam_app_2694490 # POE2
modmap:
- name: SandS
application:
not: *games
remap:
Space:
held: Shift_L
alone: Space
alone_timeout_millis: 999999999
- name: HHKB
device:
only: "Topre Corporation HHKB Professional"
remap:
KEY_GRAVE: KEY_ESC
KEY_ESC: KEY_GRAVE
KEY_BACKSLASH: KEY_BACKSPACE
KEY_BACKSPACE: KEY_BACKSLASH
起動はriverの設定から
xremap ~/.config/xremap/config.yaml --watch=config,device &
こんな感じで起動すればokそう。
よくわからなかったところ
- alone_timeout_millisの設定
- アプリケーションの指定方法
- watchコマンドラインオプション
alone_timeout_millisの設定
このタイムアウトを無効にしたかったので、最初は0を指定してみた。そうするとSpace単独でおしてもSpaceとして機能しなくなってしまったw その挙動を望む人はいないとおもうのでよくわからないのだが、とりあえず十分大きい値を設定することにした。
アプリケーションの指定方法
ドキュメントにはswayの例はあるものの、一般的なwlroots系WMで通用するアプリケーションの指定方法の記載がないため、最初はなにを指定したらいいのかわからなかった。
いろいろやってみたところ、どうやら lswt
で取得できる app_id
を指定すればよいみたいだ。
watchコマンドラインオプション
さいしょ単純に --watch
としか指定しなかったら、configの自動リロードなどが動作しないように思えた。 --watch=config
などと具体的に指定しないとうごかないっぽい?
まとめ
とまぁ、よくわからない点はあったものの、ひとまず満足。Xremapにはほかにも興味深い機能がいろいろあるので、それらもそのうち見てみたい。