树莓派4中pi用户无法访问USB继电器,仅root可访问的问题求助
解决树莓派pi用户访问USB继电器权限问题
环境与问题现象
- 设备:树莓派4
- Python版本:3.9.2
pi用户执行以下代码时出现权限错误:
pi@raspi:~ $ python3 Python 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import hid >>> dev = hid.device() >>> dev.open(5824,1503) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "hid.pyx", line 127, in hid.device.open OSError: open failed >>>
root用户执行相同代码可正常运行:
root@raspi:/home/pi# python3 Python 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import hid >>> dev = hid.device() >>> dev.open(5824,1503) >>>
已尝试的操作:
- root用户在
/etc/udev/rules.d/下创建99-personal.rules规则:
KERNEL=="hidraw*", ATTRS{idVendor}"5824", ATTRS{idProduct}"1503", MODE="0660", GROUP="plugdev"
- 执行
sudo udevadm control --reload重载规则 - 重启树莓派、插拔USB继电器,但问题未解决
解决步骤
1. 确认pi用户归属plugdev组
先检查pi用户是否在plugdev组内,执行命令:
groups pi
如果输出中没有plugdev,执行以下命令添加用户到组:
sudo usermod -aG plugdev pi
添加完成后重新登录pi用户(或重启系统),使组权限生效。
2. 修正udev规则适配HID设备
当前规则仅针对hidraw*节点,但hid库可能直接访问USB HID类设备而非hidraw节点。修改/etc/udev/rules.d/99-personal.rules文件内容为:
SUBSYSTEM=="usb", ATTRS{idVendor}=="5824", ATTRS{idProduct}=="1503", MODE="0660", GROUP="plugdev" KERNEL=="hidraw*", ATTRS{idVendor}=="5824", ATTRS{idProduct}=="1503", MODE="0660", GROUP="plugdev"
同时兼容USB子系统和hidraw节点,避免遗漏设备路径。
3. 重载规则并触发设备更新
修改规则后执行以下命令:
sudo udevadm control --reload-rules sudo udevadm trigger
之后重新插拔USB继电器,让新规则应用到设备上。
4. 验证设备权限
执行命令查看设备的权限与所属组:
# 定位目标USB设备路径 lsusb -d 5824:1503 # 查看设备节点权限(替换为上面命令输出的实际路径) ls -l /dev/bus/usb/$(lsusb -d 5824:1503 | awk '{print $2"/"$4}' | sed 's/:$//') # 查看hidraw节点权限 ls -l /dev/hidraw*
确认输出中设备的所属组为plugdev,权限包含读写权限(如crw-rw----)。
5. 测试代码
重新登录pi用户后,再次运行测试代码,确认设备可正常打开。
内容的提问来源于stack exchange,提问作者Anja
相关产品推荐
相关产品推荐

