【问题标题】:USBdevice.open() access denied when using a chromebook使用 chromebook 时 USBdevice.open() 访问被拒绝
【发布时间】:2018-02-04 21:33:46
【问题描述】:

我正在尝试使用 WebUS,或者更准确地说,是通过使用 DART (Angular DART) 编写的网页来访问 USB 设备。

在摆弄了一下之后,我了解了在 Windows 10 台式电脑上使用 Chrome V63 的基本概念。它允许我向 USB 端点发送和接收数据。到目前为止一切顺利:-)

但是,在运行 Chrome 版本 63 的(三星 500C)Chromebook 上尝试相同的 URL 时,当调用 USBdevice.open() 时出现问题,我收到“未捕获的 DOMException:访问被拒绝”例外。

在调试器中,查看 USB 设备属性,opened: false 和接口 claimed: false 表明没有其他人正在使用 USB 适配器。

再看一下,device_event_log 下的 Chrome://system 显示 USB EVENT: usb_device_linux.cc:99 Permission broker failed to open the device: org.freedesktop.DBus.Error.Failed: permission_broker/permission_denied:Permission to open '/dev/bus/001/032' denied (2)

欢迎提出任何建议。

【问题讨论】:

    标签: dart angular-dart chromebook webusb


    【解决方案1】:

    Chrome 操作系统 permission_broker 将访问控制规则应用于可能不适用于其他平台的 USB 设备。这些规则的目的是防止 Chrome 应用(使用 chrome.usb API)或网站(使用 WebUSB API)访问对系统很重要的 USB 设备。

    检查是否允许设备访问请求时通过或失败的规则将记录到系统日志中,该日志位于 Chrome OS 设备上 chrome://system 的“syslog”部分中。搜索包含字符串“permission_broker”的行,你会看到这样的部分:

    2018-02-04T20:27:31.845733-05:00 INFO permission_broker[1249]: ProcessPath(/dev/bus/usb/001/003)
    2018-02-04T20:27:31.883050-05:00 INFO permission_broker[1249]:   AllowUsbDeviceRule: ALLOW
    2018-02-04T20:27:31.883058-05:00 INFO permission_broker[1249]:   AllowTtyDeviceRule: IGNORE
    2018-02-04T20:27:31.918667-05:00 INFO permission_broker[1249]:   DenyClaimedUsbDeviceRule: IGNORE
    2018-02-04T20:27:31.918722-05:00 INFO permission_broker[1249]:   DenyUninitializedDeviceRule: IGNORE
    2018-02-04T20:27:31.918758-05:00 INFO permission_broker[1249]:   DenyUsbDeviceClassRule: IGNORE
    2018-02-04T20:27:31.918765-05:00 INFO permission_broker[1249]:   DenyUsbDeviceClassRule: IGNORE
    2018-02-04T20:27:31.918789-05:00 INFO permission_broker[1249]:   DenyUsbVendorIdRule: IGNORE
    2018-02-04T20:27:31.918794-05:00 INFO permission_broker[1249]:   AllowHidrawDeviceRule: IGNORE
    2018-02-04T20:27:31.918799-05:00 INFO permission_broker[1249]:   AllowGroupTtyDeviceRule: IGNORE
    2018-02-04T20:27:31.918804-05:00 INFO permission_broker[1249]:   DenyGroupTtyDeviceRule: IGNORE
    2018-02-04T20:27:31.918814-05:00 INFO permission_broker[1249]: message repeated 2 times: [   DenyGroupTtyDeviceRule: IGNORE]
    2018-02-04T20:27:31.918819-05:00 INFO permission_broker[1249]:   DenyClaimedHidrawDeviceRule: IGNORE
    2018-02-04T20:27:31.918824-05:00 INFO permission_broker[1249]:   DenyUnsafeHidrawDeviceRule: IGNORE
    2018-02-04T20:27:31.918830-05:00 INFO permission_broker[1249]: Verdict for /dev/bus/usb/001/003: ALLOW
    

    您最有可能发现阻止设备的是 DenyClaimedUsbDeviceRule。这意味着已经有一个 Linux 内核驱动程序将自身附加到设备上。

    【讨论】:

    • 我遇到的问题是由于原来的 USB 适配器使用了 USBHID 并且操作系统声明了 USB 适配器。实施 WebUSB 解决了我的问题,因为它没有被操作系统声明。当前使用 WebUSB 的实现,在 windows、Chromebook 和 MacOS(未尝试 Linux)下运行良好。
    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2020-05-05
    相关资源
    最近更新 更多