当我将一个HID设备插入我的Linux机器(OpenSuse 15.3)时,UDEV规则进入应用/usr/lib/udev/rules.d/60-persistent-input.rules seem
,得到MODE="664"
我想自己处理几个HID设备,而不是让它们由通用规则处理
是否有一种方法专门为一些设备制定自己的规则(基于VID:PID),所以他们覆盖那些已经存在的?
谢谢你的提示。Torsten
systemd-udev
对.rules
的支持很差,所以你能做什么取决于你的系统版本。
-
具有相同文件名的man udev
建议的官方方式,所有systemd版本都支持:您基本上在/etc/
目录下创建一个与您想要覆盖的名称相同的规则文件。引用:文件相互替换。
/etc/
中的文件具有最高优先级,/run/
中的文件优先于/usr/
中的同名文件。如果需要,可以使用本地文件覆盖系统提供的规则文件;/etc/
中的符号链接与/usr/lib/
中的规则文件同名,指向/dev/null
,完全禁用规则文件。因此,在您的情况下,您必须将
/usr/lib/udev/rules.d/60-persistent-input.rules
复制到/etc/udev/rules.d/60-persistent-input.rules
,然后编辑您感兴趣的行并添加您对ATTRS{idVendor}=="NUMBER1", ATTRS{idProduct}=="NUMBER2"
的自定义处理。请看这个答案 -
非官方的方式,我建议:创建一个优先级为
99
的.rules
,撤销systemd所做的任何事情。这是最好的解决方案,因为1.
点的替代方案意味着您可能会在系统更新中遇到麻烦,这可能会更改系统规则的内容以及它们的名称,因此您的覆盖将默默地中断。好吧,实现是困难的:我提到
systemd-udev
是坏的吗?好吧,这里有一些上游的bug会妨碍你:-=
直到v253才起作用,=
不起作用。你能做的是创建一个规则,使用
RUN
命令来撤销systemd所做的任何事情,但是旧的systemd版本容易产生竞争条件。虽然250
是已知的工作,但不确定他们何时确切地修复了这个问题,所以你可能必须自己测试,通过使用链接的bugreport中的测试用例。
无论您选择哪种方式,检测VID和PID都是通过ATTRS{idVendor}=="VID"
和ATTRS{idProduct}=="PID"
完成的