【问题标题】:LibUsb claim interface access denied JavaLibUsb 声明接口访问被拒绝 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 上试用它并且我使用的是管理员帐户

标签: java usb libusb


【解决方案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。
    有人只是通过不声明接口的所有权来解决这个问题。
    我想这也适用于您的情况,至少在找到最终解决方案之前作为一种解决方法。

    【讨论】:

      猜你喜欢
      • 2011-09-15
      • 2010-12-28
      • 2023-04-10
      • 1970-01-01
      • 2016-04-10
      • 2015-06-21
      • 2021-07-06
      • 2011-01-26
      • 1970-01-01
      相关资源
      最近更新 更多