xmodmapでCAPSと左Ctrlを入れ替え、半角/全角をESCに入れ替えている。これまでも、USBをいったん切り離して再接続するとキーマップが元に戻るという現象が発生していた。で、デスクトップにランチャを作って対応していたけど、在宅勤務が始まり、仕事用のノートPCと交互に使うようなことが増えてきた。
「linuxなんだからキーボードをつないだらコマンドを実行するくらいできるやろ」と思って調べてみた。udevってやつが司っているらしい。いちばんわかりやすかったサイトはここ。
/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がなんか絡んでいるらしい。再度検索。
なるほど、環境変数が要るんやな。やってみた。作ったスクリプトは以下。
#!/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ってコマンドもあるんや。こっちだと固定できるようだ。そのうち乗り換えるかも。