Configurer udev pour modifier les autorisations sur le périphérique HID USB?

21

J'ai une balance USB, un USB HID. Actuellement, lorsqu'il est branché, les autorisations permettent uniquement au superutilisateur d'y accéder. Comment puis-je configurer udev pour permettre à quiconque d'accéder à cet appareil? J'ai les ID de fournisseur et de produit, mais je voudrais plutôt les faire correspondre en fonction du type HID.

En ce moment, j'ai du mal à trouver une règle existante qui s'applique à cela (j'ai convoité pour "cacher" dans /lib/udev/rules.det /etc/udev/rules.d, entre autres).

erjiang
la source

Réponses:

21

Normalement, cela se fait en ajoutant à /etc/udev/rules.dun fichier peut-être nommé 50-usb-scale.confavec un contenu comme celui-ci:

SUBSYSTEM=="usb", ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2", MODE="0666"

HEX1 et HEX2 sont remplacés respectivement par le fournisseur et l'ID du produit.

Pour faire correspondre le type d'interface à la place, vous pouvez essayer de le remplacer ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2"par une correspondance pour bInterfaceClassêtre 03(HID):

SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="03", MODE="0666"

Mais attention, cela attrapera aussi les souris et les claviers.

Kees Cook
la source
4
Sur Ubuntu 14.04, vous devez utiliser MODE: = "0666", sans les deux points, la règle ne fait rien.
EdwinW
2
Le 14.04, ce fichier doit avoir une .rulesextension. Un fichier avec une .confextension ne fonctionnera pas.
cherno
1
utiliser lsusb -vvvpour obtenir l'idProduct et idVendor
Xavier13
2
Étant donné que cette question est assez populaire dans la sortie Google ... Je pense que ce devrait être ATTRS, pas ATTR - au moins ce changement l'a corrigé pour moi.
infthi
2
Le 14.04.5 LTS, j'ai trouvé: lsusbc'est un bon début pour voir ce qui est connecté et les identifiants. idVendoret les idProductcorrespondances semblent sensibles à la casse , donc l'ID DA77ne fonctionne pas pour moi mais le da77fait. (Diagnostic pratique:, udevadm info --attribute-walk /dev/bus/usb/008/023bus 008 périphérique 023 mon exemple; lsusbpour le vôtre.) Après avoir ajouté une règle, sudo udevadm control --reload-rulespuis sudo udevadm triggerévite le redémarrage: les modifications sont quelques secondes après . ATTR vs ATTRS n'a fait aucune chance. Mon fichier .rules lit comme suit: SUBSYSTEM=="usb", ATTR{idVendor}=="da77", ATTR{idProduct}=="d12e", GROUP="users", MODE="0666".
El Zorko
7

Juste pour le résumé:

Vous pouvez filtrer pour:

  • ID Vendeur
  • idProduct
  • en série

Et utilise:

== Comparer pour l'égalité.

! = Comparer l'inégalité.

= Attribuer une valeur à une clé. Les clés qui représentent une liste sont réinitialisées et seule cette valeur unique est affectée.

+ = Ajoutez la valeur à une clé contenant une liste d'entrées.

: = Attribuer enfin une valeur à une clé; interdire toute modification ultérieure.

Vous pouvez donner à un périphérique spécifique un nouveau chemin spécifique dans / dev / ...
Exemple:

KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", ATTRS{serial}=="1234567", GROUP="cdrom", OWNER="user28", MODE="0640", SYMLINK+="myhid"

Résulte en:

Vous pouvez accéder à l'appareil via '/ dev / hiddevx' ou via '/ dev / myhid' facilement, chaque utilisateur du groupe 'cdrom' peut lire à partir de l'appareil. Le propriétaire 'user28' peut lire et écrire.

ou le plus simple:

KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", MODE="0666"

Résultats: chaque utilisateur peut accéder à tous les masques du fournisseur 0x16c0

Pour plus de détails, voir: Docs

rundekugel
la source
2
:=n'est pas pour les comparaisons. Les documents indiquent "Attribuer une valeur à une clé, enfin; interdire toute modification ultérieure".
Lucas
5

Si vous devez modifier (comme moi) les ttyACM0autorisations, voici mes paramètres:

KERNEL=="ttyACM0", MODE="0777"

Il a échoué lorsque j'ai essayé de spécifier le fournisseur et l'ID du produit. Je ne suis pas sûr pourquoi.

Rodo
la source
Oui, l'option Kernel fonctionne pour la plupart des appareils HID, mieux que celle du sous-système USB
Muriuki David
2

Si c'est un appareil HIDRAW, vous devez

chmod 0666 /dev/hidrawX

où X est le numéro de périphérique caché, par exemple hidraw0. tu peux faire

ls /dev/hid*

pour voir une liste :) Ou tout simplement faire

sudo chmod 0666 /dev/hidraw*

à définir pour tous les appareils cachés, probablement déconseillé.

Muriuki David
la source
2

Mise à jour / clarification d'Ubuntu 18.04:

La réponse de Kees Cook est proche mais nécessite 2 changements pour fonctionner en 18.04 (la version actuelle et une seule sur laquelle j'ai testé cela).

  1. Trouvez votre idVendor et idProduct avec lsusb .
    • Ce seront les 2 valeurs hexadécimales après "ID", séparées par deux points. J'ajoute un scanner. lsusb m'a donné:
      Bus 001 Périphérique 011: ID 04b8: 014a Seiko Epson Corp. 
  2. En tant que root, ajoutez un fichier à /etc/udev/rules.d
    • Quelque chose comme 50 usb-epsonscanner.rules
    • L'extension doit être ".rules"  
  3. Dans ce fichier, ajoutez:
    SOUS-SYSTÈME == "usb", ATTRS {idVendor} == "04b8", ATTR {idProduct} == "014a", MODE = "0666"
    Mais avec vos valeurs hexadécimales idVendor et idProduct.
    • Notez que c'est "ATTRS" et non "ATTR".
  4. Reconnectez-vous. Pas besoin de redémarrer.
gatohaus
la source
ATTRSà la fois pour le fournisseur et l'ID de produit? Votre exemple de code est alors incorrect (tout comme vous déclarez deux lignes plus tard).
néo post moderne
Juste le deuxième est ATTR. Fonctionne ici. Je suppose que c'est une erreur qui pourrait changer sans avertissement.
gatohaus