连接 USB 鼠标时自动禁用触摸板的 Udev 规则

连接 USB 鼠标时自动禁用触摸板的 Udev 规则

我很陌生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看到的环境变量。在以下三行中,您将值分配给环境变量。同样,如果应用了规则,则只能由执行的命令看到。udevUSB_Mouseudevsynclient

我很确定这条规则永远不会应用(您可以通过解析 的日志文件来检查这一点。),因为除非您之前在环境中设置udev,否则很可能没有ID_MODEL内容可访问的变量。USB_MouseID_MODELudev

我建议您将操作、供应商 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.2and 的规则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。在(例如在我的规则中)中
使用的必须与您的用户匹配。 请注意,行尾需要有反斜杠,否则规则无法跨越多行。如果您喜欢一行:UIDENV{XAUTHORITY}1000ID
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 爱好者有所帮助。

相关内容