树莓派使用node-usb调用open()遇LIBUSB_ERROR_ACCESS权限问题求助
解决node-usb在树莓派上的LIBUSB_ERROR_ACCESS权限问题
嘿,我之前在树莓派上用node-usb操作USB设备时也踩过这个权限坑,咱们来一步步搞定它:
为什么你之前的chmod命令没用?
你修改的/media/pi/EFD0-AA20是USB设备挂载后的文件系统目录,但node-usb是直接和USB原始设备节点交互的,这些节点在/dev/bus/usb/路径下,和挂载目录的权限完全没关系,所以改挂载目录权限自然不起作用。
解决方案
1. 临时快速修复(重启后失效)
先找到你的USB设备对应的总线和地址:
运行
lsusb命令,找到你的SanDisk设备,输出会类似这样:Bus 001 Device 005: ID 1921:21891 SanDisk Corp. Ultra Fit这里的
001是总线号,005是设备地址。给对应的设备节点添加读写权限:
sudo chmod 666 /dev/bus/usb/001/005执行完这个命令后,再运行你的node代码应该就能正常打开设备了。
2. 永久解决(推荐)
通过udev规则让系统自动给这个设备设置权限,不用每次手动操作:
- 创建一个udev规则文件:
sudo nano /etc/udev/rules.d/50-sandisk-usb.rules - 在文件里添加以下内容(注意替换成你的VID和PID,就是你代码里的1921和21891):
SUBSYSTEM=="usb", ATTRS{idVendor}=="1921", ATTRS{idProduct}=="21891", MODE="0666" - 保存退出后,重新加载udev规则并触发生效:
以后每次这个USB设备连接到树莓派,系统都会自动给它设置合适的权限,再也不用手动改了。sudo udevadm control --reload-rules sudo udevadm trigger
代码小建议
给你的代码加个错误处理,这样能更清晰地排查问题,也避免程序直接崩溃:
usb.on('attach', function(device) { try { const sandiskUltrafit = usb.findByIds(1921, 21891); if (sandiskUltrafit) { sandiskUltrafit.open(); console.log("设备成功打开!"); } else { console.log("未找到目标USB设备"); } } catch (err) { console.error("打开设备失败:", err.message); } });
内容的提问来源于stack exchange,提问作者user9237891
相关产品推荐
相关产品推荐

