LibUsb 声明接口访问被拒绝 Java
Posted
技术标签:
【中文标题】LibUsb 声明接口访问被拒绝 Java【英文标题】:LibUsb claim interface access denied Java 【发布时间】:2014-03-27 12:46:24 【问题描述】:我希望能够从 USB 计步器读取数据。我在 Java 中尝试这个,我正在使用 LibUsb 和 Usb4Java 库。我似乎无法认领 USB 管道或类似的东西。
我正在使用的代码:
final Context context = new Context();
int result = LibUsb.init(context);
if (result < 0)
throw new LibUsbException("Unable to initialize libusb", result);
DeviceHandle handle = LibUsb.openDeviceWithVidPid(context, vid, pid);
if (handle != null)
Device d = LibUsb.getDevice(handle);
int res = LibUsb.claimInterface(handle, 0);
Int res 返回“-3”,即“LIBUSB_ERROR_ACCESS”
设备已找到但不可声明。 USB 设备只有 1 个接口。
任何帮助将不胜感激!
【问题讨论】:
哪个操作系统?你试过root
用户吗?
我在 Mac OSX 10.9.1 上试用它并且我使用的是管理员帐户
【参考方案1】:
LibUsb 需要 root 权限才能访问 USB 设备。在 Mac 中,拥有管理员帐户不足以访问 USB 设备。您必须以 root 身份运行它(管理员和 root 不同)。当我在我的 Mac(OSX EL Capitan)上使用它时,我遇到了同样的问题,我认为是设备或库的问题无法正常工作,但后来我意识到这是权限问题。猜你的程序名是 myDevicesAccessor 然后像这样运行它。
sudo ./myDevicesAccessor
如果你尝试一下
./myDevicesAccessor
这行不通。
【讨论】:
【参考方案2】:这可能与权限错误有关。Here 是来自遇到类似问题的人的有趣评论。
他们建议通过添加以下行来编辑文件/etc/udev/rules.d/90-usbpermission.rules
:
SUBSYSTEM==“usb”,GROUP=“users”,MODE=“0666”
希望它有所帮助,它主要取决于主机系统。
另一个有趣的话题是this one。 有人只是通过不声明接口的所有权来解决这个问题。 我想这也适用于您的情况,至少在找到最终解决方案之前作为一种解决方法。
【讨论】:
以上是关于LibUsb 声明接口访问被拒绝 Java的主要内容,如果未能解决你的问题,请参考以下文章