/lib/udev/rules.d 在哪里

/lib/udev/rules.d 在哪里

我正在用来libusb连接外围设备,并希望允许非 root 用户访问。我什至不确定这应该如何工作,或者不诚实地应该如何工作,但显然我可以修改或添加一个文件到 /lib/udev/rules.d ,以允许使用访问组。

首先寻找快速解决方案,其次寻找解释设备和规则系统的地方,以便我之后可以回来进行自我教育。有几个问题并没有完全回答我。

答案1

首先,运行lsusb,然后插入 USB 外围设备并lsusb再次运行。比较两个列表:第二个列表应该至少有一行描述您的外围设备。

确定正确的行后,记下ID xxxx:yyyy该行上的数字。这些是供应商ID产品编号对于设备。

但首先,关于 udev 规则文件的一些原则:

您可以添加任何您想要的 udev 规则文件/etc/udev/rules.d:唯一的名称要求是文件名应该有后缀.rules

中的文件/lib/udev/rules.d是为 Linux 发行版的预打包规则保留的:当影响 udev 规则的新补丁安装到系统时,您对其中任何现有文件所做的任何更改都将被覆盖。

如果您需要修改现有规则,您应该改为复制/lib/udev/rules.d您希望从 修改为 的规则文件/etc/udev/rules.d,保留文件的原始名称。/etc/udev/rules.d遗嘱中的任何文件覆盖中具有相同名称的文件/lib/udev/rules.d。制作副本后,您可以/etc/udev/rules.d根据需要修改副本,并确保您的更改在将来安装某些安全更新时不会被覆盖。

两个目录中的规则文件都以简单的字母数字顺序读取(在考虑覆盖之后),如果存在冲突规则,则最后一个获胜。有一个约定,规则文件名应类似于NN-descriptive-name.rules,其中 NN 标识该文件在规则的整体排序中的位置。

然后开始编写规则的实际任务。

如果列表中您的设备的 IDlsusbxxxx:yyyy,则 udev 规则中指定该设备的部分将为:

SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy"

注意双等号。该约定类似于 C、Java 和某些其他编程语言:双等号表示测试对于平等,单个等号意味着环境某物具有特定的价值。

在大多数现代版本的 Linux 中,您可以TAG+="uaccess"在规则行末尾使用 来指定当前本地登录到系统的任何人都应该可以访问特定设备。

如果您只需要部分用户能够访问设备,请创建一个组 ( sudo groupadd mydevice),将用户添加到该组 ( ),并在规则行末尾usermod -a -G mydevice username使该组只能访问该设备。GROUP="mydevice", MODE="0660"然后添加到该组的人员可以使用ssh远程连接到系统并仍然使用该设备;非该组成员的人根本无法使用该设备。

注意:新的组成员资格将在您下次登录时生效,因此,如果您将自己添加到新组,则需要在测试设备之前注销并重新登录。

如果您想允许系统上的每个人访问该设备,您只需MODE="0666"在规则行末尾指定即可。 (在这样做之前你应该三思而后行。)

把它们放在一起

因此,如果您没有特殊需要修改任何现有规则文件,您可以创建自己的规则文件,例如/etc/udev/rules.d/99-mydevice.rules.

sudo <your-favorite-text-editor> /etc/udev/rules.d/99-mydevice.rules

如果您只想允许本地登录的用户使用该设备,则该文件的内容应如下所示:

SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", TAG+="uaccess"

保存规则文件后,运行以下命令以使新规则立即生效:

udevadm control --reload-rules

如果您使用基于组的解决方案,请在此时注销并重新登录。

相关内容