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

35

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 le second essaie d'utiliser un périphérique, ttyUSB0l'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 rootet le groupe est dialout. Cependant, je ne suis pas sûr du groupe et je ne sais pas comment ajouter l'utilisateur.

Merci!

Maverik
la source

Réponses:

48

Comme vous l'avez remarqué, l' /dev/ttyUSB0appareil a le groupe de dialout. Tout ce que vous avez à faire est d’ajouter le deuxième utilisateur au dialoutgroupe:

sudo adduser second_user dialout

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

Jeremy Kerr
la source
Merci Jeremy! Est-ce que cela fonctionne aussi pour l'accès ssh? Parce que lorsque j'accède au PC via SSH, je vois deux utilisateurs portant le même nom. Je suppose que l’un est l’utilisateur local et l’autre le ssh. Comment puis-je donner la propriété à l'utilisateur ssh?
Maverik
1
Cela permettra à second_user d'accéder au port série à partir de n'importe quel login, ssh ou local. Vous n'avez pas besoin d'attribuer la propriété à une connexion particulière de cet utilisateur.
Jeremy Kerr
2
Oui, tu as raison. Je devais me déconnecter puis me reconnecter pour avoir l'accès à ssh.
Maverik
Pour les sessions d'un utilisateur connecté automatiquement, vous devez redémarrer l'ordinateur et pas seulement vous reconnecter au système X Window. Observé avec Ubuntu 19.04.
tanius
12

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 l'appareil et rebranchez-le, et il devrait être lu / écrit par n'importe quel utilisateur!

Orion Lawlor
la source
Fonctionne en 14.04 pour un appareil fait maison dans une prise ttyACM. Merci. +1
Modèle non standard
N'avez-vous pas besoin de faire cela avant le replug pour recharger les règles? sudo udevadm control --reload?
Alexis Paques
En fonction du système de fichiers stockant votre / etc / udev et de la version d’udev que vous possédez, vous devrez peut-être recharger explicitement. Mais sur la plupart des machines que j'ai utilisées, udev semble le comprendre automatiquement (en utilisant inotify).
Orion Lawlor
Ce n'est vraiment pas comme ça que ça doit être fait. Les périphériques série USB doivent appartenir au groupe de numérotation ou similaire, et l'utilisateur doit y être ajouté. Ce que vous proposez aurait toutefois un sens pour d’autres types de périphériques USB
Chris Stratton
7

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.

Courez sudoedit /etc/udev/rules.d/50-ttyusb.ruleset 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 me base sur cette page qui date d'il y a quelques années, mais quelque chose comme cela devrait fonctionner si la solution de Jeremy ne fonctionne pas.

Oli
la source
1
Cela a fonctionné pour moi, c’est-à-dire que j’ai utilisé les règles udev, mais j’ai modifié la syntaxe pour correspondre à mon cas. linux.m2osw.com/sane-cannot-find-any-scanners - notez que si vous utilisez MODE = "0666", vous n'avez probablement pas besoin de GROUP. Un seul ou l'autre serait utile.
Alexis Wilke
5

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 problème. Woohoo. Merci.

À M
la source
3

Les règles udev fonctionnent, mais elles ont, comme elles ont été écrites, le très mauvais effet secondaire de rendre tous les ttyUSB*appareils accessibles à tous. Ce n'est pas bon, car cela peut constituer un risque pour la sécurité, selon ce qui se trouve 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 MODEseule variable, définissez également le groupe:

GROUP="whatever", MODE="0660"

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

John Bowler

John Bowler
la source