Почему Pyusb / libusb требуют разрешений root (sudo) на Linux?
Вопрос
Я играю вокруг с Пищи В последнее время и обнаружил, что он прекрасно работает на Linux (Ubuntu имеет либусб 0,1 и 1,0, а также Openusb.) ... но только если я запускаю программу с привилегиями root (с sudo
, конечно).
Может кто-нибудь сказать мне, почему он требует повышенных привилегий и, что более важно, если я могу изменить разрешения как-то, чтобы сделать его работать на обычных учетных записях пользователей?
Решение
libusb
Позволяет манипулировать произвольными USB-устройствами в произвольных способах. Вы можете отформатировать внешний USB Harddisk, например.
В общем, все прямые аппаратные доступа требуют root
привилегии, хотя я думаю, что на самом деле полно root
Привилегии не требуются, вы должны быть в порядке с просто CAP_SYS_RAWIO
.
Другие советы
Вы можете изменить разрешения вашего узла USB-устройства, создавая правило UDEV. Например, я добавил следующую строку в файл в /etc/udev/rules.d/
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="usbusers"
Это устанавливает владельца узла устройства в root:usbusers
скорее, чем root:root
После добавления себя в usbusers
Группа, я могу получить доступ к устройству.
Смотрите ответ, который я здесь дал:
Как я могу общаться с этим устройством, используя 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. Добавьте имена пользователей в группу плагинов
adduser username plugdev
3. Заставьте систему UDEV, чтобы увидеть ваши изменения
sudo udevadm control --reload
(это минус минус перезагрузка)
sudo udevadm trigger
4. Отключите и загрузите устройство или перезагрузите компьютер
Конечный результат должен заключаться в том, что все члены плагина группы теперь смогут получить доступ к устройству.
Редактировать: Обратите внимание, что на некоторых системах группа plugdev
Не может быть группой, которая вам нужна. Это также может быть группой input
По моему опыту, в зависимости от того, что вы подключаете.