Comprendre les règles et les permissions udev dans libusb

J'ai eu un problème avec mon scanner. Xsane travaillait seulement en tant que root. En l'utilisant comme user normal, il n'a pas trouvé de périphériques. Ajouter l'user aux groupes saned ou scanner n'a pas aidé.

Finalement, j'ai résolu le problème en changeant

 # 'libusb' device nodes SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664" 

à

 # 'libusb' device nodes SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666" 

dans /lib/udev/rules.d/50-udev-default.rules

Cependant, je ne comprends pas pourquoi cela fonctionne et si elle a des effets secondaires négatifs. Je suppose que cela donne des permissions d'écriture à tous les users sur n'importe quel périphérique USB, mais je ne sais pas si et pourquoi cela est correct et pourquoi cela résout le problème du scanner.

Quelqu'un pourrait-il expliquer en détail pourquoi cela fonctionne et si elle a des effets secondaires.

Mon système est: ubuntu 12.04 , le scanner est un HP PSC 1200 all in one hplip est installé à partir du référentiel.

Il semble qu'Udev (qui est dans l'homme) gère les périphériques dynamics comme les périphériques USB lorsqu'ils sont branchés. Il les instanciera ensuite dans / dev quelque part. (Comme / dev / bus / usb / 002 dans mon cas). Ce nœud / dev doit avoir des permissions, Udev prend les permissions des files dans /lib/udev/rules.d/, il y a une syntaxe arcane qui correspond à un périphérique à une input.

Dans ce cas, quelque chose du sous-système usb avec un type de périphérique usb obtient le mode de file spécifié. (Autorisations standard, 664 est rw-rw-r–, 666 est rw-rw-rw-.) Donc, vous donnez tous et toutes les permissions d'écriture à tous les périphériques USB. Cela ne semble pas une bonne chose, si vous ne faites pas confiance à tous vos users. Si vous êtes le seul user, vous pouvez probablement vous faire confiance. Libusb semble vouloir des permissions d'écriture au nœud de périphérique USB pour faire sa chose, et refuse de faire n'importe quoi si ce n'est pas le cas. Cela ne semble pas tout à fait raison, car je ne fais qu'essayer de lire l'appareil.

Il est possible d'être plus précis avec les permissions, vous pouvez spécifier un périphérique par des choses comme le fournisseur USB (VID) et l'ID de produit (PID). Il serait donc possible de créer un file qui fonctionnerait uniquement pour votre scanner et de laisser tous les autres périphériques USB avec les permissions par défaut. Il y a une page sur Udev à https://wiki.archlinux.org/index.php/udev qui semble utile pour tout cela. Si vous créez un file qui commence par un nombre plus élevé, comme "60-my-usb-scanner.rules"

 SUBSYSTEM=="usb", ATTRS{idVendor}=="F1E2", ATTRS{idProduct}=="1F2E", MODE="0666" 

Cela devrait simplement définir les permissions pour le périphérique spécifié (VID = 0xF1E2, PID = 0x1F2E). Vous pouvez alors faire prendre conscience à Udev de ce changement en exécutant:

 udevadm control --reload-rules