Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/03/2013, à 16:44

jibe

[RESOLU] libusb requires write access to USB device nodes...

Salut,

Curieusement, ce sujet est assez largement abordé avec d'autres distribs, mais très peu avec Ubuntu...

Sur 12.04, je fais des essais avec divers périphériques peu standard (convertisseurs A/D et D/A, robots...). Tout fonctionne parfaitement bien, mais en étant super-utilisateur. Je cherche tout simplement le moyen pour que n'importe quel utilisateur puisse utiliser ces périphériques. Or, si je ne tape pas "sudo" devant les commandes, j'obtiens les messages d'erreur suivants :

libusb: 0.000000 error [op_open] libusb couldn't open USB device /dev/bus/usb/002/005: Permission denied.
libusb: 0.000253 error [op_open] libusb requires write access to USB device nodes.
Error opening device

Mes recherches m'ont amené à créer un fichier /etc/udev/rules.d/90-mes-usb.rules qui semble être la solution proposée la meilleure et la plus universelle. Ce fichier contient quelque chose comme :

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device",SYSFS{idVendor}=="1267" ,  SYSFS{idProduct}=="0000", MODE="0666", GROUP="plugdev"

Cela devrait théoriquement résoudre les problèmes de permissions pour le périphérique en question, mais il n'en est rien... Il faut toujours taper "sudo" devant la commande pour ne pas avoir les messages d'erreur... Pourtant, ça semble être la solution dans bien des cas sur d'autres distribs...

Il doit me manquer un détail quelque part, mais quoi et où ???
Qu'a donc Ubuntu de particulier à ce niveau ?
Cela peut-il dépendre de la version d'un quelconque paquet (udev, libusb) ou du kernel ?
Bref, comment faire pour que tous les utilisateurs aient bien les droits en écriture sur ces périphériques ?

Je précise qu'un reboot après modification du fichier /etc/udev/rules.d/90-mes-usb.rules ne change rien, et que bien entendu les utilisateurs font partie du groupe plugdev...

Dernière modification par jibe (Le 07/03/2013, à 15:07)


Il y a deux manières de paraitre supérieur : en montrant sa valeur ou en dévalorisant les autres.

Hors ligne

#2 Le 06/03/2013, à 23:51

jibe

Re : [RESOLU] libusb requires write access to USB device nodes...

Salut,

Personne n'a ne serait-ce qu'un début de piste ou une tentative d'explication ?


Il y a deux manières de paraitre supérieur : en montrant sa valeur ou en dévalorisant les autres.

Hors ligne

#3 Le 07/03/2013, à 10:11

jibe

Re : [RESOLU] libusb requires write access to USB device nodes...

Salut,

Je ne comprends plus... Voici ce que j'ai :

~ $ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 03f0:0205 Hewlett-Packard ScanJet 3300c
Bus 003 Device 002: ID 046d:c040 Logitech, Inc. Corded Tilt-Wheel Mouse
Bus 002 Device 009: ID 1267:0000 Logic3 / SpectraVideo plc 
~ $ ls -Al /dev/bus/usb/002/009
crw-rw-r-- 1 root root 189, 136 mars   7 09:38 /dev/bus/usb/002/009
~ $ ls -Al /dev/bus/usb/002/002
crw-rw-r--+ 1 root root 189, 129 mars   7 08:10 /dev/bus/usb/002/002
~ $ ls -Al /dev/bus/usb/003/002
crw-rw-r-- 1 root root 189, 257 mars   7 08:10 /dev/bus/usb/003/002

Comme on le devine :
- en 002/002, j'ai mon scanner
- en 003/002, ma souris
- en 002/009, un bras robotisé dont je me sers pour ces essais.

Tout est en root/root, alors que le scanner et la souris sont bien accessibles par tous les utilisateurs !!! Pourtant, de ce que je lis sur le web pour les autres distribs, les owners et groups changent selon les droits d'utilisation souhaités...

De plus, ma règle semble inefficace, alors que (tout au moins à ce niveau...) je n'en ai en principe pas d'autre qui l'écrase :

~ $ ls -Al /etc/udev/rules.d/
total 24
-rw-r--r-- 1 root root  863 nov.   7 23:00 70-persistent-cd.rules
-rw-r--r-- 1 root root  483 nov.   7 16:17 70-persistent-net.rules
-rw-r--r-- 1 root root  993 mars   5 15:27 90-usb-special-jb.rules
-rw-r--r-- 1 root root  887 mars   5 15:21 90-usb-special-jb.rules~
-rw-r--r-- 1 root root   50 déc.  10 15:19 ft-rockey.rules
-rw-r--r-- 1 root root 1157 avril  5  2012 README
~ $ cat /etc/udev/rules.d/ft-rockey.rules 
BUS=="usb", SYSFS{idVendor}=="096e", MODE=="0666"

