Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法打开/dev/bus/usb/001/007:对usb设备的权限被拒绝_Javascript_Google Chrome_Webusb - Fatal编程技术网

Javascript 无法打开/dev/bus/usb/001/007:对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

我正在尝试使用webusb api从网页连接usb设备,但无法使用以下代码打开配对设备

<!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
也没有得到相同的值。如何解决这个问题?