Как мне заставить libusb работать без полномочий root?

Я создаю нестандартное USB-устройство HID и настольное приложение для него, используя HIDAPI на Lubuntu 16.04.3 LTS. Сейчас мы назовем это myapp.

Очевидно, если я сделаю $ ./myapp, libusb_open() потерпит неудачу с LIBUSB_ERROR_ACCESS. (показано в моем отладчике как -3; потребовалось некоторое время, чтобы выяснить это, потому что перечисление не очень хорошо задокументировано)
Но если я это сделаю $ sudo ./myapp , это успешно.
Я действительно не хочу, чтобы у myapp были права доступа root, так как я могу общаться с моим USB-устройством без них?


Я надеялся получить ответ здесь , но похоже, именно от этого и отказались. Это говорит о правах пользователя, но я не могу найти это в моей системе. Я думал, что мог бы найти группу под названием usb или libusb, к которой я мог бы добавить себя, но не такая удача.


На этот вопрос на другом сайте SE есть ответ, в котором используются некоторые строгие текстовые файлы для изменения разрешений либо глобально (вероятно, плохая идея), либо для конкретного устройства, но:

  1. Это не «твик магглов», который я искал.
  2. У большинства этих файлов есть предупреждение о том, что они не должны изменяться напрямую, потому что они генерируются автоматически. Так как я могу быть уверен, что случайное обновление пакета не уничтожит мои изменения и, таким образом, сломает myapp?
  3. Похоже, что оно ничего не делает в любом случае. Я следовал этим инструкциям и перезагрузился, и myapp с разрешениями пользователей все еще не может общаться с USB.
6
задан 2 April 2019 в 18:39

2 ответа

Я все еще не ищу "настройки магла", но, по крайней мере, это работает:

Очевидно, есть две директории для udev (я понятия не имею, почему):

  • /etc/udev/rules.d
  • /lib/udev/rules.d

Я связывался с /lib и никуда не деться. Я нашел /etc один здесь , и он работает:


Пут SUBSYSTEM=="usb", ATTRS{idVendor}=="VID", ATTRS{idProduct}=="PID", MODE="0666"

  • VID является Назначенный USB-IF идентификатор поставщика рассматриваемого устройства *
  • PID - это назначенный поставщиком идентификатор продукта рассматриваемого устройства *
  • 0666 предоставляет универсальный доступ на чтение / запись ко всему, что соответствует этой строке

    * $ lsusb для просмотра всех подключенных USB-устройств и их идентификаторов.

В /etc/udev/rules.d/xx-my-rule.rules (может потребоваться разрешение root / sudo)

  • xx - любое число> 50 (значения по умолчанию - 50, а более высокие числа имеют приоритет)
  • my-rule - все, что вы хотите назвать
  • , должно заканчиваться на .rules

Затем udevadm control --reload-rules (может также потребоваться разрешение root / sudo), и он должен «просто работать» для этой конкретной пары VID / PID.


Другой вариант, чтобы немного ужесточить разрешения, - это использовать TAG+="uaccess" вместо MODE="0666". Это ограничивает доступ вошедшего в систему (физического) пользователя вместо всех пользователей. Спасибо @Lekensteyn!

5
ответ дан 2 April 2019 в 18:39
  • 1
    Ребенок? I' m 30 лет и мой первый компьютер были 80286: P – Napolux 19 May 2012 в 15:13
  • 2
    Ребенок? I' m 30 лет и мой первый компьютер были 80286: P – Napolux 19 May 2012 в 15:13
  • 3
    Ребенок? I' m 30 лет и мой первый компьютер были 80286: P – Napolux 19 May 2012 в 15:13
  • 4
    Ребенок? I' m 30 лет и мой первый компьютер были 80286: P – Napolux 19 May 2012 в 15:13
  • 5
    Ребенок? I' m 30 лет и мой первый компьютер были 80286: P – Napolux 19 May 2012 в 15:13
  • 6
    Ребенок? I' m 30 лет и мой первый компьютер были 80286: P – Napolux 19 May 2012 в 15:13

Для всех, кто боролся с этим - мне нужно было добавить GROUP = "plugdev" к моему правилу udev в Ubuntu 18.04, чтобы оно работало.

поэтому для моего адаптера BTD-400 файл /etc/udev/rules.d/51-usb-device.rules гласит:

SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="21e8", GROUP="plugdev", TAG+="uaccess"
0
ответ дан 2 April 2019 в 18:39
  • 1
    Спасибо, это решение заставляет меню никогда не быть скрытым, хорошо делаться! – giuspen 18 May 2012 в 23:31
  • 2
    Спасибо, это решение заставляет меню никогда не быть скрытым, хорошо делаться! – giuspen 18 May 2012 в 23:31
  • 3
    Спасибо, это решение заставляет меню никогда не быть скрытым, хорошо делаться! – giuspen 18 May 2012 в 23:31
  • 4
    Спасибо, это решение заставляет меню никогда не быть скрытым, хорошо делаться! – giuspen 18 May 2012 в 23:31
  • 5
    Спасибо, это решение заставляет меню никогда не быть скрытым, хорошо делаться! – giuspen 18 May 2012 в 23:31
  • 6
    Спасибо, это решение заставляет меню никогда не быть скрытым, хорошо делаться! – giuspen 18 May 2012 в 23:31

Другие вопросы по тегам:

Похожие вопросы: