Das Arduino-Programm funktioniert nur, wenn es als root ausgeführt wird

19

Das Hochladen einfacher Skizzen scheint zu funktionieren, wenn ich das Arduino-Programm als root ( sudo) ausführe . Ich möchte es als normaler Benutzer ausführen. Hat jemand vor dem gleichen Problem gestanden und es behoben?

Folgendes habe ich erhalten lsusb:

$ lsusb
Bus 002 Device 022: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)

Und das Arduino-Programm identifiziert es als /dev/ttyACM0. Hier sind die Berechtigungen:

$ ls -l /dev/ttyACM0 
crw-rw---T 1 root dialout 166, 0 Mar 14 22:03 /dev/ttyACM0

Hier ist die Ausgabe von id

groups=1000(abhiram),20(dialout),24(cdrom),25(floppy),29(audio),
30(dip),44(video),46(plugdev),105(scanner),110(bluetooth),112(netdev)

Wenn ich als normaler Benutzer eine Skizze aus den Beispielen hochlade, tritt dieser Fehler auf:

avrdude:stk500_recv(): programmer not responding

Anregungen sind willkommen.

Fiebertraum
quelle
Sehen Sie, ob dies hilft, Abschnitt "SET THE PERMISSION"
alexan_e
4
Und +1 für das Nicht-Akzeptieren der Situation, um die IDE als Root auszuführen, aber um herauszufinden, wie das Problem richtig gelöst werden kann.
jippie
Was ist der genaue Fehler, den Sie erhalten, wenn Sie versuchen, die IDE unter einem nicht privilegierten Benutzer auszuführen? Möglicherweise müssen Sie die ausführliche Ausgabe im PreferencesMenü aktivieren .
Jippie
Stellen Sie sicher, dass Sie eine Verbindung zum richtigen Gerät herstellen, indem Sie den Stecker ziehen, einige Sekunden warten, dann erneut einstecken und dann die Ausgabe der dmesgregistrierten Gerätedatei überprüfen .
Jippie
Überprüft, dass das Gerät ordnungsgemäß als erkannt wird /dev/ttyACM0: USB ACM device. Es scheint mir also kein Problem zu sein. Auf der anderen Seite scheinen die Protokolle vom Kompilieren und Hochladen (mussten in den Einstellungen aktiviert werden) vielversprechend. Ich kann sie einfach nicht aus dem Arduino-Programm kopieren :(. (Vielleicht schreiben sie irgendwo in eine Datei?)
feverDream

Antworten:

13

Die einfachste Lösung besteht darin, sich der dialoutGruppe hinzuzufügen .

Notieren Sie sich zuerst die Ausgabe von id. Speichern Sie es in einer Datei (nicht in, /tmpda dies bei einem Neustart bereinigt wird). Wenn Sie sich die Ausgabe ansehen, werden Sie feststellen, dass Ihr Benutzer für mehrere Gruppen angemeldet ist und diese Gruppen zusätzliche Berechtigungen auf dem System darstellen. Standardmäßig ist Ihr Arduino der Gruppe zugewiesen, dialoutda er als serielle Schnittstelle registriert ist und in der Vergangenheit häufig verwendet wurde, um ... über ein Modem zu wählen.

Geben Sie dialoutden folgenden Befehl ein, um sich der Gruppe hinzuzufügen :

sudo usermod -a -G dialout $USER

Vergessen Sie nicht das -aFlag (zum Anhängen von Gruppen anstatt zum Ersetzen), da Sie sonst ganz andere Probleme haben. Dies ist der Grund, warum Sie eine Kopie der idAusgabe in eine Datei erstellen. Wenn Sie also Fehler machen, wissen Sie zumindest, wie Ihr Benutzer zuvor konfiguriert wurde.

Dann melden Sie sich ab und wieder an und es sollte von diesem Punkt aus funktionieren.

Optional können Sie die Ausgabe doppelt mit der idzuvor gespeicherten Ausgabe vergleichen.

jippie
quelle
danke @jippie, für die nachdenkliche Antwort. Ich habe mich der dialoutGruppe hinzugefügt , aber das Problem scheint immer noch zu bestehen. Ich habe meine Frage mit der Ausgabe des idBefehls geändert .
FeverDream
Mein Eindruck von Ihrem Update ist, dass sich die genaue Ursache des Problems auf die nächste Ausgabe verlagert hat. Sie sind auf dem Weg, es zu lösen. Was passiert wenn du cat /dev/ttyACM0? Wirft es einen Fehler?
Jippie
Nein, die Gerätedatei scheint leer zu sein, wenn ich cates.
FeverDream
Leer ist OK, solange keine Fehlermeldung angezeigt wird.
Jippie
9

Der oft wiederholte Rat, "einfach sudo usermod -aG dialout <username>nie für mich gearbeitet zu haben, und ich habe endlich herausgefunden, warum. Auf meinem Computer /dev/ttyUSB0ist von der Gruppe serialund nicht dialout, also hat das Hinzufügen meines Benutzernamens dialoutnichts zu tun.

# ls -l
# crw-rw---- 1 root serial 188, 0 Mar 31 20:52 /dev/ttyUSB0
                    ^^^^^^ (group-name)

Endlich: sudo usermod -aG <group-name> <username>Repariert es für mich.

Peinlich, dies auch ausdrücklich erwähnt hier unter „SET DER GENEHMIGUNG“. Seufzer.

hoosierEE
quelle
Ja, es lohnt sich, die tatsächliche Eigentümergruppe zu überprüfen. Außerdem kann die Gerätedatei entweder eine ttyUSB # oder eine ttyACM # (oder theoretisch alles) sein, je nach Kartentyp, Kerneltreiber und letztendlich Konfiguration von udev oder was auch immer die Knoten erstellt.
Chris Stratton
Es ist auch bei arduino.cc/en/Guide/Linux#toc6
Roberto Tyley
0

Das passiert mir. In meinem Fall hatte ich die Version von Arduino aktualisiert und scheint, dass die Voreinstellungsdatei das Problem verursacht hat. Löschen Sie einfach die Datei ~ / .arduino / preferences.txt (bei geschlossener Arduino IDE).

Schritte:

  1. Schließen Sie Arduino IDE
  2. führe dies aus:

    rm ~ / .arduino / preferences.txt

  3. Starten Sie Arduino IDE

Das hat bei mir funktioniert, hoffe es funktioniert bei jemand anderem. Ich verwende Linux Mint 17 und habe ein Upgrade von Arduino 1.05 auf Arduino 1.06 durch Extrahieren der Arduino IDE durchgeführt. Ich verwende nicht die im Repo enthaltene. (Natürlich, nachdem Sie Ihren Benutzer der entsprechenden Gruppe hinzugefügt haben, wie von anderen erwähnt, aber wenn das nicht hilft, versuchen Sie es)

soynerdito
quelle
Möglicherweise hängt dies damit zusammen, dass Sie beim Ausführen von Tools als Root temporäre, Konfigurations- oder Projektdateien hinterlassen können, die Ihr Ordinay-Konto nicht ändern oder bereinigen kann.
Chris Stratton