LibUsb заявляет, что доступ к интерфейсу запрещен Java

Я хочу читать данные с шагомера 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"

Надеясь, что это помогает, в основном это зависит от хост-системы.


Еще один интересный поток - этот.
Кто-то просто обошел проблему, не требуя владения интерфейсом.
Я думаю, это будет работать и в вашем случае, по крайней мере, в качестве обходного пути до тех пор, пока не будет найдено окончательное решение.