我很新,udev
想写一个规则,在连接 USB 鼠标时禁用我的触摸板。
这是我想出的(主要是耳朵):
ACTION=="add", SUBSYSTEM=="input", ENV{ID_MODEL}=="USB_Mouse", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/nikitautiu/.Xauthority", ENV{REMOVE_CMD}="/usr/bin/synclient TouchpadOff=0", RUN+="/usr/bin/synclient TouchpadOff=1"
Run Code Online (Sandbox Code Playgroud)
尽管如此,它不会触发预期的效果。尽管连接我的 USB 鼠标时规则不会触发,但该命令似乎没问题。
我不明白你的规则为什么这么复杂?尤其是这一段
ENV{ID_MODEL}=="USB_Mouse",\
ENV{DISPLAY}=":0",\
ENV{XAUTHORITY}="/home/nikitautiu/.Xauthority",\
ENV{REMOVE_CMD}="/usr/bin/synclient TouchpadOff=0"
Run Code Online (Sandbox Code Playgroud)
在第一行中,您匹配ID_MODEL
只能由udev
against看到的环境变量USB_Mouse
。在以下三行中,您将值分配给环境变量。如果应用了规则,则再次仅被udev
执行的命令看到synclient
。
我很确定这条规则永远不会被应用(您可以通过解析udev
的日志文件来检查这一点。)因为除非您之前在环境中设置,否则很可能没有ID_MODEL
内容USB_Mouse
可访问的变量。ID_MODEL
udev
我建议你匹配你鼠标的Action、vendor-ID和product-ID,这在大多数情况下就足够了。然后你的规则看起来像
ACTION=="add", ATTRS{idVendor}=="<idVendor>", ATTRS{idProduct}=="<idProduct>", RUN+="/usr/bin/synclient TouchpadOff=1"
Run Code Online (Sandbox Code Playgroud)
您可以通过解析输出来获取<idVendor>
和<idProduct>
lsusb -v
Run Code Online (Sandbox Code Playgroud)
我不记得在经典形式中是否允许给定的十六进制值0xffff
。我总是只接受0x
我规则中落后的部分。