Je crée un périphérique USB HID personnalisé et une application de bureau qui l'accompagne, en utilisant HIDAPI sur Lubuntu 16.04.3 LTS. Nous l'appellerons myapp
pour l'instant.
Apparemment, si je fais $ ./myapp
, libusb_open()
échoue avec LIBUSB_ERROR_ACCESS
. (affiché dans mon débogueur sous la forme -3
; il a fallu un certain temps pour le comprendre car l'enum ne semble pas très bien documenté)
Mais si je fais $ Sudo ./myapp
, ça réussit.
Je ne veux vraiment pas que myapp
ait les droits root, alors comment puis-je parler à mon périphérique USB sans eux?
J'espérais une réponse ici , mais il semble avoir été abandonné à ce moment précis. Cela en dit long sur les autorisations des utilisateurs, mais je n'arrive pas à le trouver sur mon système. J'ai pensé que je pourrais trouver un groupe appelé usb
ou libusb
auquel je pourrais ajouter moi-même, mais aucune chance de ce type.
Cette question sur un site SE différent a une réponse qui utilise des fichiers texte austères pour modifier les autorisations soit globalement (probablement une mauvaise idée), soit pour un périphérique spécifique, mais:
myapp
?myapp
avec des autorisations utilisateur ne peut toujours pas parler à USB.Ce n'est toujours pas le "Tweak des Moldus" que je recherche vraiment, mais au moins, cela fonctionne:
Apparemment, il y a deux répertoires pour udev (je ne sais pas pourquoi):
/etc/udev/rules.d
/lib/udev/rules.d
Je m'étais amusé avec le /lib
et n'avais abouti à rien. J'ai trouvé le /etc
one here , et ça marche:
Mettez SUBSYSTEM=="usb", ATTRS{idVendor}=="VID", ATTRS{idProduct}=="PID", MODE="0666"
VID
est le ID de fournisseur attribué par l'USB-IF du périphérique en question *PID
est l'ID de produit attribué par le fournisseur du périphérique en question *0666
donne un accès universel en lecture/écriture à tout ce qui correspond à cette ligne
* $ lsusb
pour voir tous les périphériques USB connectés et leurs identifiants.
Dans /etc/udev/rules.d/xx-my-rule.rules
(peut avoir besoin d'autorisations root/Sudo)
xx
est un nombre quelconque> 50 (les valeurs par défaut sont 50 et les nombres les plus élevés sont prioritaires)my-rule
est ce que vous voulez appeler.rules
Ensuite, udevadm control --reload-rules
(peut également avoir besoin d'autorisations root/Sudo), et cela devrait "fonctionner" pour cette paire spécifique VID/PID.
Une autre option, pour resserrer un peu plus les autorisations, consiste à utiliser TAG+="uaccess"
à la place de MODE="0666"
. Cela limite l'accès à l'utilisateur (physique) actuellement connecté au lieu de tous les utilisateurs. Merci @Lekensteyn!
Pour tous ceux qui ont des problèmes avec cela - je devais ajouter GROUP = "plugdev" à ma règle udev sous Ubuntu 18.04 pour que cela fonctionne.
donc pour mon adaptateur BTD-400 le fichier / etc/udev/rules.d/51-usb-device.rules se lit comme suit:
SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="21e8", GROUP="plugdev", TAG+="uaccess"