udev,覆盖现有规则



当我将一个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的支持很差,所以你能做什么取决于你的系统版本。

  1. 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"的自定义处理。请看这个答案

  2. 非官方的方式,我建议:创建一个优先级为99.rules,撤销systemd所做的任何事情。这是最好的解决方案,因为1.点的替代方案意味着您可能会在系统更新中遇到麻烦,这可能会更改系统规则的内容以及它们的名称,因此您的覆盖将默默地中断。

    好吧,实现是困难的:我提到systemd-udev是坏的吗?好吧,这里有一些上游的bug会妨碍你:-=直到v253才起作用,=不起作用。

    你能做的是创建一个规则,使用RUN命令来撤销systemd所做的任何事情,但是旧的systemd版本容易产生竞争条件。虽然250是已知的工作,但不确定他们何时确切地修复了这个问题,所以你可能必须自己测试,通过使用链接的bugreport中的测试用例。

无论您选择哪种方式,检测VID和PID都是通过ATTRS{idVendor}=="VID"ATTRS{idProduct}=="PID"完成的

最新更新