![连接 USB 鼠标时自动禁用触摸板的 Udev 规则](https://linux22.com/image/25398/%E8%BF%9E%E6%8E%A5%20USB%20%E9%BC%A0%E6%A0%87%E6%97%B6%E8%87%AA%E5%8A%A8%E7%A6%81%E7%94%A8%E8%A7%A6%E6%91%B8%E6%9D%BF%E7%9A%84%20Udev%20%E8%A7%84%E5%88%99.png)
我很陌生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"
尽管如此,它并没有触发预期的效果。该命令似乎没问题,但在连接我的 USB 鼠标时不会触发该规则。
答案1
我不明白你的规则为什么这么复杂?尤其是这一段
ENV{ID_MODEL}=="USB_Mouse",\
ENV{DISPLAY}=":0",\
ENV{XAUTHORITY}="/home/nikitautiu/.Xauthority",\
ENV{REMOVE_CMD}="/usr/bin/synclient TouchpadOff=0"
在第一行中,您匹配仅由againstID_MODEL
看到的环境变量。在以下三行中,您将值分配给环境变量。同样,如果应用了规则,则只能由执行的命令看到。udev
USB_Mouse
udev
synclient
我很确定这条规则永远不会应用(您可以通过解析 的日志文件来检查这一点。),因为除非您之前在环境中设置udev
,否则很可能没有ID_MODEL
内容可访问的变量。USB_Mouse
ID_MODEL
udev
我建议您将操作、供应商 ID 和鼠标的产品 ID 进行匹配,这在大多数情况下就足够了。那么你的规则看起来像
ACTION=="add", ATTRS{idVendor}=="<idVendor>", ATTRS{idProduct}=="<idProduct>", RUN+="/usr/bin/synclient TouchpadOff=1"
您可以通过解析输出来获得<idVendor>
和<idProduct>
lsusb -v
我不记得经典形式是否允许给定的十六进制值0xffff
。我总是只接受0x
规则中后面的部分。
答案2
由于接受的答案在我的系统上不起作用,因此这里有一条udev
适用于gnome/gdm v. 3.16.2
and 的规则udev/systemd v. 226
:
ACTION=="add", ATTRS{bInterfaceProtocol}=="02", ATTRS{bInterfaceClass}=="03", \
ATTRS{bInterfaceSubClass}=="01", ENV{XAUTHORITY}="/run/user/1000/gdm/Xauthority", \
ENV{DISPLAY}=":0", ENV{REMOVE_CMD}="/usr/bin/xinput --enable 'SynPS/2 Synaptics TouchPad'", \
RUN+="/usr/bin/xinput --disable 'SynPS/2 Synaptics TouchPad'"
ENV{REMOVE_CMD}
是移除设备时使用的命令。
SynPS/2 Synaptics TouchPad
是 报告的触摸板设备的名称xinput
。在(例如在我的规则中)中
使用的必须与您的用户匹配。 请注意,行尾需要有反斜杠,否则规则无法跨越多行。如果您喜欢一行:UID
ENV{XAUTHORITY}
1000
ID
udev
ACTION=="add", ATTRS{bInterfaceProtocol}=="02", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceSubClass}=="01", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/run/user/1000/gdm/Xauthority", ENV{REMOVE_CMD}="/usr/bin/xinput --enable 'SynPS/2 Synaptics TouchPad'", RUN+="/usr/bin/xinput --disable 'SynPS/2 Synaptics TouchPad'"
答案3
给出另一个适用于 KDE(plasma、sddm)的答案。
/etc/udev/rules.d/61-touchpadoff.rules
我添加了包含以下内容的规则文件名:
ACTION!="add", GOTO="touchpadoff_end"
KERNEL=="mouse[0-9]", SUBSYSTEM=="input", SUBSYSTEMS=="usb", ENV{DISPLAY}=":0", ENV{REMOVE_CMD}="/usr/bin/xinput --enable 'Elan TouchPad'", RUN+="/usr/bin/xinput --disable 'Elan TouchPad'"
LABEL="touchpadoff_end"
您需要更改触摸板硬件的名称。要查看它,请发出命令% xinput --list
我希望这对 KDE 爱好者有所帮助。