xubuntuでキーボードを抜くとキーマップが初期化される件

 xmodmapでCAPSと左Ctrlを入れ替え、半角/全角をESCに入れ替えている。これまでも、USBをいったん切り離して再接続するとキーマップが元に戻るという現象が発生していた。で、デスクトップにランチャを作って対応していたけど、在宅勤務が始まり、仕事用のノートPCと交互に使うようなことが増えてきた。

 「linuxなんだからキーボードをつないだらコマンドを実行するくらいできるやろ」と思って調べてみた。udevってやつが司っているらしい。いちばんわかりやすかったサイトはここ。

gihyo.jp

 /etc/udev/rules.d/80-keyboard.rulesを作ってみた。

ACTION!="add", GOTO end
ENV{ID_VENDOR_ID}=="25a7", ENV{ID_MODEL_ID}=="fa61", RUN+="xmodmap /home/kazz/.xmodmap"

LABEL="end"

 リロードして実行してみたが期待通りに動いていない。syslogには「failed to execute '/lib/udev/xmodmap' 'xmodmap /home/kazz/.xmodmap': No such file or directory」と。フルパスで書かなならんのか。
 フルパスで書いてみる。

ACTION!="add", GOTO end
ENV{ID_VENDOR_ID}=="25a7", ENV{ID_MODEL_ID}=="fa61", RUN+="/usr/bin/xmodmap /home/kazz/.xmodmap"

LABEL="end"

 syslogをみると「 Process '/usr/bin/xmodmap /home/kazz/.xmodmap' failed with exit code 1.」と。

 いろいろ検索してみて、xauthorityがなんか絡んでいるらしい。再度検索。

yukirinmk2.hatenablog.com

 なるほど、環境変数が要るんやな。やってみた。作ったスクリプトは以下。

#!/usr/bin/zsh
sleep 1

DISPLAY=":0"
HOME=/home/kazz/
XAUTHORITY=$HOME/.Xauthority
export DISPLAY HOME XAUTHORITY

xmodmap /home/kazz/.xmodmap

 無事動作。syslogにもエラーはない。成功メッセージもないけど。
 シェルスクリプトには疎いんだけど、この場合XAUTHORIYは/が重なって /home/kazz//.Xauthority が代入されてそうなんだが。

 setxkbmapってコマンドもあるんや。こっちだと固定できるようだ。そのうち乗り換えるかも。