Javascript 无法打开/dev/bus/usb/001/007:对usb设备的权限被拒绝
我正在尝试使用webusb api从网页连接usb设备,但无法使用以下代码打开配对设备Javascript 无法打开/dev/bus/usb/001/007:对usb设备的权限被拒绝,javascript,google-chrome,webusb,Javascript,Google Chrome,Webusb,我正在尝试使用webusb api从网页连接usb设备,但无法使用以下代码打开配对设备 <!DOCTYPE html> <html> <head allow="usb"></head> <body> <input type="submit" onclick="connect()" value="connect"/> <script> var device; function
<!DOCTYPE html>
<html>
<head allow="usb"></head>
<body>
<input type="submit" onclick="connect()" value="connect"/>
<script>
var device;
function setup(device) {
alert(device.productName+" open");
return device.open()
.then(() => device.selectConfiguration(1))
.then(() => device.claimInterface(0))
}
function connect() {
if (device == null) {
navigator.usb.requestDevice({ filters: [{ vendorId : 2352 }] })
.then(selectedDevice => {
device = selectedDevice;
console.log(device);
return setup(device);
})
.catch(error => { console.log(error); })
}
}
navigator.usb.getDevices()
.then(devices => {
if (devices.length > 0) {
device = devices[0];
return setup(device);
}
})
.catch(error => { console.log(error); });
</script>
</body>
</html>
无功装置;
功能设置(设备){
警报(设备.productName+“打开”);
返回设备。打开()
。然后(()=>设备。选择配置(1))
.然后(()=>device.claimiinterface(0))
}
函数连接(){
如果(设备==null){
requestDevice({filters:[{vendorId:2352}]})
。然后(选择设备=>{
设备=所选设备;
控制台日志(设备);
返回设置(设备);
})
.catch(错误=>{console.log(错误);})
}
}
navigator.usb.getDevices()
。然后(设备=>{
如果(设备长度>0){
设备=设备[0];
返回设置(设备);
}
})
.catch(错误=>{console.log(错误);});
它的节目
DOMException访问被拒绝配对后无法打开usb
根据此问题的标题,您似乎正在Linux上运行,并且没有设置设备节点
/dev/bus/usb/001/007
的权限,以便运行Chrome的用户可以打开它
您需要做的是添加一个udev规则,该规则将设置此设备节点的权限,以便可以打开它。首先,您需要确定设备的供应商和产品ID。如果您运行lsusb
,它将以如下格式列出系统上的设备
总线BBB设备NNN:ID vvv:PPPP制造商产品
在哪里,
BBB:总线号(通常每个控制器一个,USB 3.0控制器两个)。NNN:该总线上的设备号。
vvv:供应商ID(十六进制)。
PPPP:产品ID(十六进制)。
一旦您知道了这些信息,就可以在插入在上述步骤中发现的ID后,在
/etc/udev/rules.d/
中创建一个包含以下行的文件
SUBSYSTEM==“usb”,ATTRS{idVendor}==“VVV”,ATTR{idProduct}==“PPPP”,MODE=“0660”,GROUP=“plugdev”
这将使plugdev
组中的用户可以访问具有给定供应商和产品ID的任何设备。对于可移动设备权限,这是一个模糊合适的组
从您的代码中,似乎已经知道供应商ID 2352,它将以十六进制形式输入规则“0930”。Thank you Reilly Grant的可能副本,其工作正常,但我无法声明显示错误的usb接口([11:33:42]未能声明接口0:设备或资源繁忙(16))关于堆栈溢出的这个错误有很多答案,但是由于安全原因,在WebUSB中,API无法提供分离现有内核驱动程序的选项。如果您可以修改系统设置,以便不加载其他驱动程序或手动解除绑定,则您应该能够声明接口。I解除USB绑定。在那之后,我试图声明接口,然后我得到了如下错误<代码>“未能声明接口0:没有此类文件或目录(2)”。当我重新启动chrome时,操作系统在默认情况下再次绑定USB,我得到错误
无法声明接口0:设备或资源繁忙(16)
。有什么解决办法吗?我找到了你对这个问题的答案,我得到了和那个人同样的结果。解除设备绑定后,我执行命令/sys/bus/usb/devices/1-2$cat bConfigurationValue
,但是我没有得到任何值,对于bInterfaceNumber
也没有得到相同的值。如何解决这个问题?