いんとろでぅーす xremap
仕事で利用したりしている Slack などのキーボードでの操作が面倒になってきたので、 emacs keybind が利用できるようにするため xremap を利用することにした。
この記事はその利用するまでの顛末をメモとして残す。
導入
これは、さくっと cargo install xremap
でインストールできます。
rust をまだ導入していない方は 公式ページのインストール を参考にインストールしてください。
起動!!!
これも簡単で以下のコマンドで起動します。
xremap /path/to/your/xremap/config.yml
エラーに遭遇
起動してみると以下のようなメッセージが出て起動ができませんでした。
Selecting devices from the following list:
------------------------------------------------------------------------------
/dev/input/event0 : Power Button
/dev/input/event1 : Power Button
/dev/input/event2 : HDA NVidia HDMI/DP,pcm=3
/dev/input/event3 : HDA NVidia HDMI/DP,pcm=7
/dev/input/event4 : HDA NVidia HDMI/DP,pcm=8
/dev/input/event5 : HDA NVidia HDMI/DP,pcm=9
/dev/input/event6 : HDA NVidia HDMI/DP,pcm=10
/dev/input/event7 : HDA NVidia HDMI/DP,pcm=11
/dev/input/event8 : Pekaso The Fortitude60 Keyboard
/dev/input/event9 : Pekaso The Fortitude60 Keyboard Mouse
/dev/input/event10: Pekaso The Fortitude60 Keyboard System Control
/dev/input/event11: Pekaso The Fortitude60 Keyboard Consumer Control
/dev/input/event12: Kensington Kensington Slimblade Trackball
/dev/input/event13: Burr-Brown from TI USB Audio CODEC
/dev/input/event14: HD Web Camera: HD Web Camera
------------------------------------------------------------------------------
Selected keyboards automatically since --device options weren't specified:
------------------------------------------------------------------------------
/dev/input/event8 : Pekaso The Fortitude60 Keyboard
------------------------------------------------------------------------------
Error: Failed to build an output device: no such file or directory (os error 2)
で、答えは出てるので設定ファイル、対象となる入力デバイスなどを見ますが、 これらのファイルはあるのでわからんとなります。
しかたないのでソースをダウンロードして手元でデバッグしてみます。
rust というか cargo は便利で、cargo run
でソースをいじったあとすぐにコンパイルして利用することができます。
今回はメンドウなので怪しいところに println
文を挿入して実行してみます。
そうすると、どうやら src/output.rs
の 39 行目の VirtualDeviceBuilder
に問題がありそう ということがわかりました。
この行のどこに問題あるんだ?と思い利用しているこのライブラリ evdev を見ることにしました1。
そうすると /dev/uinput
が必要 ということがわかります。
それで /dev/uinput
があるかどうか ls
で見ますが、当然無いので無いです。
なぜ無いのかというと INPUT_UINPUT
でドライバーを入れていなかったようです。
なのでカーネルのビルトインとしてビルドして再起動。
Defined at drivers/input/misc/Kconfig:513
Prompt: User level driver support
Depends on: INPUT [=y] && INPUT_MISC [=y]
Location:
-> Device Drivers
-> Input device support
-> Generic input layer (needed for keyboard, mouse, ...) (INPUT [=y])
-> Miscellaneous devices (INPUT_MISC [=y])
-> User level driver support
再起動したら、確認を行ないます。
$ xremap ~/.config/xremap/config.yml
Selecting devices from the following list:
------------------------------------------------------------------------------
/dev/input/event0 : Power Button
/dev/input/event1 : Power Button
/dev/input/event2 : HDA NVidia HDMI/DP,pcm=3
/dev/input/event3 : HDA NVidia HDMI/DP,pcm=7
/dev/input/event4 : HDA NVidia HDMI/DP,pcm=8
/dev/input/event5 : HDA NVidia HDMI/DP,pcm=9
/dev/input/event6 : HDA NVidia HDMI/DP,pcm=10
/dev/input/event7 : HDA NVidia HDMI/DP,pcm=11
/dev/input/event8 : Pekaso The Fortitude60 Keyboard
/dev/input/event9 : Pekaso The Fortitude60 Keyboard Mouse
/dev/input/event10: Pekaso The Fortitude60 Keyboard System Control
/dev/input/event11: Pekaso The Fortitude60 Keyboard Consumer Control
/dev/input/event12: Kensington Kensington Slimblade Trackball
/dev/input/event13: Burr-Brown from TI USB Audio CODEC
/dev/input/event14: HD Web Camera: HD Web Camera
------------------------------------------------------------------------------
Selected keyboards automatically since --device options weren't specified:
------------------------------------------------------------------------------
/dev/input/event8 : Pekaso The Fortitude60 Keyboard
------------------------------------------------------------------------------
yatta 起動できた! あとは、アプリでキーバインドが効いているかどうかを確認して、 Window Manager である i3 の起動時に xremap が起動するようにしたりしています。
おわり
最近、 Mac との行き来をしていると emacs keybind が使えないときにちょっといらっとしますので使えるようにキーバインドを変更してみました。
設定ファイルの動的読み込みに対応していないのがちょっと面倒なのですが2、これで Slack などで C-a
で行頭にもどれるようになりました。便利。