Ändern der Berechtigungen für die serielle Schnittstelle


54

Ich verwende die Arduino-IDE in Ubuntu und habe Probleme mit der seriellen Schnittstelle. Es hat in der Vergangenheit funktioniert, aber aus Gründen, die möglicherweise unnötig sind, hatte ich das Bedürfnis, den Besitz einiger Dateien vom Root-Besitz in den Besitz meiner Benutzer zu ändern.

Dadurch funktionierte die IDE ordnungsgemäß, aber ich konnte den richtigen seriellen Anschluss nicht mehr verwenden. Im dev-Ordner ist der Port, den ich benötige, als Erlaubnis 166 aufgeführt. Jemand (der nicht mehr in der Nähe ist, um mir zu helfen) hat die Erlaubnis gegen 666 ausgetauscht, wodurch alles wunderbar funktioniert hat.

Es wurde jedoch zurückgesetzt, sobald ich meinen Computer neu gestartet habe und jetzt versuche, den Befehl zu verwenden:

sudo chmod 666 ttyACM0

nichts passiert. Keine Fehlermeldungen, aber auch keine Berechtigungsänderung.

Wie kann ich es ändern und wie kann ich es dauerhaft ändern.

Ich entschuldige mich, wenn diese Frage zu simpel oder unklar ist, ich ein Ubuntu Noob bin und ich würde Feedback nicht missbilligen!


1
sudo chmod 666 / dev / ttyACM0 Dies war der einzige Vorschlag auf dieser Seite, der in meiner 14.04 Beta2-Live-Umgebung funktioniert hat. Vielen Dank!

Antworten:


76

Das Problem mit den Berechtigungen für /dev/ttyACM0kann dauerhaft gelöst werden, indem Sie sich der dialoutGruppe hinzufügen . Sie müssen sich abmelden und dann wieder anmelden, bevor die Gruppenänderung erkannt wird.

Sie können dies mit tun sudo usermod -a -G dialout $USER


Ich habe davon erfahren, als Arduino IDE gebeten hat, root zu geben, um sich der "Dailout-Gruppe" hinzuzufügen. Jetzt weiß ich was es ist.
Ufoguy

Ich habe gerade einen Pulse-Eight USB-CEC-Adapter für meinen neuen Fernseher gekauft und festgestellt, dass er mit Kodi in Ubuntu anfangs nicht funktioniert. Nach dem Überprüfen des Absturzprotokolls und dem Durchsuchen der Fehlermeldung "ERROR: CecLogMessage - Fehler beim Öffnen der seriellen Schnittstelle '/ dev / ttyACM0': Berechtigung verweigert" wurde diese Seite angezeigt. Dank Ihnen (und Don Kirkby, unten - das funktioniert auch) konnte ich das Problem sofort beheben.
Rich.T.

Die Antwort von "user247020" gab mir auch eine andere Lösung: Öffnen Sie das GUI-Tool "Benutzer und Gruppen" und machen Sie sich selbst zum "Administrator". Dadurch werden Sie unter anderem zur Gruppe "Einwählen" (dh "Modems verwenden") hinzugefügt.
Rich.T.

usermod -a -G dialout pi funktioniert ok, nach sudo chgrp dialout / dev / ttyS0 und funktioniert gut, aber wenn ich neu starte, ist die gesamte Konfiguration verloren. Ich bin auf Himbeer-Pi 3
J261

Fügen Sie jeden Befehl hinzu, den Sie zum Wiederherstellen eines Startskripts benötigen. Also bash oder / etc / profile oder init.
Rinzwind

20

Ich konnte Rinzwinds Vorschlag nicht zum Laufen bringen , weil er sich darüber beschwerte, dass das Benutzerkonto bereits existiert. Stattdessen habe ich diesen Befehl verwendet, um einen vorhandenen Benutzer ( terrik) zu einer vorhandenen Gruppe ( dialout) hinzuzufügen , wie im Ubuntu-Hilfe-Wiki beschrieben .

sudo adduser terrik dialout

Dieser Befehl ist auch nützlich, um Ihre aktuellen Gruppen aufzulisten, obwohl Sie sich, wie Rinzwind sagt, abmelden und anmelden müssen, bevor die serielle Schnittstelle Sie einlässt.

groups terrik

10

Ich konnte Terriks Antwort nicht zum Laufen bringen , aber ich könnte es, wenn ich den Pfad für etwas anpassettyACM0 .

sudo chmod 666 /dev/ttyACM0

Würde als Kommentar posten, aber ich habe noch nicht die Privilegien dafür ...


1
Die Berechtigungen scheinen zurückgesetzt zu werden, wenn Sie Arduino wieder entfernen und erneut einstecken.
user1063287

funktioniert nicht. :(
Freddy

es funktioniert auch. erfordert aber udev-regel, um es beim repplugging erneut zuzulassen
pylover

Ich habe es versucht sudo chmod 666 /dev/ttyACM0und es funktioniert nicht beim erneuten Starten. Hat jemand eine Lösung?
user1063287

Hmm peepz das funktioniert .... Füge den Befehl einem Startskript hinzu. (/ Dev wird beim Booten neu erstellt, so dass Sie diesen Befehl bei jedem Booten wiederholen müssen)
Rinzwind

10

Eine andere Möglichkeit besteht darin, eine Regeldatei im /etc/udev/rules.d/Verzeichnis zu erstellen . Ich hatte ein ähnliches Problem und habe 50-myusb.rulesim obigen Verzeichnis eine Datei mit folgendem Inhalt erstellt:

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

Beachten Sie, dass dies jedem Gerät, das mit dem ttyACM-Socket verbunden ist, Lese- / Schreibrechte gewährt. Wenn Sie nur ein bestimmtes Gerät benötigen, um Lese- / Schreibberechtigungen zu erhalten, müssen Sie auch idVendorund aktivieren idProduct. Sie können diese finden, indem Sie den lsusbBefehl zweimal ausführen, einmal ohne angeschlossenes Gerät und einmal, wenn es angeschlossen ist, und dann die zusätzliche Zeile in der Ausgabe beobachten. Dort wirst du sowas sehen Bus 003 Device 005: ID ffff:0005. In diesem Fall idVendor = ffffund idProduct = 0005. Dein wird anders sein. Dann ändern Sie die Regeldatei in:

ACTION=="add", KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="ffff", ATTRS{idProduct}=="0005", MODE="0666"

Jetzt erhält nur dieses Gerät die Berechtigungen. Lesen Sie dies , um mehr über das Schreiben von udev-Regeln zu erfahren.


2

Versuchen Sie, unter System / Benutzer und Gruppen das Kontrollkästchen für Ihren Benutzernamen in der TTY-Gruppe zu aktivieren.


[Errno 13] Permission denied: '/dev/ttyACM0'. Neben der ttyGruppe ist der Benutzer auch in der dialoutGruppe. Linux Mint 17.1.
user1063287

1
@ user1063287 Trysudo chmod a+rw /dev/ttyACM0
Vladimir S.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.