无法打开/ dev / bus / usb / 001/007:usb设备的权限被拒绝

时间:2017-12-05 09:43:44

标签: 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 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>

它的节目

  

DOMException访问被拒绝无法在配对

后打开usb

1 个答案:

答案 0 :(得分:0)

根据此问题的标题,您似乎在Linux上运行,并且未设置设备节点/dev/bus/usb/001/007的权限,以便运行Chrome的用户可以打开它。

您需要做的是添加一个udev规则,该规则将为此设备节点设置权限,以便可以打开它。首先,您需要确定设备的供应商和产品ID。如果您运行lsusb,它将以这样的格式列出系统中的设备,

Bus BBB Device NNN: ID VVVV:PPPP Manufacturer Product

其中,

BBB:总线编号(通常每个控制器一个,USB 3.0控制器两个)。
NNN:该总线上的设备编号 VVVV:供应商ID(十六进制)。
PPPP:产品ID(十六进制)。

了解此信息后,您可以在插入上述步骤中发现的ID后,在/etc/udev/rules.d/中创建包含以下行的文件。

SUBSYSTEM=="usb", ATTRS{idVendor}=="VVVV", ATTR{idProduct}=="PPPP", MODE="0660", GROUP="plugdev"

这将使plugdev组中的用户可以访问具有给定供应商和产品ID的任何设备。对于可移动设备权限according to the Debian documentation,这是一个非常合适的组。

从您的代码中已经看似知道供应商ID 2352,它将以十六进制形式输入到规则中作为&#34; 0930&#34;。