晴れたり沼ったり

へんなものに沼ることがあります。

linux のキー リマップ(私的)決定版?? keyd

忘備録的内容

USキーボードフェチなのだが、デフォルトの control の位置がAの横ではない、漢字変換のモードを切り替えるキーが無いのでなにかにリマップしないといけないのでいつもいろいろ悩まされ続けている*1。例としてはこんなところだろうか。

GUIでOKだがCUIのターミナルではNG、あるいはその逆

カーネルがバージョンアップすると使えなくなる。

・Xからwaylandに変わってうまくいかなくなる。

・漢字モードから抜けるときはうまくリマップされてるのに、その逆はだめ

・できるはずで apt でパッケージから入れられるくせに想定通り動作しない

・ソースからコンパイルしてエラー無く終わるが肝心のバイナリが出来てない。

(ソース見て直してcontributeするほどの知識も気力もない:-) )

 

3日前くらいにあるオモチャがイギリスから自宅に到着したので、そいつに弄ばれている最中で相当沼っていたのだが、なんとなくこれで決定版でどのマシン(systemdなlinux系だけかも。macOSも使えるかも?)でも適用できそうなやつを発見したのでインストールメモである。ubuntu 23.10 でまずはトライ*2。

うまく行ったのは keyd という全く無名?のキーリマッパーである。

このページからたどり着けた。

インストールは書いてあるとおりだが、

git clone https://github.com/rvaiya/keyd
cd keyd
make && sudo make install
sudo systemctl enable keyd && sudo systemctl start keyd

で、OK。

key を調べるときは sudo keyd monitor である。

設定ファイルはここで、 /etc/keyd/default.conf

サンプルとしてはこんなのが書いてある。設定が終わったら sudo keyd reloadとタイプして設定ファイルを読み込み。

[ids]
*
[main]

# Maps capslock to escape when pressed and control when held.
capslock = overload(control, esc)

# Remaps the escape key to capslock
esc = capslock

特定のキーボードのときだけやりたいときは [ids]を使うようだ。

この例はcapslockを押してそのまま離したらescに。capslock+なんかのキーだと controlキーとして作用する。escはcapslockにということだが、私の例だと下記のものでうまくいってる。

[ids] * [main]

rightalt = henkan

capslock = layer(capslock)

[capslock:C]

 

単に capslock = control で良さそうだと思ったがエラーになる。ここは私的には謎。

もちろんこれだけではだめで fcitx5 のキーボードプリファレンスで期待する動作にしてあげないといけない。

もっと複雑なこともできるっぽいけど、control<->capslockとIMEに使える別キーがアサインできれば満足すぎるのでこれで私はOK!

定義エラー時のログはこの出力をみて修正する*3。

sudo journalctl -eu keyd

# keydはソースコード量も少ないし比較的シンプルだし、依存するライブラリも無いのでアップデートでいろいろ影響受ける可能性も少なさそう。

# オモチャのほうは感激的に早いけどなんかいきなりブラウザが動かなくなったりしてなぞな挙動が時々発生した。まあ、2,3ヶ月したらもう少し安定するかな?

 

## fcitx5でchromiumだと日本語が入らないという問題はここの解法が一番いいみたい。

 

*1: windows環境では AutoHotKeyで満足している。昔はキーボードドライバの入れ替えとかもしてた。

*2: X64な ubuntu 2204 でも動作確認した。Raspi4の 2310でも動いた。

 

*3: いまだに tail -s /var/log/messages とかついついタイプしてしまう....