1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linuxのキーマッピングツール、keydを使ってみる

Posted at

はじめに

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に書かれている例です。

/etc/keyd/default.conf
[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]セクション

キーマッピングの規則を書くセクションです。
例えば、以下のように書いたとします。

/etc/keyd/default.conf
[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では様々なキーマッピングを実現できます。ぜひ公式ドキュメントを参考にしながら、ご自身に合った快適な設定を見つけてみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?