【问题标题】:USBError: [Errno 13] Access denied (insufficient permissions)USBError:[Errno 13] 访问被拒绝(权限不足)
【发布时间】:2018-11-10 12:42:39
【问题描述】:

这个问题与世界一样古老。有可用的讨论和解决方案。这一切都归结为更新规则文件并授予权限。所以我按照食谱做了。但我仍然有同样的问题。这是显示我按照说明进行操作的屏幕截图。

版本:

Python 2.7.12 (default, Dec  4 2017, 14:50:18) 
usb.__version__ '1.0.2'

错误:

    Traceback (most recent call last):
  File "/media/psf/Home/All-Projects-on-femto/LaserLab/Software/usb_4108.py", line 19, in <module>
    dev.set_configuration()
  File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 869, in set_configuration
    self._ctx.managed_set_configuration(self, configuration)
  File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 102, in wrapper
    return f(self, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 147, in managed_set_configuration
    self.managed_open()
  File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 102, in wrapper
    return f(self, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 120, in managed_open
    self.handle = self.backend.open_device(self.dev)
  File "/usr/local/lib/python2.7/dist-packages/usb/backend/libusb1.py", line 786, in open_device
    return _DeviceHandle(dev)
  File "/usr/local/lib/python2.7/dist-packages/usb/backend/libusb1.py", line 643, in __init__
    _check(_lib.libusb_open(self.devid, byref(self.handle)))
  File "/usr/local/lib/python2.7/dist-packages/usb/backend/libusb1.py", line 595, in _check
    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
USBError: [Errno 13] Access denied (insufficient permissions)

规则。文件(位置 /etc/udev/rules.d/99-usbftdi.rules)

# For FTDI FT232 & FT245 USB devices with Vendor ID = 0x0403, Product ID = 0xabc
SYSFS{idProduct}=="4108", SYSFS{idVendor}=="0683", RUN+="/sbin/modprobe -q ftdi-sio product=0x4108 vendor=0x0683"
#SYSFS{idProduct}=="2450", SYSFS{idVendor}=="0683", RUN+="/sbin/modprobe -q ftdi-sio product=0x2450 vendor=0x0683"
SYSFS{idVendor}=="0683", SYSFS{idProduct}=="4108", MODE="0666"

并剥离代码:

import usb.core
import usb.util
dev = usb.core.find(idVendor=0x0683, idProduct=0x4108)
dev.reset() 

但是,它没有给我必要的权限。 我的精简代码仍然会产生错误:

import usb.core
import usb.util
dev = usb.core.find(idVendor=0x0683, idProduct=0x4108)
dev.reset()

奇怪的是,如果我以超级用户身份从终端启动 IDLE,我会获得权限(终端:sudo idle)。

【问题讨论】:

  • 规则文件的完整路径是什么?也许你放错地方了。您是否记得在制作 udev 规则文件后拔下设备并重新插入?
  • 使用sudo 运行程序可以解决您的权限问题一点也不奇怪,这就是sudo 和root 用户的重点。
  • 你的规则看起来有点奇怪。您可以删除所有这些并尝试这样做吗? SUBSYSTEM=="usb", ATTRS{idVendor}=="0683", MODE="0666"
  • 问题出在规则上。 ATTRS{idVendor}=="0683", MODE="0666" 规则有效。

标签: python usb ubuntu-16.04


【解决方案1】:

你的规则看起来有点奇怪。你能把它们全部删除,然后试试这个吗?

SUBSYSTEM=="usb", ATTRS{idVendor}=="0683", MODE="0666"

【讨论】:

    【解决方案2】:

    如果有人再次遇到此错误,我想补充一下David Grayson's answer,您还必须刷新 udev 并拔下并重新插入 USB 设备。所以完整的步骤是:

    1. 在 udev 文件中添加一行:
    sudo echo 'UBSYSTEMS=="usb", ATTRS{idVendor}=="c251", ATTRS{idProduct}=="2201" GROUP="users", MODE="0666"' >> /etc/udev/rules.d/50-myusb.rules
    

    供应商和产品 ID 必须以十六进制表示且不带 0x。例如 lsusb 在我的例子中产生了 Bus 001 Device 042: ID c251:2201 Keil Software, Inc. LASER Driver IJS ,所以我的供应商 ID 是 c251 并且产品 ID 是 2201。

    1. 刷新udev
    sudo udevadm control --reload-rules && sudo udevadm trigger
    
    1. 断开并重新连接 USB 设备。

    这在运行 Python 3.8.10 的 Ubuntu 20.04 中对我有用。

    【讨论】:

    • 确认断开连接并重新连接有效。无需手动 udev 刷新。但是重新启动而不断开重新连接不起作用。 LinuxMint 19.3
    猜你喜欢
    • 1970-01-01
    • 2017-04-20
    • 2011-06-11
    • 2014-07-15
    • 2015-07-17
    • 2016-07-25
    • 2013-06-12
    • 2016-05-07
    • 2013-05-02
    相关资源
    最近更新 更多