はじめに
Ubuntuで使えるキーマッピングツールをいくつか試した結果、個人的にはkeydが一番使いやすそうでした。そこで、本記事ではその使い方についてまとめます。
keydとは?
keydは、Linux向けの高機能なキーボードリマッピングツールです。GUIは提供されておらず、設定ファイルのみでキーマッピングを行います。
keydの特徴は、WaylandやX11(Xorg)などのディスプレイサーバーに依存せず、システム全体でキーの再割り当てを行える点です。類似するツールでxmodmapがありますが、xmodmapはX11(Xorg)専用であり、Waylandでは使えません。その点で、keydはより汎用性が高いツールと言えます。
keydのインストール
以下のGitHubのREADMEにしたがってインストールします。
2025年5月17日現在は、apt等のパッケージマネージャではインストールできず、以下のように git clone
してインストールする必要がありそうです。
git clone https://github.com/rvaiya/keyd
cd keyd
make && sudo make install
sudo systemctl enable --now keyd
設定ファイルの格納場所
keydの設定ファイルは、/etc/keyd/default.conf
に書くのが一番シンプルな方法です。以下は、GitHubのQuickStartに書かれている例です。
[ids]
*
[main]
# Maps capslock to escape when pressed and control when held.
capslock = overload(control, esc)
# Remaps the escape key to capslock
esc = capslock
ここで、keydのドキュメントのCONFIGURATIONを見てみると、/etc/keyd/
のディレクトリに.conf
拡張子のファイルとして格納されていれば、/etc/keyd/default.conf
以外のファイル名でも問題ないようです。
事前確認
keydで使えるキーは、次のコマンドで確認できます。
sudo keyd list-keys
以下は出力例です。
$ sudo keyd list-keys | head -n 8
esc
escape
1
!
2
@
3
#
また、使っているキーボードの各キーがkeydでどのような名前で認識されるかを確認するには、以下のコマンドを実行します。
sudo keyd monitor
対話的に入力を受け付けるので、適当なキーを押すと、以下のような出力が得られます。
keyd virtual keyboard 0fac:0ade:bea394c0 enter up
keyd virtual keyboard 0fac:0ade:bea394c0 hangeul down
keyd virtual keyboard 0fac:0ade:bea394c0 hangeul up
コンフィグファイルの書き方
[ids]セクション
キーマッピングを適用するデバイスを記載するセクションで、設定ファイルはこのセクションから始める必要があります。
接続されているキーボードで使い分けを気にしなければ、以下のようにアスタリスク(*)を書けば問題ないです。
[ids]
*
特定のキーボードだけに適用したい場合は、次のようにキーボードのデバイスIDを書く必要があります。
[ids]
0123:4567
使っているキーボードのデバイスIDは、以下のコマンドで確認できます。
sudo keyd monitor | grep ^device
(終了する場合はCtrl+Cを押下)
以下は表示例です。
device added: 0123:4567:890abcde HHKB-BT Keyboard (/dev/input/event23)
device added: 1234:5678:90abcde0 Logitech MX Ergo Multi-Device Trackball (/dev/input/event22)
...
[main]セクション
キーマッピングの規則を書くセクションです。
例えば、以下のように書いたとします。
[ids]
# 全てのキーボードデバイスが対象
*
[main]
esc = capslock
leftalt+s = volumeup
上記の設定を反映させるには、次のコマンドを実行します。
sudo keyd reload
この時、esc = capslock
により、ESCを押すとCapsLockとして認識されます。また leftalt+s
は、「Left Alt と s を同時に押す」と音量を上げるVolume Upキーとして認識されます。ドキュメントだと、この同時押しのことをchordingと呼んでいます。
Layerと修飾子
上記の例で、leftalt+s
だと「Left Alt と s の同時押し」の意味になってしまうので、「Left Alt を押したまま s を押す」操作をしても Volume Upキーとして認識されません。これは、layer という機能を使って以下のように書けば実現できます。
[main]
leftalt = layer(leftalt_layer)
[leftalt_layer]
s = volumeup
しかし上の書き方だと、もともと Left Alt として使えていたキーが「Left Alt を押したまま s を押すと、 Volume Up するキー」の機能のみしか使えなくなってしまいます。
実際に、 sudo keyd monitor
を実行して、Left Altキーを押しても leftalt
とは表示されないはずです。
そこで、次のように leftalt_layer
の定義に :A
という修飾子を付けます。
[main]
leftalt = layer(leftalt_layer)
[leftalt_layer:A]
s = volumeup
このように書くと、元の Left Altキーの機能を残したまま、追加で s を押すと Volume Upができるようになります。
さらにドキュメントを読み進めてわかったのですが、今回のケースだともっとシンプルに以下のように書けば実現できました。(mainセクションも不要です)
[alt]
s = volumeup
これは、leftalt
には暗黙的にlayer(alt)
が紐づいていて、layer(alt)
の挙動を定義した[alt]
にも暗黙的に:A
の修飾子がついているためです。つまり、以下のような対応づけが既にされているということです。
[main]
leftalt = layer(alt)
[alt:A]
ちなみに修飾子は以下の5種類があります。
C - Control
M - Meta/Super
A - Alt
S - Shift
G - AltGr
もし、「Left Altを押したらCtrlキーとして使いたくて、さらに s
を押したらVolume Upしたい」場合は、先ほどのような省略はできず、mainセクション、layer、修飾子:C
を自分で書く必要があります。
[main]
leftalt = layer(leftalt_layer)
[leftalt_layer:C]
s = volumeup
Macro
macroを使うと、特定のキーに一連のキー操作を割り当てられます。以下はその例です。
[main]
c = C-c # Ctrl+C
m = macro(C-c) # Ctrl+C
e = macro(Hello space World) # "Hello World"
この例だと、cまたはmを押すとCtrl+Cとして動き、eを押すと"Hello World"と出力するようにマッピングしています。Ctrl+Cを表すC-c
は、先程出てきた修飾子を使った表現で、「<修飾子>ー<key>」の記法になっています。この書き方の場合のみ、macro()
で囲わなくてもいいようです。
ちなみに、修飾子の場合は2つ以上の重ねがけが可能です。例えば、
m = C-A-enter
のように書くと、mを押すと Crtl+Alt+Enterのキー操作がマッピングされます。
他にも様々なことができる
ここで紹介した機能以外にも、keydでは様々なキーマッピングを実現できます。ぜひ公式ドキュメントを参考にしながら、ご自身に合った快適な設定を見つけてみてください!