Udev规则在Ubuntu 12.04上不适用于libusb

时间:2014-08-22 10:44:41

标签: linux ubuntu usb libusb udev

我在Ubuntu 12.04.5 LTS,x86_64。

我使用libusb与计算机通信的USB设备。 一旦我将其插入计算机并运行通信程序,我就会收到以下错误:

libusb couldn't open USB device /dev/bus/usb/008/004: Permission denied.
libusb requires write access to USB device nodes.
libusb failed to find the Optotrak USB device.  Are you sure you have set the udev permissions correctly?

所以如果我按照以下方式chmod / dev / bus / usb / 008/004:

sudo chmod 777 /dev/bus/usb/008/004

再次运行通讯程序,然后设备完美运行。 问题是每次我插入设备时,最后一个数字都会改变,所以每次usb总线都要chmod,但是因为并非所有用户都知道管理员密码,所以这是一个问题。

因此制造商建议按如下方式编辑udev规则。在/etc/udev/rules.d中创建一个12-ndi规则:

BUS=="usb", SYSFS{idVendor}=="0403", SYSFS{idProduct}=="da77", GROUP="plugdev"

(我已经用lsusb检查过SYSFS是否正确)

lsusb 

Bus 008 Device 004: ID 0403:da77 Future Technology Devices International, Ltd 

然后重新加载规则:

sudo udevadm control --reload-rules

但仍未正确设置总线008/004的权限。

如何在每次重启时制作这些规则?如果我改变USB设备的端口,我也想让它们永久化。

4 个答案:

答案 0 :(得分:10)

好的,这里是让这个工作的所有步骤。我在网上找到的所有回复都有问题,到处都是零碎的,没有任何特定的顺序,没有单一的工作解决方案,(运行Android Studio,Jmonkey 3D和Ubuntu 14.04)

如果 adb设备将Android设备显示为 ????????? (无权限),请按以下说明操作:

1)创建文件 /etc/udev/rules.d/51-android.rules

sudo gedit /etc/udev/rules.d/51-android.rules

2)复制并粘贴以下内容:

SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0e79", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0502", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="413c", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0489", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="091e", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="24e3", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="2116", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0482", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="17ef", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="1004", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", MODE="0666", GROUP="plugdev"    
SUBSYSTEM=="usb", ATTRS{idVendor}=="0409", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="2080", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0955", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="2257", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="10a9", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="1d4d", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0471", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="04da", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="05c6", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="1f53", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="04dd", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fce", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="0930", MODE="0666", GROUP="plugdev"  
SUBSYSTEM=="usb", ATTRS{idVendor}=="19d2", MODE="0666", GROUP="plugdev" 

3)运行以下命令以更改文件权限:

sudo chmod a+r /etc/udev/rules.d/51-android.rules

4)通过USB连接手机并运行以下命令:

lsusb

查找您的设备示例(Nexus 5):

  

Bus 003 Device 074:ID 18d1 :4ee7 Google Inc.

对于 Nexus 5 ,供应商ID 18d1 ,我的是公共汽车" 003 "

5)现在使用以下命令重新加载规则:

sudo udevadm control --reload-rules
sudo service udev restart
sudo udevadm trigger

6)验证设备现在是否允许 plugdev 用户组访问

ls -l /dev/bus/usb/<bus number from step 4>

示例:

ls -l /dev/bus/usb/003

crw-rw-rw- 1 root plugdev 189, 329 Jul  3 18:23 074

7)运行 adb devices 以确认权限正确并享受!

注意:如果您尚未创建 plugdev 组并且添加了您的用户名(如果权限被拒绝,则为& #34; sudo&#34;以下命令):

1)添加plugdev组:

groupadd plugdev

2)将用户名添加到 plugdev 组(useradd -G {group-name}用户名):

useradd -G plugdev billy

3)重启udev(您可能需要注销并重新登录才能更新用户组):

sudo service udev restart

答案 1 :(得分:5)

除非你有一个非常古老的udev,规则是错误的,它应该是:

SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="da77", GROUP="plugdev"

将规则放在/etc/udev/rules.d/中的文件中是使其永久化的正确方法。

您可以在规则文件中添加的其他内容是in the man page

答案 2 :(得分:0)

我也在或多或少地做同样的事情并且重新加载我使用该函数有同样的问题,但是如果你要使用

udevadm trigger

它实际上会重新加载规则 另外,我不知道你是否已经这样做了,我认为你必须将用户添加到你创建的组中

答案 3 :(得分:0)

有时,用户不属于udev规则授予访问权限的组。 要将(现有)用户添加到(现有)组plugdev,您应该这样做:

sudo usermod -a -G groupName userName