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

我有USB刻度,USB HID。 目前,当插入时,权限仅允许超级用户访问它。 如何配置udev让任何人访问此设备? 我有供应商和产品ID,但我想基于HID类型匹配它。

现在,我很难找到适用于此的任何现有规则(我在/lib/udev/rules.d/etc/udev/rules.d等中使用了“hidraw”)。

通常,这是通过向/etc/udev/rules.d添加一个名为50-usb-scale.conf的文件来完成的,其内容如下:

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

其中HEX1HEX2分别替换为供应商和产品ID。

要改为匹配接口类型,您可以尝试用bInterfaceClass03 (HID)的匹配替换ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2"

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

但要注意,这也将捕捉老鼠和键盘。

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

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

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

仅供参考:

您可以过滤:

  • 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

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

如果是HIDRAW设备,则必须这样做

 chmod 0666 /dev/hidrawX 

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

 ls /dev/hid* 

看清单:)或者只是做

 sudo chmod 0666 /dev/hidraw* 

为所有hidraw设备设置,可能不推荐。

Ubuntu 18.04更新/澄清:

Kees Cook的答案很接近但需要进行2次更改才能在18.04(当前版本中使用,而且只有一次我已经对此进行了测试)。

  1. 使用lsusb找到你的idVendor和idProduct。
    • 这将是“ID”之后的2个hex值,用冒号分隔。 我正在添加扫描仪。 lsusb给了我:
       总线001设备011:ID 04b8:014a精工爱普生公司 
  2. root 身份将文件添加到/etc/udev/rules.d
    • 50-usb-epsonscanner.rules之类的东西
    • 扩展必须是“.rules”
  3. 在该文件中添加:
      SUBSYSTEM ==“usb”,ATTRS {idVendor} ==“04b8”,ATTR {idProduct} ==“014a”,MODE =“0666” 

    但是使用你的idVendor和idProducthex值。

    • 注意它的“ATTRS”不是“ATTR”。
  4. 重新登录。 无需重启。