当键盘插入 udev 时更改键盘布局

当键盘插入 udev 时更改键盘布局

我想要激活键盘布局并在插入外接键盘时启用“粘性”修饰键。

我制定了这条 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

相关内容