WebUSB调用device.open()报“Access denied”权限问题求助
解决WebUSB在Ubuntu下的权限拒绝问题
核心原因
Ubuntu系统中,/dev/bus/usb路径下的设备文件默认仅允许root或plugdev组用户访问,你的Chrome进程当前没有足够权限读取这些设备文件,导致调用device.open()时触发权限拒绝错误。Pixel 3能正常访问是因为Chrome对Android设备有特殊权限处理逻辑。
解决方案
1. 将当前用户加入plugdev组
大多数USB设备默认归属于plugdev组,把用户加入该组可获取基础访问权限:
sudo usermod -aG plugdev $USER
执行后必须注销并重新登录,让组权限生效。
2. 添加自定义udev规则(针对特定设备)
如果加入组后问题仍存在(比如热敏打印机这类特殊设备),需要为目标设备创建udev规则赋予全局可读可写权限:
- 查看设备的Vendor ID和Product ID:
执行lsusb命令,找到目标设备的行,格式类似Bus 001 Device 005: ID XXXX:YYYY Vendor Name,其中XXXX是Vendor ID,YYYY是Product ID。 - 创建udev规则文件:
sudo nano /etc/udev/rules.d/99-webusb.rules - 在文件中添加以下内容(替换
XXXX和YYYY为你的设备ID):SUBSYSTEM=="usb", ATTR{idVendor}=="XXXX", ATTR{idProduct}=="YYYY", MODE="0666", GROUP="plugdev" - 重新加载udev规则并触发设备重新识别:
sudo udevadm control --reload-rules && sudo udevadm trigger
3. 验证权限设置
重新连接设备后,执行以下命令检查设备文件权限:
ls -l /dev/bus/usb/001/005
输出中权限应包含rw-rw-rw-,且组为plugdev,此时Chrome即可正常调用device.open()。
内容的提问来源于stack exchange,提问作者Wajahath
相关产品推荐
相关产品推荐

