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"
Надеясь, что это помогает, в основном это зависит от хост-системы.
Еще один интересный поток - этот.
Кто-то просто обошел проблему, не требуя владения интерфейсом.
Я думаю, это будет работать и в вашем случае, по крайней мере, в качестве обходного пути до тех пор, пока не будет найдено окончательное решение.