配置udev以更改对USB HID设备的权限?


21

我有一个USB秤,一个USB HID。当前,插入后,权限仅允许超级用户访问它。如何配置udev以允许任何人访问此设备?我有供应商和产品ID,但是我想根据HID类型进行匹配。

现在,我很难找到适用于此的任何现有规则(除其他外,我在/lib/udev/rules.d和中都使用了“ hidraw” /etc/udev/rules.d功能)。

Answers:


21

通常,这是通过添加到/etc/udev/rules.d一个可能50-usb-scale.conf具有以下内容的文件来完成的:

SUBSYSTEM=="usb", ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2", MODE="0666"

HEX1HEX2与供应商和产品ID分别替换。

要匹配的接口类型,而不是,你可以尝试更换ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2"一个匹配的bInterfaceClass03(HID):

SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="03", MODE="0666"

但请注意,这也将捕获鼠标和键盘。


4
在Ubuntu 14.04上,您必须使用MODE:=“ 0666”,不使用冒号,该规则将不执行任何操作。
EdwinW 2014年

2
在14.04上,此文件必须具有.rules扩展名。带有.conf扩展名的文件将不起作用。
切尔诺2015年

1
用于lsusb -vvv获取idProduct和idVendor
Xavier13 '16

2
由于此问题在Google输出中非常流行...我认为应该是ATTRS,而不是ATTR-至少此更改已为我解决。
infthi

2
在14.04.5 LTS上,我发现:lsusb是一个很好的开始,以查看连接的内容和ID。idVendor并且idProduct匹配似乎区分大小写,因此ID DA77对我不起作用,但对我来说有效da77。(手持诊断: udevadm info --attribute-walk /dev/bus/usb/008/023,总线008设备023我的例子; lsusb用于你的)添加规则后,sudo udevadm control --reload-rules然后sudo udevadm trigger可避免重新引导:变化秒这一点。ATTR vs ATTRS没有任何问题。我的.rules文件显示为:SUBSYSTEM=="usb", ATTR{idVendor}=="da77", ATTR{idProduct}=="d12e", GROUP="users", MODE="0666"
El Zorko '16

7

仅作总结:

您可以过滤:

  • idVendor
  • idProduct
  • 连载

并使用:

==比较是否相等。

!=比较不平等。

=为键分配一个值。代表列表的键将被重置,并且仅分配此单个值。

+ =将值添加到包含条目列表的键中。

:=最后为键分配一个值;禁止以后进行任何更改。

您可以在/ 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

有关详细信息,请参阅:文档


2
:=不用于比较。文档说:“最后为键分配一个值;禁止以后进行任何更改。”
卢卡斯

5

如果您需要更改(如我)ttyACM0权限,这是我的设置:

KERNEL=="ttyACM0", MODE="0777"

当我尝试指定供应商和产品ID时,它失败了。我不知道为什么。


是的,内核选项适用于大多数HID设备,比USB子系统一个更好
Muriuki大卫

2

如果是HIDRAW设备,则必须

chmod 0666 /dev/hidrawX

其中X是隐藏的设备号,例如hidraw0。你可以做

ls /dev/hid*

查看列表:)或只是做

sudo chmod 0666 /dev/hidraw*

为所有Hidraw设备设置,可能不建议这样做。


2

Ubuntu 18.04更新/澄清:

Kees Cook的答案很接近,但是需要进行2项更改才能在18.04中工作(当前版本,只有我对此进行了测试)。

  1. 使用lsusb查找您的idVendor和idProduct 。
    • 这将是“ ID”后的两个十六进制值,以冒号分隔。我要添加扫描仪。lsusb给了我:
      总线001设备011:ID 04b8:014a Seiko Epson Corp. 
  2. root 身份将文件添加到/etc/udev/rules.d
    • 类似于50-usb-epsonscanner.rules
    • 扩展名必须为“ .rules”  
  3. 在该文件中添加:
    SUBSYSTEM ==“ usb”,ATTRS {idVendor} ==“ 04b8”,ATTR {idProduct} ==“ 014a”,MODE =“ 0666”
    但是使用您的idVendor和idProduct十六进制值。
    • 请注意,它是“ ATTRS”而不是“ ATTR”。
  4. 重新登录。无需重启。

ATTRS供应商和产品ID都一样?然后您的代码示例是错误的(就像您稍后声明两行一样)。
neo后现代

仅第二个是ATTR。在这里工作。我猜这是一个错误,可能会在没有警告的情况下发生变化。
gatohaus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.