LibUsb 声明接口访问被拒绝 Java

2022-09-03 16:10:58

我希望能够从 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 个接口。

任何帮助将不胜感激!


答案 1

LibUsb 需要 root 权限才能访问 usb 设备。在Mac中,拥有管理员帐户不足以访问USB设备。您必须以 root 身份运行它(admin 和 root 是不一样的)。当我在Mac(OSX EL Capitan)上使用它时,我遇到了同样的问题,我认为这是设备或库无法正常工作的问题,但后来我意识到这是权限的问题。猜猜你的程序名称是myDevicesAccessor,然后像这样运行它。

sudo ./myDevicesAccessor

如果你尝试它像

./myDevicesAccessor

这是行不通的。


答案 2

它可能与由于错误权限而导致的问题有关。
这是一个有趣的评论,来自一个在类似问题中产生的人。
他们建议通过添加以下行来编辑文件:/etc/udev/rules.d/90-usbpermission.rules

SUBSYSTEM==“usb”,GROUP=“users”,MODE=“0666”

希望它有帮助,它主要取决于主机系统。


另一个有趣的线程是这个
有人只是通过不声称拥有界面的所有权来解决这个问题。
我想这也适用于您的情况,至少作为一种解决方法,直到找到最终的解决方案。


推荐