无法在 Chromebook 上连接到 USB:访问设备的权限被拒绝
Failed to connect to USB on chromebook: Permission to access device was denied
我正在为必须与特定 USB 设备通信的 chromebook 编写应用程序。该设备出现在已找到设备的列表中,来自回调:
var VENDOR_ID = 5824, PRODUCT_ID = 1159;
document.getElementById("request-permission").addEventListener('click', function() {
chrome.permissions.request({
permissions: [{
'usbDevices': [{
'vendorId': VENDOR_ID,
"productId": PRODUCT_ID
}]
}]
},
function(result) {
if (result) {
console.log('App was granted the "usbDevices" permission.');
getDevices();
}
}
});
});
function getDevices() {
chrome.usb.getDevices({
vendorId: VENDOR_ID,
productId: PRODUCT_ID
}, function(devices) {
if (chrome.runtime.lastError !== undefined) {
console.warn('chrome.usb.getDevices error: ' + chrome.runtime.lastError.message);
return;
}
if (devices) {
if (devices.length > 0) {
for (var device of devices)
openUsbDevice(device);
}
}
});
}
所以我可以成功地看到我的设备,但是当我试图打开它时,它失败了:
chrome.usb.openDevice(device, function(handle) {
if (chrome.runtime.lastError != undefined) {
console.log('Failed to open device: '+chrome.runtime.lastError.message);
} else {
populateDeviceInfo(handle, function () {
chrome.usb.closeDevice(handle);
});
}
});
我在控制台中收到错误消息:无法打开设备:访问设备的权限被拒绝
我在 manifest.js:
中声明了所有必需的 USB 权限
"permissions" : [
"usb"
],
"optional_permissions" : [{
"usbDevices" : [
{
"productId" : 1159,
"vendorId" : 5824
}
]
}],
我还尝试了另一个 api 函数,比如 chrome.usb.findDevices 和 chrome.usb.requestAccess ,但结果是一样的。同时我的 nexus 7 设备例如通过usb成功识别。
任何想法为什么可以或猜测如何使我的 usb 设备变得可访问?
我只在 Acer Chromebook c7 (Chrome OS v.44) 和 Mac 上遇到过这个问题。
打开 chrome://system 并展开 "syslog" 部分。对于您尝试打开的每台设备以及导致它拒绝访问的规则,您会发现来自 "permission_broker" 的一系列消息。
最常见的原因是 "DenyClaimedUsbDeviceRule",它拒绝访问其他应用程序或内核驱动程序声明的设备。出于安全原因,在这种情况下拒绝访问。 Chrome OS 不希望 Chrome 应用程序能够覆盖通常由内核为其支持的设备强制执行的任何策略。您应该使用更高级别的 API(例如 chrome.fileSystem 用于存储设备或 navigator.getUserMedia 用于网络摄像头和音频适配器)。
我正在为必须与特定 USB 设备通信的 chromebook 编写应用程序。该设备出现在已找到设备的列表中,来自回调:
var VENDOR_ID = 5824, PRODUCT_ID = 1159;
document.getElementById("request-permission").addEventListener('click', function() {
chrome.permissions.request({
permissions: [{
'usbDevices': [{
'vendorId': VENDOR_ID,
"productId": PRODUCT_ID
}]
}]
},
function(result) {
if (result) {
console.log('App was granted the "usbDevices" permission.');
getDevices();
}
}
});
});
function getDevices() {
chrome.usb.getDevices({
vendorId: VENDOR_ID,
productId: PRODUCT_ID
}, function(devices) {
if (chrome.runtime.lastError !== undefined) {
console.warn('chrome.usb.getDevices error: ' + chrome.runtime.lastError.message);
return;
}
if (devices) {
if (devices.length > 0) {
for (var device of devices)
openUsbDevice(device);
}
}
});
}
所以我可以成功地看到我的设备,但是当我试图打开它时,它失败了:
chrome.usb.openDevice(device, function(handle) {
if (chrome.runtime.lastError != undefined) {
console.log('Failed to open device: '+chrome.runtime.lastError.message);
} else {
populateDeviceInfo(handle, function () {
chrome.usb.closeDevice(handle);
});
}
});
我在控制台中收到错误消息:无法打开设备:访问设备的权限被拒绝
我在 manifest.js:
中声明了所有必需的 USB 权限 "permissions" : [
"usb"
],
"optional_permissions" : [{
"usbDevices" : [
{
"productId" : 1159,
"vendorId" : 5824
}
]
}],
我还尝试了另一个 api 函数,比如 chrome.usb.findDevices 和 chrome.usb.requestAccess ,但结果是一样的。同时我的 nexus 7 设备例如通过usb成功识别。 任何想法为什么可以或猜测如何使我的 usb 设备变得可访问? 我只在 Acer Chromebook c7 (Chrome OS v.44) 和 Mac 上遇到过这个问题。
打开 chrome://system 并展开 "syslog" 部分。对于您尝试打开的每台设备以及导致它拒绝访问的规则,您会发现来自 "permission_broker" 的一系列消息。
最常见的原因是 "DenyClaimedUsbDeviceRule",它拒绝访问其他应用程序或内核驱动程序声明的设备。出于安全原因,在这种情况下拒绝访问。 Chrome OS 不希望 Chrome 应用程序能够覆盖通常由内核为其支持的设备强制执行的任何策略。您应该使用更高级别的 API(例如 chrome.fileSystem 用于存储设备或 navigator.getUserMedia 用于网络摄像头和音频适配器)。