![涉及 X11 的 Udev 规则不会在启动时运行](https://linux22.com/image/32176/%E6%B6%89%E5%8F%8A%20X11%20%E7%9A%84%20Udev%20%E8%A7%84%E5%88%99%E4%B8%8D%E4%BC%9A%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E8%BF%90%E8%A1%8C.png)
我编写了一些 udev 规则,以便在连接某些 USB 设备时运行。例如,我更改某些鼠标的指针速度,并更改特定键盘的 xmodmap。
这些脚本在计算机打开时连接设备时运行良好,并且在计算机挂起时连接设备时也运行良好。但是,如果设备已插入,这些 udev 规则似乎不会触发前我启动或登录。有没有办法让它们在启动时运行?
我正在使用 (K)ubuntu 13.04。以下是我的 udev 规则和脚本的一些示例。
/etc/udev/rules.d/00-teck.rules
:
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0e6a", ATTR{idProduct}=="030c", RUN+="/usr/local/bin/TECK_connect"
ACTION=="remove", SUBSYSTEM=="usb", RUN+="/usr/local/bin/TECK_disconnect"
/usr/local/bin/TECK_connect
:
#!/usr/bin/env bash
export DISPLAY=:0.0
cp -f /home/sparhawk/HDD/Computer/Xmodmaps/Xmodmap_for_TECK /home/sparhawk/.Xmodmap
sudo -u sparhawk setxkbmap -layout us -variant altgr-intl
sudo -u sparhawk xmodmap /home/sparhawk/.Xmodmap
sudo -u sparhawk pkill xcape
sudo -u sparhawk xcape -e 'Alt_L=Return' && sudo -u sparhawk notify-send "xmodmap" "TECK connected." -i /usr/share/icons/oxygen/48x48/devices/input-keyboard.png --hint=int:transient:1
/etc/udev/rules.d/90-razerwakeup-slowdown.rules
:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1532", ATTRS{idProduct}=="0016" RUN+="/bin/sh -c 'echo $env{DEVPATH} | grep -q usb./[^/]*/[^/]*/[^/]*$ && echo enabled > /sys$env{DEVPATH}/../power/wakeup; razer_slowdown'"
/usr/local/bin/razer_slowdown
:
#!/usr/bin/env bash
# slow down the tracking speed of a razer mouse.
# to check, $ xinput --list-props "Razer Razer DeathAdder"| grep 'Constant Deceleration'
# which was originally 1
scriptproper () {
sleep 0.5 # perhaps not necessary, but putting it in background is.
export DISPLAY=:0.0
sudo -u sparhawk xinput --set-prop "Razer Razer DeathAdder" "Device Accel Constant Deceleration" 3
}
scriptproper &
答案1
不,因为您描述的操作都需要正在运行的 X 服务器。您应该考虑创建一个自动启动项对于他们来说。