Wie erlaube ich einem Nicht-Standardbenutzer, das serielle Gerät ttyUSB0 zu verwenden?

34

Ich habe ein Ubuntu 11.10-System mit 2 Benutzern:

  • Der erste wurde während der Installation erstellt
  • Die zweite wurde stattdessen nach erstellt. Es gehört zur sudoers Gruppe.

Das Problem ist nun, dass beim zweiten Versuch, ein Gerät zu verwenden, ttyUSB0der folgende Fehler zurückgegeben wird:

"Could not open serial port /dev/ttyUSB0"

Ich konnte es beheben mit:

sudo chown :second_user /dev/ttyUSB0

Wenn ich jedoch das Gerät vom Computer trenne und es wieder anschließe, tritt das Problem erneut auf.

Gibt es eine Möglichkeit, verschiedenen Benutzern den Zugriff auf die Geräte zu ermöglichen? Ich nehme an, ich muss den Benutzer einer bestimmten Gruppe hinzufügen. Derzeit ist der Besitzer rootund die Gruppe ist dialout. Allerdings bin ich mir bei der Gruppe nicht sicher und weiß nicht, wie ich den Benutzer hinzufügen soll.

Vielen Dank!

Maverik
quelle

Antworten:

47

Wie Sie bemerkt haben, hat das /dev/ttyUSB0Gerät die Gruppe von dialout. Sie müssen lediglich den zweiten Benutzer zur dialoutGruppe hinzufügen :

sudo adduser second_user dialout

second_user muss sich abmelden und erneut anmelden, damit dies wirksam wird.

Jeremy Kerr
quelle
Vielen Dank, Jeremy! Funktioniert das auch für ssh-Zugriffe? Denn wenn ich über ssh auf den PC zugreife, sehe ich zwei Benutzer mit demselben Namen. Ich nehme an, dass einer der lokale Benutzer und der andere der SSH ist. Wie kann ich dem ssh-Benutzer das Eigentum geben?
Maverik
1
Dadurch kann second_user von jedem Login, ssh oder lokal auf den seriellen Port zugreifen. Sie müssen einem bestimmten Login dieses Benutzers keinen Besitz zuweisen.
Jeremy Kerr
2
Ja, du hast recht. Ich musste mich abmelden und dann wieder anmelden, um Zugriff auf ssh zu haben.
Maverik
Für Sitzungen eines Benutzers, der automatisch angemeldet wurde, müssen Sie den Computer neu starten, nicht nur, um sich erneut bei X Window System anzumelden. Beobachtet mit Ubuntu 19.04.
Tanius
12

Der einfache Weg:

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

Speichern Sie diesen Text:

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

Trennen Sie das Gerät vom Stromnetz und schließen Sie es wieder an. Es sollte von jedem Benutzer gelesen / geschrieben werden können!

Orion Lawlor
quelle
Funktioniert in 14.04 für selbstgebaute Geräte im ttyACM-Sockel. Vielen Dank. +1
NonStandardModel
Müssen Sie dies nicht vor dem Replug tun, um die Regeln neu zu laden? sudo udevadm control --reload?
Alexis Paques
Abhängig davon, in welchem ​​Dateisystem / etc / udev gespeichert ist und über welche Version von udev Sie verfügen, müssen Sie möglicherweise explizit neu laden. Aber auf den meisten Maschinen, die ich benutzt habe, scheint udev es automatisch herauszufinden (mit inotify).
Orion Lawlor
Das ist wirklich nicht so, wie es gemacht werden soll. Serielle USB-Geräte sollten zur Einwählgruppe oder einer ähnlichen Gruppe gehören, und der Benutzer sollte dazu hinzugefügt werden. Was Sie vorschlagen, ist jedoch für andere Arten von USB-Geräten sinnvoll
Chris Stratton,
7

Sie könnten UDEV verwenden. Es ist ein System, das jedes Mal ausgelöst wird, wenn ein Gerät (unter anderem) ein- oder ausgesteckt wird. Mit diesem Skript können Sie verschiedene Aktionen ausführen, darunter das Festlegen von Berechtigungen.

Führen Sie das aus sudoedit /etc/udev/rules.d/50-ttyusb.rulesund stecken Sie es hinein:

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

Speichern, beenden und erneut testen, und Sie sollten einsatzbereit sein. Wenn Sie die Berechtigung auf 666 setzen, kann jeder auf das Gerät schreiben.

Ich beziehe mich auf diese Seite, die von vor ein paar Jahren stammt, aber so etwas sollte funktionieren, wenn Jeremys Lösung dies nicht tut.

Oli
quelle
1
Das hat bei mir funktioniert, das heißt, ich habe die udev-Regeln verwendet, aber die Syntax wurde so geändert, dass sie meinem eigenen Fall entspricht. linux.m2osw.com/sane-cannot-find-any-scanners - Beachten Sie, dass Sie bei Verwendung von MODE = "0666" die GROUP wahrscheinlich nicht benötigen. Nur das eine oder andere wäre sinnvoll.
Alexis Wilke
5

Fantastisch - die hier angegebene UDEV-Lösung war das Ticket für mich.

Ich habe das Programm CS-F3020_F5010_F5020 von Icom über Wine installiert und den Link für den Com-Port wie folgt erstellt:

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

Dann wurde mir klar, dass ich die Berechtigungen für / dev / ttyUSB0 ändern musste, um darauf zugreifen zu können. Das funktioniert sehr gut, bis Sie den USB-Anschluss trennen / wieder anschließen und dann die Berechtigungen erneut ändern müssen.

Ich habe versucht, meinen Benutzer zur Wählgruppe hinzuzufügen, aber das hat das Problem aus irgendeinem Grund nicht gelöst.

Die Verwendung von UDEV löst das letzte Puzzleteil. Jetzt kann ich mein Icom-Radio unter Linux programmieren, das USB- / Seriell-Gerät ohne großen Aufwand anschließen und entfernen. Woohoo. Vielen Dank.

Tom
quelle
3

Die udev-Regeln funktionieren, aber wie geschrieben haben sie den schlimmen Nebeneffekt, dass alle ttyUSB*Geräte für alle zugänglich sind. Dies ist nicht gut, da dies ein Sicherheitsrisiko darstellen kann, je nachdem, was sich noch auf dem System befindet.

Verwenden Sie stattdessen eine selektivere udev-Regel. Zum Beispiel habe ich ein USB-Gerät, das eine Reihe von Schaltern bedient. Von dmesg, wenn es eingesteckt ist, sehe ich die ID des Herstellers und den Produktcode (plus, in diesem Fall sogar eine Seriennummer für das Gerät). Ich kann hinzufügen:

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

auf die obigen Kernel-Zeilen und die Regel gilt nur für dieses Gerät. Noch besser, als nur der MODEVariablen zuzuweisen, legen Sie auch die Gruppe fest:

GROUP="whatever", MODE="0660"

dann erhalten nur Personen in der Gruppe ' whatever' Schreibzugriff.

John Bowler

John Bowler
quelle