我想要激活键盘布局并在插入外接键盘时启用“粘性”修饰键。
我制定了这条 udev 规则:
/etc/udev/rules.d/keyboard.rules
ACTION=="add", SUBSYSTEM=="input", ATTRS{IdVendor}=="0853", ATTRS{idProduct}=="0100", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/maca/.Xauthority", RUN+="/home/maca/bin/sticky_keys", OWNER="maca"
那应该运行这个脚本:
/home/maca/bin/sticky_keys
#!/bin/sh
/usr/bin/xkbset accessx sticky -twokey -latchlock
/usr/bin/xkbset exp 1 '=accessx' '=sticky' '=twokey' '=latchlock'
/usr/bin/setxkbmap us altgr-intl -option ctrl:nocaps -option lv3:ralt_switch
/usr/bin/touch /tmp/test
当我运行脚本时,所需的键盘布局被激活,并且修饰键变得粘滞,但是当键盘插入时,脚本似乎不起作用。我知道脚本已成功执行,因为有一个/tmp/测试生成的文件。
我尝试sleep 3
在脚本开头使用,并从脚本中设置和导出 DISPLAY 和 XAUTHORITY,但这也不起作用。
答案1
我可以通过使用 udev 为设备设置别名并在设备可用时触发用户 systemd 单元来获得我想要的结果:
/etc/udev/rules.d/keyboard.rules
SUBSYSTEM=="input" \
, ATTRS{idVendor}=="0853" \
, ATTRS{idProduct}=="0100" \
, SYMLINK+="keyboard" \
, TAG+="systemd"
/home/maca/.config/systemd/用户/sticky_keys.service
[Unit]
Description=Sticky keys and keyboard layout
After=dev-keyboard.device
BindsTo=dev-keyboard.device
Requisite=dev-keyboard.device
[Service]
Environment=DISPLAY=:0
ExecStart=/home/maca/bin/sticky_keys
StandardOutput=journal
RemainAfterExit=yes
Type=forking
[Install]
WantedBy=dev-keyboard.device
进而:
$ systemctl --user enable sticky_keys.service