You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用USB设备遇USBError: [Errno 13]权限不足,配置udev规则仍未解决

解决USBError: [Errno 13] Access denied权限问题

我来帮你梳理下这个权限问题——你已经找对了方向用udev规则赋权,但规则没生效大概率是语法或者重载步骤出了问题,结合你的环境信息,给你几个具体的排查和修复步骤:

1. 修复udev规则的语法问题

你当前的规则用了SYSFS{},这是旧版udev的废弃语法(现代Linux发行版多基于systemd,已经不再推荐使用),替换成ATTRS{}并加上USB子系统限定,才能被正确识别。

把你的/etc/udev/rules.d/99-usbftdi.rules修改为:

# 匹配目标USB设备(Vendor 0x0683, Product 0x4108)
SUBSYSTEM=="usb", ATTRS{idVendor}=="0683", ATTRS{idProduct}=="4108", MODE="0666", GROUP="plugdev"
  • MODE="0666":给所有用户读写权限,最直接解决权限问题
  • GROUP="plugdev":把设备归属到plugdev组(如果你的用户在这个组里,也可以只给组权限,更安全)

2. 正确重载udev规则并触发设备事件

修改完规则后,必须让udev重新加载规则,否则新规则不会生效:

sudo udevadm control --reload-rules
sudo udevadm trigger

然后拔插你的USB设备,让新规则应用到设备上。

3. 验证规则是否生效

执行以下命令确认设备权限是否更新:

# 先通过lsusb找到设备的总线号和设备号,比如Bus 001 Device 005
lsusb | grep 0683:4108
# 查看对应设备的权限
ls -l /dev/bus/usb/[总线号]/[设备号]

如果权限显示crw-rw-rw-,说明规则生效;如果还是crw-rw----,说明规则没匹配到目标设备。

4. 排查规则匹配问题

如果权限仍不对,用udevadm查看设备的详细属性,确认规则是否能正确匹配:

# 替换成你的设备路径,比如/dev/bus/usb/001/005
udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/001/005)

在输出里找到idVendor和idProduct的属性,确认它们的值确实是0683和4108,并且处于SUBSYSTEM=="usb"的层级下。

5. 临时验证方案(确认是权限问题)

如果以上步骤都做完还是不行,先确认是不是其他问题:

  • 用sudo python your_script.py运行测试代码,如果能正常执行,说明确实是普通用户权限不足的问题
  • 检查你的用户是否在plugdev组:groups your_username,如果不在,执行sudo usermod -aG plugdev your_username,然后重新登录生效

补充你的环境信息(方便其他开发者参考)

  • Python版本:Python 2.7.12 (default, Dec 4 2017, 14:50:18)
  • pyusb版本: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)
  • 原udev规则:
# 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()

内容的提问来源于stack exchange,提问作者Valentyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:47:37