Questions :

1 - Pourquoi scanner et souris qui sont root/root fonctionnent pour tous ?
1a - Et pourquoi pas mon bras robotisé ??? Après tout, puisque owner/group n'ont pas d'importance pour le reste, pourquoi ça en aurait pour lui ???
2 - La réponse à ma question 1 est probablement qu'il n'y a aucune règle affectant un owner/group différent. Mais pourquoi n'y a-t-il pas de règle, et comment cela fait-il pour fonctionner malgré tout avec tous les utilisateurs ? (bon, c'est vrai, on ne fait que lire, et les droits en lecture sont donnés à tous. Mais dans d'autres distribs, si le scanner n'est pas affecté à un groupe "scanners", seul root y a accès.)
2 - A quoi servent/comment fonctionnent ces règles sous Ubuntu, puisqu'une affectation à un autre groupe et un changement de mode restent sans effet ?
3 - Tout ça fonctionne normalement dans les autres distribs, tout au moins si j'en juge ce que je lis sur le web, pourquoi et en quoi ubuntu est-il différent ???


Il y a deux manières de paraitre supérieur : en montrant sa valeur ou en dévalorisant les autres.

Hors ligne

#4 Le 07/03/2013, à 11:36

jibe

Re : [RESOLU] libusb requires write access to USB device nodes...

Bon, j'avance un peu...

Si je mets comme règle

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666", GROUP="plugdev"

Ça fonctionne :

~ $ ls -Al /dev/bus/usb/002/
total 0
crw-rw-r--  1 root root    189, 128 mars   7 08:10 001
crw-rw-r--+ 1 root root    189, 129 mars   7 08:10 002
crw-rw-rw-  1 root plugdev 189, 142 mars   7 11:20 015

Les groupe et mode demandés sont bons, et je peux piloter mon bras robot sans être root.

Le problème est qu'ainsi, tout nouveau périphérique connecté prend ces nouvelles règles, et ce n'est pas souhaitable. Mais si je rajoute ne serait-ce que l'ID vendeur

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", SYSFS{idVendor}=="1267", MODE="0666", GROUP="plugdev"

la règle n'est plus prise en compte et ça ne marche plus :

~ $ ls -Al /dev/bus/usb/002/
total 0
crw-rw-r--  1 root root 189, 128 mars   7 08:10 001
crw-rw-r--+ 1 root root 189, 129 mars   7 08:10 002
crw-rw-r--  1 root root 189, 143 mars   7 11:21 016

Pourtant, mon ID vendeur est correct :

~ $ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 03f0:0205 Hewlett-Packard ScanJet 3300c
Bus 003 Device 002: ID 046d:c040 Logitech, Inc. Corded Tilt-Wheel Mouse
Bus 002 Device 016: ID 1267:0000 Logic3 / SpectraVideo plc 

C'est d'ailleurs celui que j'utilise dans le programme qui pilote le bras robot...

Pourquoi donc ma règle ne s'applique-t-elle plus dès que j'en restreins l'application ???


Il y a deux manières de paraitre supérieur : en montrant sa valeur ou en dévalorisant les autres.

Hors ligne

#5 Le 07/03/2013, à 15:06

jibe

Re : [RESOLU] libusb requires write access to USB device nodes...

RTFM !!!

C'était pourtant bien écrit de ne pas lire cette doc en diagonale roll

Il fallait tout simplement écrire la règle avec ATTR{idVendor} au lieu de SYSFS{idVendor} ! Je n'ai pas cherché bien plus loin, mais apparemment ATTR{idVendor} remplace sur Ubuntu SYSFS{idVendor} qui est utilisé sur les autres distributions et qu'on trouve couramment sur le web.

Je note ici un truc pas évident à trouver dans la doc sans une lecture attentive (j'ai cherché un moment...) : Pour trouver les caractéristiques du périphérique, il suffit de faire :

sudo udevadm info -a -p /chemin/du/périphérique

Tout bête, mais encore faut-il connaitre le /chemin/du/périphérique ! Pour un périphérique USB, voilà comment le trouver :
1 - Taper la commande lsusb et trouver le périphérique voulu. Supposons qu'il s'agisse du device 003 du bus 002.
2 - Taper la commande

sudo udevadm info -q path -n /dev/bus/usb/002/003

3 - Noter ce que renvoie la commande, par exemple

/devices/pci0000:00/0000:00:1d.0/usb2/2-2

4 - Utiliser ce paramètre pour taper la commande

sudo udevadm info -a -p /devices/pci0000:00/0000:00:1d.0/usb2/2-2

5 - Vous avez (enfin !) les caractéristiques complètes du périphérique, qui vous permettront de définir vos règles.

Merci à tous ceux qui m'ont aidé (bon, même si ça se limite à ceux qui ont écrit la doc, ça m'a quand même permis de trouver !) tongue


