🐾

NoMachineでLinux→Windows11 home接続でCtrlとCapsLockの変換がうまくいかなかった場合のお話

に公開

linuxからリモート接続中のWindowsでCapsLockがCtrlとして認識されない

困ってたこと

NoMachineでリモートのWindows DesktopにログインするとCapsLockがCtrlとして認識されない
LinuxもWindowsもローカルではCapsLockをCtrlとして認識させられてるのになんでだ

環境

接続先はWindows 11 Homeのデスクトップ
接続元とはDebian GNU/Linux sidでThinkpad X13(日本語キーボード)

NoMachineのバージョンは9.2.18-5

Windows側で実施してあったこと

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard LayoutでCaps
Lockとctrlの入れ替えを実施してある、直接キーボードを繋いでの操作では効くがリモートからは効かない

Linuxクライアント側で実施してあること

/etc/default/keyboard にて「XKBOPTIONS="ctrl:nocaps"」してあるがリモート時にはたぶんキーボードの情報はXKBOPTIONSを参照せずに行くので意味がない

Windows側で試したこと

PowerToysの「Keyboard Manager」を使ってCapsLockをCtrl、VK 240をCtrlにもい
れたが、(たぶん)Ctrlおしっぱ状態になるのでだめ(日本語IMEの複雑怪奇な挙動原因らしいのでたぶんどうにもならない)

解決方法

接続元のLinuxクライアント側でkeydを使用してキーボードの情報をOSレベルで変換し回避した。

インストール

~$ sudo apt install keyd

設定

/etc/keyd/default.conf をつくって以下にした。

[ids]
*

[main]
capslock = leftcontrol

反映

keydの再起動

~$ sudo systemctl restart keyd

無事にリモート先でもCapsLockがCtrl(正確には左のCtrlだけど)と認識されるようになった。

Discussion