【问题标题】:Udev rules are not working for libusb on Ubuntu 12.04Udev 规则不适用于 Ubuntu 12.04 上的 libusb
【发布时间】:2014-08-22 10:44:41
【问题描述】:

我使用的是 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?

因此,如果我按如下方式对 /dev/bus/usb/008/004 进行 chmod:

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

再次运行通讯程序,设备就可以正常工作了。 问题是每次我插入设备时,最后一个数字都会改变,所以每次usb总线我都必须chmod,但由于并非所有用户都知道管理员密码,这是一个问题。

所以厂商建议编辑udev规则如下。在 /etc/udev/rules.d 中创建一个 12-ndi-rules :

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 设备的端口,我也想让它们永久化。

【问题讨论】:

    标签: linux ubuntu usb libusb udev


    【解决方案1】:

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

    如果 adb devices 将 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):

    总线 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
    

    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 组并将您的用户名添加到其中(如果权限被拒绝,请在前面加上“sudo”以下命令):

    1) 添加plugdev组:

    groupadd plugdev
    

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

    useradd -G plugdev billy
    

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

    sudo service udev restart
    

    【讨论】:

      【解决方案2】:

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

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

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

      您可以放入规则文件的其他内容是in the man page

      【讨论】:

      • 它确实有效,但只有在系统重新启动后。重新加载规则似乎不起作用。感谢您的帮助!
      • @linello 它会在为您的设备卸载和加载模块后工作(假设它是可加载模块)。您不必重新启动系统。以网络设备为例,我先做rmmod ixgbermmod tg3rmmod e1000,然后是modprobe ixgbemodprobe tg3modprobe e1000,具体取决于网络驱动程序的类型。
      • 我还注意到的另一件事是,如果我选择较小的数字,例如25-&lt;rule name&gt;.rules 则如果该规则存在于65-&lt;rule name 1&gt;.rules 中,则较大的数字(在本例中为 65-&lt;rule name 1&gt;.rules)优先于较小的数字(在本例中为 25-&lt;rule name&gt;.rules)。因此,作为一项规则,我选择开始命名约定 > 95
      • 在 Ubuntu 14.04.5 LTS 上我发现:idVendoridProduct 匹配是区分大小写的,所以上面,="DA77" 对我不起作用但是 ="da77" 可以。 (通过udevadm info --attribute-walk /dev/bus/usb/008/023 诊断,其中总线 008 和设备 023 只是示例;lsusb 会告诉您。)更改规则后,sudo udevadm control --reload-rules 然后sudo udevadm trigger 避免重新启动:更改将在几秒钟内生效 第二个命令完成之后。
      【解决方案3】:

      我也在或多或少做同样的事情并进行重新加载,使用该功能时我遇到了同样的问题,但如果你要使用

      udevadm trigger
      

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

      【讨论】:

        【解决方案4】:

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

        sudo usermod -a -G groupName userName
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多