J'ai un programme basé sur libusb qui ne peut pas ouvrir de périphériques USB sur un Ubuntu fraîchement installé car il manque d'autorisations.
Cette solution fonctionnera probablement pour moi, mais cela nécessite de spécifier manuellement chaque périphérique - et j'en ai plusieurs. J'ai donc essayé ceci (dans un fichier /etc/udev/rules.d/41-cvs-permissions.rules
):
SUBSYSTEM=="usb", MODE:="0666"
J'ai omis VID et PID, en espérant que la règle sera simplement appliquée à TOUS les appareils. Cela a certainement un effet, mais l'effet est plutôt étrange: au lieu de détecter 5 périphériques qu'il ne peut pas ouvrir, libusb n'en détecte que 2 maintenant - les deux sont des contrôleurs hôtes USB, pas des périphériques réels.
Comment réaliser ce que je veux?
La façon dont je traite les périphériques USB consiste à donner à tous les groupes un accès spécifique.
En tant que root:
echo 'SUBSYSTEM=="usb", MODE="0660", GROUP="plugdev"' > /etc/udev/rules.d/00-usb-permissions.rules
udevadm control --reload-rules
Cela permet essentiellement d’accorder aux membres du groupe plugdev un accès en lecture et en écriture pour tout périphérique USB.
Je conviens que faire correspondre les règles à l'aide de VID/PID n'est pas une solution définitive. Mais vous pouvez utiliser plusieurs appareils dans la même règle sans cibler aveuglément tous les périphériques USB comme vous l’avez fait. Exemple d'utilisation de DRIVER
nom (usb-storage
, usbhid
, ..) ou KERNEL
nom (tty*
, sd*
, ..), même avec un minimum regex (sd[a-z][0-9]*
, usb*
).
Vous devriez rechercher des similitudes dans leurs attributs.
Enregistrer la liste actuelle des périphériques dans /dev
ls /dev > /tmp/dev_list0.txt
Branchez l'un des périphériques cibles
Enregistrer la liste des périphériques dans un autre fichier
ls /dev > /tmp/dev_list.txt
Comparer les fichiers, >
périphérique ajouté, <
périphérique supprimé
$ colordiff /tmp/dev_list0.txt /tmp/dev_list.txt
85a86,87
> sdc
> serial
89a92,93
> sg4
> sg5
93a98
> sr1
194a200,201
> ttyUSB0
> ttyUSB1
Ceci est un modem 3G.
Vérifiez l'attribut pour toutes les interfaces dont vous avez besoin, par exemple:
udevadm info --attribute-walk --name=/dev/ttyUSB0
Faites la même chose pour tous les appareils que vous voulez. Si vous ne savez pas comment, téléchargez leur sortie udevadm info --attribute-walk --name=...
et associez-la à votre question.
Notez que tous les périphériques USB ne créent pas de nœud dans /dev
. Certains que vous avez recherchés dans l'arborescence SYSFS /sys
. Puis vérifiez leurs attributs en utilisant --path
udevadm info --attribute-walk --path=...
En procédant de la même manière que ci-dessus, vous pouvez vérifier les nœuds de périphérique créés en surveillant les événements udev
:
udevadm monitor