Pourquoi pyusb / libusb nécessitent des permissions root (sudo) sur Linux?
Question
Je suis en train de jouer autour avec pyusb ces derniers temps, et a constaté que cela fonctionne très bien sous Linux (Ubuntu a < a href = "http://www.libusb.org/" rel = "noreferrer"> libusb 0,1 et 1,0, ainsi que OpenUSB ) ... mais seulement si je lance le programme avec les privilèges root (avec sudo
, bien sûr).
Quelqu'un peut-il me dire pourquoi il requiert des privilèges élevés et, plus important encore, si je peux modifier les autorisations en quelque sorte pour le faire fonctionner pour les comptes utilisateur normal?
La solution
libusb
vous permet de manipuler les périphériques USB arbitraires de façon arbitraire. Vous pouvez formater un disque dur externe USB, par exemple.
En général, tout accès direct au matériel nécessite des privilèges root
, même si je suppose que les privilèges root
en fait plein ne sont pas nécessaires, vous devriez être bien avec juste CAP_SYS_RAWIO
.
Autres conseils
Vous pouvez modifier les autorisations de votre noeud périphérique USB en créant une règle udev.
par exemple. J'ai ajouté la ligne suivante dans un fichier /etc/udev/rules.d/
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="usbusers"
Ceci définit le propriétaire du noeud périphérique à root:usbusers
plutôt que root:root
Après moi d'ajouter au groupe usbusers
, je peux accéder au périphérique.
Voir la réponse que j'ai donné ici:
Comment puis-je comuniquer avec cet appareil en utilisant pyusb?
A savoir:
Mettre en place un fichier de règles udev pour le périphérique spécifique que vous souhaitez que les utilisateurs pour qu'ils puissent être en mesure d'accéder. Cela définira l'ID du fournisseur, l'identifiant du produit et un groupe.
On peut trouver les fournisseurs de et l'identifiant de produit en utilisant la commande lsusb
.
1. Créer un fichier de règles udev
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="171b", ATTRS{idProduct}=="2001", MODE="660", GROUP="plugdev"
Mettre cela dans un fichier appelé (par exemple) /lib/udev/rules.d/50-YourSoftwareName.rules (fouiller dans udev homme pour les règles de nommage de fichiers)
NOTE: L'ancienne convention de dénomination utilisée /etc/udev/rules.d/filename.rules, qui a changé.
2. ajouter les noms d'utilisateur au groupe plugdev
adduser username plugdev
3. forcer le système udev pour voir vos modifications
sudo udevadm control --reload
(qui est moins reload moins)
sudo udevadm trigger
4. débrancher et rebrancher le dispositif ou redémarrer votre machine
Le résultat final devrait être que tous les membres du groupe plugdev seront désormais en mesure d'accéder au périphérique.
EDIT:
Notez que le plugdev
du groupe ne peut pas être sur certains systèmes, le groupe que vous avez besoin. Il peut également être le input
du groupe dans mon expérience, en fonction de ce que vous brancher.