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

lin*_*llo 2 linux usb ubuntu 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?
Run Code Online (Sandbox Code Playgroud)

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

sudo chmod 777 /dev/bus/usb/008/004
Run Code Online (Sandbox Code Playgroud)

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

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

BUS=="usb", SYSFS{idVendor}=="0403", SYSFS{idProduct}=="da77", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)

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

lsusb 

Bus 008 Device 004: ID 0403:da77 Future Technology Devices International, Ltd 
Run Code Online (Sandbox Code Playgroud)

然后重新加载规则:

sudo udevadm control --reload-rules
Run Code Online (Sandbox Code Playgroud)

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

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

Jam*_*son 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
Run Code Online (Sandbox Code Playgroud)

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" 
Run Code Online (Sandbox Code Playgroud)

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

sudo chmod a+r /etc/udev/rules.d/51-android.rules
Run Code Online (Sandbox Code Playgroud)

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

lsusb
Run Code Online (Sandbox Code Playgroud)

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

总线003设备074:ID 18d1:4ee7 Google Inc.

对于Nexus 5,供应商ID为18d1,我的总线为" 003 "

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

sudo udevadm control --reload-rules
sudo service udev restart
sudo udevadm trigger
Run Code Online (Sandbox Code Playgroud)

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

ls -l /dev/bus/usb/<bus number from step 4>
Run Code Online (Sandbox Code Playgroud)

例:

ls -l /dev/bus/usb/003

crw-rw-rw- 1 root plugdev 189, 329 Jul  3 18:23 074
Run Code Online (Sandbox Code Playgroud)

7)运行adb设备以确认权限是正确的并享受!

注意:如果您尚未创建plugdev组并向其添加了用户名(如果权限被拒绝,则在命令之前添加"sudo"):

1)添加plugdev组:

groupadd plugdev
Run Code Online (Sandbox Code Playgroud)

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

useradd -G plugdev billy
Run Code Online (Sandbox Code Playgroud)

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

sudo service udev restart
Run Code Online (Sandbox Code Playgroud)


Lei*_*iaz 5

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

SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="da77", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)

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

您可以在规则文件中放置的其他内容位于手册页中.