我有一个 USB 秤,一个 USB HID。目前,当它插入时,权限仅允许超级用户访问它。我该如何配置 udev 以允许任何人访问此设备?我有供应商和产品 ID,但我想根据 HID 类型进行匹配。
现在,我很难找到任何适用于此的现有规则(我在/lib/udev/rules.d
和中搜索了“hidraw”/etc/udev/rules.d
等等)。
答案1
通常,这是通过添加/etc/udev/rules.d
一个文件来完成的,该文件可能50-usb-scale.conf
以如下内容命名:
SUBSYSTEM=="usb", ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2", MODE="0666"
在哪里十六进制1和HEX2分别替换为供应商和产品 ID。
为了匹配接口类型,您可以尝试用(HID)ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2"
匹配替换:bInterfaceClass
03
SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="03", MODE="0666"
但请注意,这也会捕获鼠标和键盘。
答案2
仅作总结:
您可以过滤:
- 供应商编号
- 产品编号
- 串行
并使用:
== 比较是否相等。
!= 比较不相等。
= 为键分配一个值。代表列表的键将被重置,并且只分配这个单一值。
+= 将值添加到包含条目列表的键中。
:= 最终为键分配一个值;不允许任何后续更改。
您可以在 /dev/... 中为特定设备指定一个特定的新路径,
例如:
KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", ATTRS{serial}=="1234567", GROUP="cdrom", OWNER="user28", MODE="0640", SYMLINK+="myhid"
结果是:
您可以轻松地通过 '/dev/hiddevx' 或 '/dev/myhid' 访问该设备,'cdrom' 组中的每个用户都可以从该设备读取。所有者 'user28' 可以读取和写入。
或最简单的:
KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", MODE="0666"
结果是:每个用户都可以访问来自供应商 0x16c0 的每个 hiddevice
有关详细信息,请参阅:文档
答案3
如果您需要更改(像我一样)ttyACM0
权限,这是我的设置:
KERNEL=="ttyACM0", MODE="0777"
当我尝试指定供应商和产品 ID 时失败了。我不确定为什么。
答案4
如果它是 HIDRAW 设备,你必须
chmod 0666 /dev/hidrawX
其中 X 是 hid 设备编号,例如 hidraw0。你可以这样做
ls /dev/hid*
查看列表:)或者直接执行
sudo chmod 0666 /dev/hidraw*
为所有 hidraw 设备进行设置,可能不推荐。