web-dev-qa-db-fra.com

Comment autoriser un utilisateur autre que celui par défaut à utiliser le périphérique série ttyUSB0?

J'ai un système Ubuntu 11.10 avec 2 utilisateurs:

  • Le premier a été créé lors de l'installation
  • La seconde à la place a été créée après. Il appartient au groupe sudoers.

Maintenant, le problème est que lorsque la seconde tente d'utiliser un périphérique ttyUSB0, l'erreur suivante est renvoyée:

"Could not open serial port /dev/ttyUSB0"

J'ai pu le réparer en utilisant:

Sudo chown :second_user /dev/ttyUSB0

Cependant, lorsque je déconnecte l'appareil et le reconnecte, le problème se reproduit.

Est-il possible d'autoriser différents utilisateurs à accéder aux appareils? Je suppose que je dois ajouter l'utilisateur à un groupe spécifique. Actuellement, le propriétaire est root et le groupe est dialout. Cependant, je ne suis pas sûr du groupe et je ne sais pas comment ajouter l'utilisateur.

Merci!

33
Maverik

Comme vous l'avez remarqué, le périphérique /dev/ttyUSB0 possède le groupe dialoutname__. Tout ce que vous avez à faire est d’ajouter le second utilisateur au groupe dialoutname__:

Sudo adduser second_user dialout

second_user devra se déconnecter et se reconnecter pour que cela prenne effet.

45
Jeremy Kerr

Le moyen le plus simple:

sudoedit /etc/udev/rules.d/50-myusb.rules

Enregistrez ce texte:

KERNEL=="ttyUSB[0-9]*",MODE="0666"
KERNEL=="ttyACM[0-9]*",MODE="0666"

Débranchez le périphérique et rebranchez-le, et il devrait être en lecture/écriture à partir de n'importe quel utilisateur!

11
Orion Lawlor

Vous pouvez utiliser UDEV. C'est un système qui se déclenche à chaque fois que vous branchez ou débranchez un périphérique (entre autres choses). Cela permet d’écrire diverses choses, y compris la définition des autorisations.

Exécutez sudoedit /etc/udev/rules.d/50-ttyusb.rules et collez ceci ici:

KERNEL=="ttyUSB[0-9]*",NAME="tts/USB%n",SYMLINK+="%k",GROUP="uucp",MODE="0666"

Sauvegardez, quittez et rebranchez et vous devriez être opérationnel. Définir l'autorisation sur 666 permet à quiconque d'écrire sur le périphérique.

Je base ceci off cette page qui date d'il y a quelques années, mais quelque chose comme cela devrait fonctionner si Jeremy's solution ne fonctionne pas.

7
Oli

Fantastique - la solution UDEV donnée ici était le ticket qui me convenait.

J'ai installé le programme CS-F3020_F5010_F5020 d'Icom via Wine, j'ai créé le lien pour le port Com comme suit:

ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com1 but nothing. 

Ensuite, j'ai réalisé que je devais changer les autorisations sur/dev/ttyUSB0 pour me permettre d'y accéder. Cela fonctionne très bien jusqu'à ce que vous débranchiez/rebranchez la clé USB, puis vous devez modifier à nouveau les autorisations.

J'ai essayé d'ajouter mon utilisateur au groupe de numérotation, mais cela n'a pas résolu le problème pour une raison quelconque.

Utiliser UDEV résout la dernière pièce du puzzle. Maintenant, je peux programmer ma radio Icom sous Linux, brancher et débrancher le périphérique USB/série sans plus de tracas. Woohoo. Merci.

5
Tom

Les règles udev fonctionnent, mais elles ont, comme elles ont été écrites, le très mauvais effet secondaire de rendre tous les périphériques ttyUSB* accessibles à tous. Ce n'est pas bon car cela peut constituer un risque pour la sécurité en fonction des éléments présents sur le système.

Utilisez plutôt une règle udev plus sélective. Par exemple, j'ai un périphérique USB qui gère un ensemble de commutateurs. Lorsque dmesg est branché, je peux voir l’ID du fabricant et le code du produit (plus, même, dans ce cas, un numéro de série pour l’appareil). Je peux ajouter:

ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001"

aux lignes du noyau ci-dessus et la règle ne s’appliquera qu’à ce périphérique. Mieux encore, plutôt que d’affecter à la variable MODE, définissez également le groupe:

GROUP="whatever", MODE="0660"

alors seules les personnes du groupe 'whatever' auront un accès en écriture.

John Bowler

3
John Bowler