Il y a deux manières de paraitre supérieur : en montrant sa valeur ou en dévalorisant les autres.

Hors ligne

#6 Le 08/03/2013, à 09:36

jibe

Re : [RESOLU] libusb requires write access to USB device nodes...

Salut,

Un post de Esmars me fait prendre conscience que je n'ai pas bien détaillé comment faire prendre en compte les nouvelles règles.

Pour cela, il faut d'abord débrancher les périphériques concernés, puis lancer au choix l'une de ces commandes :

sudo udevadm control --reload-rules

ou

sudo service udev restart

On peut alors rebrancher les périphériques et les utiliser.

Attention : les règles ne sont appliquées que pour les périphériques nouvellement détectés, d'où la nécessité de débrancher préalablement, puis de rebrancher.

Dernière modification par jibe (Le 08/03/2013, à 09:44)


Il y a deux manières de paraitre supérieur : en montrant sa valeur ou en dévalorisant les autres.

Hors ligne

#7 Le 06/09/2016, à 21:34

Fenson

Re : [RESOLU] libusb requires write access to USB device nodes...

P'tain, on est en 2016, et en 2013 il y avait déja ce bug USB Root !....  yikes

3 ans et les développeurs endormis sur leur clavier n'ont pas réussis a faire un système simple !.... MDR !


Shuttle DS81 - Shuttle DH310 - Shuttle XH61V -  Ubuntu 18.04Lts 20.04lts- Compiz et son cube.
Aspire ONE - Asus E202S - Acer Portable - Ubuntu 16.04Lts - Compiz sans son cube...

Hors ligne

#8 Le 09/09/2016, à 20:20

uboops

Re : [RESOLU] libusb requires write access to USB device nodes...

Merci Jibe pour tes investigations (ça va peut être me servir)... et comme dit Fendon,  la gestion du service pour pour faire fonctionner correctement de simples  clés USB, ou autres periph., est bien compliquée pour pas grand chose.
C'est l'art du "Pourquoi faire simple quand on peut faire compliqué " ;-)


“Au lieu de faire que ce qui fût juste fût fort, on a fait que ce qui fût fort fût juste.” (Blaise Pascal).

Hors ligne

#9 Le 05/12/2016, à 21:40

jibe

Re : [RESOLU] libusb requires write access to USB device nodes...

Salut,

Désolé, je ne passe plus souvent par ici, et en plus je n'ai plus bien le problème en tête. J'espère que je ne vais pas dire de bêtises !

Si j'ai bonne mémoire (et/ou bien relu) :

  • Il s'agissait de périphériques peu standards (annoncé dès le début de mon premier post), entre autres un bras robotisé

  • J'avais lu la doc trop vite et zappé les passages intéressants pour mon cas

Donc, il ne s'agit pas d'un bug, simplement de périphériques non directement compatibles, j'ai d'ailleurs eu le même problème avec d'autres distribs. Dans ce cas, la bonne attitude à avoir n'est pas celle du consommateur mécontent (c'est bon pour ceux qui paient leur OS une fortune à celui qui a la plus grosse* !), mais :

  • Si on estime qu'il s'agit d'un bug ou d'un périphérique qui devrait être reconnu par la version officielle, au moins de signaler le bug ou vérifier que quelqu'un l'a déjà fait

  • Si on le peut, on cherche la solution (quitte à demander de l'aide) et on la partage

  • Si on estime que la doc est mal faite, on propose des améliorations

Ne pas oublier que les logiciels libres et les logiciels commerciaux privateurs procèdent de deux démarches et deux conceptions totalement différentes ! On ne peut pas avoir le beurre (un logiciel libre) et l'argent du beurre (un fournisseur, souvent riche et puissant, qu'on a payé à prix d'or - économie de la rareté appliquée à un produit copiable à l'infini - et à qui on est en droit d'exiger un fonctionnement irréprochable) !

Comme disait Gandhi : "Sois toi-même le changement que tu veux voir arriver dans le monde" !

* fortune, bien sûr ! Qui pourrait penser à autre chose pour mini mou ? big_smile wink


Il y a deux manières de paraitre supérieur : en montrant sa valeur ou en dévalorisant les autres.

Hors ligne