はじめに
Thinkpadをドックにつないで外付けキーボードからキー入力をしている際、どうしてもCapsLockが邪魔だったのでなんとかならないかと考えた。
windowsならキーマップのやり方は山のようにネットに転がっているが、Ubuntuだとあまり例が無いようだったのでまとめる。
今回はCapsLockのみを 「単押しでは無効」 にしつつ、「WASDとの同時押しで矢印キー操作」 を実現するため、keydを導入した。
keydとは
特徴は以下の通り。
- QMKライクな機能: 「長押し」と「単押し」での挙動の使い分け(Overload)や、特定のキーを押している間だけキー配置を変える(Layer)といった自作キーボード並みの機能を、一般的なUSBキーボードでも実現できる。
- 環境非依存: Ubuntu 24.04の標準であるWayland環境でも問題なく動作し、アプリごとの挙動のバラつきもない。
- 設定が容易: 複雑なコンパイルは不要。シンプルなテキストファイルを書くだけで即座に反映される。
環境
- OS: Ubuntu 24.04 LTS
- デバイス: 英字・75%外付けキーボード
Thinkpad自体のキーボードではなぜかCapsLockのミスタイプが全然無いので、単純に自分のタイピングが下手なだけな説はある。
手順
1. keydのインストール
GitHubからソースをビルドしてインストールする。
READMEによると、Ubuntu25.04以降でaptに含まれているらしい。
次のLTSではapt経由で入れられそうな予感がする…!!
|
|
2. デバイスIDの確認
外付けキーボードのみに適用するため、USB IDを確認する。
|
|
上記コマンドを実行し、キーボードを適当に押すとデバイス名とIDが表示される。(例: 3551:fa03 など)
3. 設定ファイルの作成
/etc/keyd/default.conf を作成する。
|
|
記述内容:
|
|
4. 設定の反映
設定ファイルを保存したら、リロードして適用させる。
|
|
結果とまとめ
これで以下の挙動が実現できた。
- CapsLock単押し: 何も起きない(IME切り替えや大文字化の暴発を防げる)。
- CapsLock + W/A/S/D: 矢印キー(Up/Left/Down/Right)として動作。
失敗談
一度ChatGPTに勧められるままに capslock = noop と capslock:layer = nav を別々に記述して/etc/keyd/device_name.confのようなファイルで指定するやり方を試したが、これだとOS側(GNOME)がCapsLockの単押しイベントを拾ってしまっていた。
素直に/etc/keyd/default.confを使い、overload(layer, action) 関数を使うことで、keyd側でタップとホールドの判定を完結させ、OSには処理後のキーだけを渡す処理がうまくできた。
自分の頭で考えるほうが近道になることもある、そんな体験だった。