Доступ к USBdevice.open() запрещен при использовании Chromebook

Я экспериментирую с WebUS или, точнее, с доступом к USB-устройству через веб-страницу, написанную с использованием DART (Angular DART).

Немного повозившись, я получил базовую концепцию работы с Chrome V63 на настольном ПК с Windows 10. Это позволяет мне отправлять и получать данные на конечную точку USB. Все идет нормально :-)

Однако при попытке использовать тот же URL-адрес на Chromebook (Samsung 500C) с Chrome версии 63 проблема возникает, когда вызывается USBdevice.open(), я получаю исключение «Uncaught DOMException: Доступ запрещен».

В отладчике, глядя на свойства USBdevice, opened: false и интерфейс claimed: false указывают, что никто другой не использует USB-адаптер.

Глядя еще немного, Chrome://system под device_event_log показывает 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)

Любые предложения приветствуются.


person Bas E    schedule 04.02.2018    source источник


Ответы (1)


Разрешение_брокер Chrome OS применяет правила контроля доступа к USB-устройствам, которые могут не применяться на других платформах. Цель этих правил — запретить приложению Chrome (используя API chrome.usb) или веб-сайту (используя API WebUSB) доступ к USB-устройству, которое важно для системы.

Правила, пройденные или не пройденные при проверке того, будет ли разрешен запрос на доступ к устройству, регистрируются в системном журнале, который доступен в разделе «syslog» chrome://system на устройстве Chrome OS. Найдите в нем строки, содержащие строку «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 уже подключен к устройству.

person Reilly Grant    schedule 05.02.2018
comment
Проблема, с которой я столкнулся, была связана с тем, что оригинальный USB-адаптер использовал USBHID, а ОС требовала USB-адаптер. Внедрение WebUSB решило мою проблему, так как на нее не претендовала ОС. Текущая реализация с использованием WebUSB отлично работает под Windows, Chromebook и MacOS (в Linux не пробовал). - person Bas E; 21.02.2018