Featured image of post Ubuntuでkeydを用いてキーマッピングを設定した

Ubuntuでkeydを用いてキーマッピングを設定した

CapsLockを「単押し無効」かつ「WASDとの同時押しで矢印キー操作」に設定

はじめに

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経由で入れられそうな予感がする…!!

1
2
3
4
git clone https://github.com/rvaiya/keyd.git
cd keyd
make && sudo make install
sudo systemctl enable --now keyd

2. デバイスIDの確認

外付けキーボードのみに適用するため、USB IDを確認する。

1
sudo keyd monitor

上記コマンドを実行し、キーボードを適当に押すとデバイス名とIDが表示される。(例: 3551:fa03 など)

3. 設定ファイルの作成

/etc/keyd/default.conf を作成する。

1
sudo nano /etc/keyd/default.conf

記述内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[ids]
# キーボードのIDに書き換える(全適用なら * )
3551:fa03

[main]
# CapsLock設定
# 長押し(hold) -> navレイヤー
# 単押し(tap)  -> noop (何もしない)
capslock = overload(nav, noop)

[nav]
# 矢印移動 (WASD)
w = up
a = left
s = down
d = right

4. 設定の反映

設定ファイルを保存したら、リロードして適用させる。

1
sudo keyd reload

結果とまとめ

これで以下の挙動が実現できた。

  1. CapsLock単押し: 何も起きない(IME切り替えや大文字化の暴発を防げる)。
  2. CapsLock + W/A/S/D: 矢印キー(Up/Left/Down/Right)として動作。

失敗談

一度ChatGPTに勧められるままに capslock = noopcapslock:layer = nav を別々に記述して/etc/keyd/device_name.confのようなファイルで指定するやり方を試したが、これだとOS側(GNOME)がCapsLockの単押しイベントを拾ってしまっていた。

素直に/etc/keyd/default.confを使い、overload(layer, action) 関数を使うことで、keyd側でタップとホールドの判定を完結させ、OSには処理後のキーだけを渡す処理がうまくできた。

自分の頭で考えるほうが近道になることもある、そんな体験だった。

最終更新 12月 08, 2025 11:49 +0900
発言は個人の見解であり、所属組織とは関係ありません。
Hugo で構築されています。
テーマ StackJimmy によって設計されています。