Linux udev规则似乎不起作用

时间:2011-09-21 18:23:14

标签: linux fedora

我正在编写一个必须在Fedora Core 4上运行的应用程序。该应用程序需要访问没有root权限的USB设备。使用libusb-1.0.8我已经成功编写了应用程序,除了一个问题。如果我没有root权限,libusb_open将失败,并显示-3“Permission Denied”。

我已经读过我可以使用udev规则更改设备的权限。所以我在/etc/udev/rules.d中添加了10-local.rules,其中包含以下行:

BUS=="usb", SYSFS{idVendor}=="040a", SYSFS{idProduct}=="4e00", MODE="0666"

我从udevinfo的输出中复制了上述信息。

即使使用上述规则,设备权限也总是“0644”,我无法从用户应用程序打开USB设备。即使重启后也是如此。

有没有人对我可能做错了什么有任何建议? Fedora Core 4是否支持我要做的事情? 感谢

3 个答案:

答案 0 :(得分:5)

Udev在脚本运行后设置usb权限。重命名规则,使文件名以大于50的数字开头(USB权限在/lib/udev/rules.d/50-udev-default.rules中设置)。由于您的脚本名称是10 -...,它首先运行,然后重置权限。将文件名更改为,例如,99-local.rules。然后它将是最后运行的脚本之一,并且不会覆盖任何设置。

来源:http://virtuallyhyper.com/2013/02/fixing-android-phone-device-permissions-on-fedora-17/

答案 1 :(得分:2)

尝试类似:

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="5090", MODE="0666"

udev规则中的条件充其量是棘手的。您可以使用以下命令检查可用的参数:

udevadm info --attribute-walk --name=<device>

输出还包括以下声明:

A rule to match can be composed by the attributes of the device
and the attributes from one single parent device.

另请注意某些属性名称中的结尾 S 。它出现在父设备中,但不出现在设备本身中。

答案 2 :(得分:1)

根据Linux的版本(HAL,udev,hotplug等),USB设备的修改权限似乎至少有3种不同的处理方式。经过几次不成功的尝试后,我终于遇到了一个有准确信息的网站。

至少对于Linux 2.6.11,答案是热插拔。解决方案是在/ etc / hotplug / usb中创建自定义用户映射文件。使用内置的用户地图(/etc/hotplug/usb.usermap)作为示例。 usermap文件指定连接匹配设备时要执行的脚本。该脚本也应位于/ etc / hotplug / usb。

例如,我创建了/etc/hotplug/usb/myusbdvc.usermap,其中包含我的设备的VID和PID以及一个执行名为chmodmyusbdvc的脚本。

我还创建了/ etc / hotplug / usb / chmodmyusbdvc,内容如下:

#!/bin/bash
if [ "${ACTION}" = "add" ] && [ -f "${DEVICE}" ]
then
  echo "changing ${DEVICE}" >> /tmp/debug-hotplug
  chmod 666 "${DEVICE}"
fi