Почему PyUSB / libusb требует разрешения root (sudo) в Linux? - PullRequest
10 голосов
/ 17 сентября 2010

В последнее время я играл с PyUSB и обнаружил, что он прекрасно работает в Linux (Ubuntu имеет libusb 0.1 и 1.0, а также OpenUSB ) ... но только если я запускаю программу с привилегиями root (конечно, с sudo).

Может кто-нибудь сказать мне, почему она требует повышенных привилегий и, что более важно, если я могу изменить разрешениякак-нибудь заставить его работать на обычных учетных записях пользователей?

Ответы [ 3 ]

12 голосов
/ 21 декабря 2011

Вы можете изменить права доступа вашего узла usb-устройства, создав правило udev. например Я добавил следующую строку в файл в /etc/udev/rules.d/

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="usbusers"

Устанавливает владельца узла устройства на root:usbusers, а не root:root

После добавления себя в группу usbusers я могу получить доступ к устройству.

5 голосов
/ 18 сентября 2010

libusb позволяет манипулировать произвольными USB-устройствами произвольным образом. Например, вы можете отформатировать внешний жесткий диск USB.

В целом, для прямого доступа к оборудованию требуются привилегии root, хотя я полагаю, что на самом деле полные root привилегии не требуются, вам будет достаточно просто CAP_SYS_RAWIO.

3 голосов
/ 15 августа 2015

Смотрите ответ, который я дал здесь:
Как я могу общаться с этим устройством, используя pyusb?

А именно:
Настройка файла правил udev для конкретногоустройство, к которому вы хотите иметь доступ для обычных пользователей.Это определит идентификатор поставщика, идентификатор продукта и группу.
Идентификатор поставщика и продукта можно найти с помощью команды lsusb.

1.Создайте файл правил udev

ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="171b", ATTRS{idProduct}=="2001", MODE="660", GROUP="plugdev"

Поместите это в файл с именем (например) /lib/udev/rules.d/50-YourSoftwareName.rules (поискать в man udev правила именования файлов)
ПРИМЕЧАНИЕ. В прежнем соглашении об именах использовался /etc/udev/rules.d/filename.rules, который изменился.

2.добавьте имена пользователей в группу plugdev

adduser username plugdev

3.заставить систему udev видеть ваши изменения

sudo udevadm control --reload (то есть минус минус перезагрузка)
sudo udevadm trigger

4.отключите и снова подключите устройство или перезагрузите компьютер

Конечный результат должен состоять в том, что все члены группы plugdev теперь смогут получить доступ к устройству.

РЕДАКТИРОВАТЬ. Обратите внимание, что в некоторых системахгруппа plugdev не может быть той группой, которая вам нужна.В моем опыте это также может быть группа input, в зависимости от того, что вы подключаете.

...