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的主要内容,如果未能解决你的问题,请参考以下文章

iOS 审核被拒问题总结

iOS app相机访问被拒绝iOS 9.1(黑屏)

ios-app被拒绝了,怎么办

JSPatch被拒之完美解决方案

以非 root 用户身份使用 libusb-1.0 访问 USB 设备

来自 libusb 的错误消息“未声明接口”