Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#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

Haut de page ↑