キーボードの :(コロン)/;(セミコロン)キーが壊れてしまい、入力できなくなりました。物理キーを買い替える前に、使っていないキーの組み合わせで代用できないか試してみました。
- OS: CachyOS(Arch系)
- デスクトップ環境: KDE Plasma(Wayland)
Waylandでは、X11のsetxkbmapのような手軽な方法が使えないことが多く、GUIのキーボード設定でも「Alt+P → ;」のような任意のキー組み合わせへのカスタムマッピングはできません。そこで、カーネルレベルで動作しX11/Wayland/デスクトップ環境を問わず使えるkeydを採用しました。
keydとは
keydはLinuxのキーリマップ用デーモンで、/dev/inputのイベントを直接フックして仮想キーボードとして出力し直します。ディスプレイサーバーやウィンドウマネージャーに依存しないため、Wayland環境でも問題なく動作します。
インストール
sudo pacman -S keyd
設定
/etc/keyd/default.conf を作成します。
[ids]
*
[main]
leftalt = overload(altremap, leftalt)
rightalt = overload(altremap, rightalt)
[altremap]
p = semicolon
o = S-semicolon
ポイントは以下の通りです。
overload(altremap, leftalt)によって、Altキーは単独で押せば通常のAltとして機能し、他のキーと同時に押されたときだけaltremapレイヤーが有効になりますp = semicolonで Alt+P →;o = S-semicolonで Alt+O →:(Shift+セミコロン相当)
サービスを有効化します。
sudo systemctl enable --now keyd
ハマった所: 右Ctrlで日本語変換ができなくなった
設定を反映した直後、右Ctrlキーによる日本語入力の変換切り替え(fcitx/ibus)が効かなくなる問題が発生しました。
sudo keyd monitor で右Ctrlキーを押したときのイベントを確認したところ、原因がわかりました。
keyd virtual keyboard 0fac:0ade:bea394c0 leftcontrol down
keyd virtual keyboard 0fac:0ade:bea394c0 leftcontrol up
右Ctrlキーを押しているのに、keydの出力はleftcontrolになっていました。これでは右Ctrl固有のショートカットに割り当てていたIMEの変換トリガーが反応しません。
[main]セクションに右Ctrlを明示的にそのまま通す設定を追加します。
[main]
leftalt = overload(altremap, leftalt)
rightalt = overload(altremap, rightalt)
rightcontrol = rightcontrol
これで右Ctrlが正しくrightcontrolとして出力されるようになり、日本語変換も元通り動くようになりました。
最終的な設定ファイル
[ids]
*
[main]
leftalt = overload(altremap, leftalt)
rightalt = overload(altremap, rightalt)
rightcontrol = rightcontrol
[altremap]
p = semicolon
o = S-semicolon
Wayland環境でもkeydを使えばDE非依存でキーの自由なリマップができます。overload()を使うと、修飾キーの通常の機能を保ったままレイヤー切り替えキーとしても使えるのが便利でした。
keydはデフォルトで一部のキー(今回の場合は右Ctrl)を暗黙的に別のキーとして正規化して出力することがあるようです。既存のショートカットに影響が出た場合はsudo keyd monitorで実際の出力イベントを確認し、必要なキーは明示的にパススルー設定するとよさそうです。