Arduino: Die Befehlszeile erfordert X11

Erstellt am 1. Apr. 2014  ·  45Kommentare  ·  Quelle: arduino/Arduino

Ich möchte die CLI in Arduino 1.5 auf einem kopflosen Raspberry Pi verwenden (Zugriff nur über SSH, keine X11-Umgebung), um eine kontinuierliche Integrationsplattform zu erstellen.

Beim Aufruf von arduino in der Befehlszeile beschwert sich Java, dass die X11-Umgebung nicht festgelegt und erforderlich ist (was für CLI-Programme nicht erforderlich sein sollte).

CLI-Ausgabe:

$ arduino --verify foo.ino
Exception in thread "main" java.lang.ExceptionInInitializerError
    at processing.app.Base.main(Base.java:113)
Caused by: java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
    at sun.awt.HeadlessToolkit.getMenuShortcutKeyMask(HeadlessToolkit.java:231)
    at processing.core.PApplet.<clinit>(Unknown Source)
    ... 1 more
zsh: exit 1     arduino --verify foo.ino
CLI IDE Bug

Hilfreichster Kommentar

Wenn Sie dies schließen, dokumentieren Sie bitte BLATANT , dass der "CLI" -Modus für den Arduino-Editor + die Makro-Schaltfläche eigentlich kein CLI-Modus ist.

Ich habe nur eine Menge Zeit verschwendet und Cruft im Wert von 220 MB installiert, nur um festzustellen, dass der CLI-Modus vollständig fehlerhaft ist und tatsächlich nur ein GUI-Modus ohne einige Draw-Aufrufe ist.

Die Tatsache, dass Sie eine funktionierende X11-Installation benötigen, sollte in Fettdruck oben auf den offiziellen Dokumentenseiten angezeigt werden, die darauf verweisen, z. B. http://playground.arduino.cc/Learning/CommandLine

Alle 45 Kommentare

Dies scheint mit # 1970 verwandt zu sein, aber es ist wahrscheinlich ein separates Problem. Ich werde dies auf meine Liste setzen, um es zu untersuchen, danke für die Berichterstattung.

@matthijskooijman

Wenn ich etwas mehr darüber nachdenke, denke ich, dass dies nicht einfach zu beheben sein wird. Im Moment, wenn die CLI-Befehle ausgeführt werden, erfolgt die gesamte normale Initialisierung normal, mit Ausnahme des Erstellens und Anzeigens des Fensters. Um dies zu beheben, müssten wir den GUI-Code umgestalten, um weniger mit der Kompilierungsfunktion gekoppelt zu sein, was nicht sehr einfach sein wird. Wir sollten dies sowieso irgendwann tun, aber dies wird wahrscheinlich einen erheblichen Aufwand erfordern.

Ich möchte kommentieren, dass ich das gleiche Problem habe und gerne die Kompilierungs- und Upload-Befehle über SSH (ohne X11) ausführen kann.

Hallo matthijskoijman gleiches Problem auf einer Debian Virtual Machine ohne GUI, ich habe versucht, arduino-mk zu verwenden, aber funktioniert sowieso nicht ...

Gleiches Problem mit 1.5.8 auf Debian Wheezy (Raspbian), das in einem Raspberry Pi ausgeführt wird.

Gleiches Problem - Versuch, eine kontinuierliche Integration auf einem Jenkins OS X-Knoten durchzuführen, um Arduino-Dateien zu überprüfen, aber es muss kopflos sein. Ich habe versucht , Ino , aber es scheint ziemlich veraltet. Gibt es in der Zwischenzeit eine andere Problemumgehung? Ich habe von Bii Hive gehört , ich werde es auch versuchen, aber alle anderen Empfehlungen sind willkommen.

Prost,
Raquel

Wir benutzen ständig Jenkins. Um die Anforderungen der IDE zu umgehen, haben wir https://wiki.jenkins-ci.org/display/JENKINS/Xvnc+Plugin installiert

Vielen Dank @ffissore , ich werde es versuchen.

Tut mir leid, wenn dies etwas vom Thema abweicht. @ffissore , Auf welcher Plattform läuft dieses Plugin? Ich versuche, die Arduino-Überprüfung auf einem Jenkins-Mac-Knoten zu testen, und nach langem Konfigurieren und Umgehen stecke ich fest.

Auf dem Mac verwenden wir dieses Plugin nicht, da der Knoten über Java Web Start gestartet wird. Dadurch kann der Java-Prozess auf dem Mac-Knoten auf die Anzeige zugreifen. In der Tat wird von Zeit zu Zeit die IDE angezeigt und führt ihre Funktionstests aus

Ich bin mir nicht sicher ob ich das verstehe. Bedeutet das, dass es unmöglich ist, dies auf einem Mac-Knoten zu testen? :(

Ganz im Gegenteil. Wir machen es die ganze Zeit. Sie müssen den Mac-Knoten jedoch ordnungsgemäß starten. Ich erinnere mich nicht, welches Tutorial ich zum Einrichten verwendet habe, aber das Ergebnis ist, dass unser Mac-Hauptbenutzer eine Start-App "Start Jenkins" hat, die über Java Web Start eine Verbindung zum Master herstellt

Oh, ich verstehe. Ich werde es googeln! Vielen Dank!

Schließen als Wontfix. Die Reparatur würde die Demontage der IDE erfordern. Wir machen jeden Tag kleine Schritte, können aber keinen Zeitplan festlegen

Wenn Sie dies schließen, dokumentieren Sie bitte BLATANT , dass der "CLI" -Modus für den Arduino-Editor + die Makro-Schaltfläche eigentlich kein CLI-Modus ist.

Ich habe nur eine Menge Zeit verschwendet und Cruft im Wert von 220 MB installiert, nur um festzustellen, dass der CLI-Modus vollständig fehlerhaft ist und tatsächlich nur ein GUI-Modus ohne einige Draw-Aufrufe ist.

Die Tatsache, dass Sie eine funktionierende X11-Installation benötigen, sollte in Fettdruck oben auf den offiziellen Dokumentenseiten angezeigt werden, die darauf verweisen, z. B. http://playground.arduino.cc/Learning/CommandLine

Probieren Sie PlaformIO aus , es funktioniert perfekt für mich.

@wollew - Dort bin ich

Beachten Sie, dass dies tatsächlich unter https://github.com/arduino/Arduino/blob/ide-1.5.x/build/shared/manpage.adoc#bugs dokumentiert ist. Dies ist die primäre Dokumentation für den Befehlszeilenmodus, wie auf der Seite verlinkt Sie referenziert.

@agdl , könnten Sie den Link unter http://playground.arduino.cc/Learning/CommandLine aktualisieren, um ihn auf https://github.com/arduino/Arduino/blob/master/build/shared/manpage.adoc zu verweisen da die aktuelle Verbindung in Zukunft möglicherweise unterbrochen wird.

Ich öffne dieses Problem erneut, da ich glaube, dass dieses Problem irgendwann behoben werden sollte. Es erfordert ein erhebliches Refactoring des Codes, so dass dies nicht in Kürze behoben wird, aber "wontfix" scheint eine harte Lösung zu sein.

@matthijskooijman sorry aber habe gerade das tag für mich bemerkt .... link aktualisiert sorry nochmal

Dies mit vi zu tun, ist definitiv ein Problem. Bei Eclipse geht es hauptsächlich darum, den Willen zu haben, zu beginnen und einen halben Tag, um es bis zum Ende zu bringen. Die Idee ist nicht sehr groß. Es ist ein bisschen unorganisiert, aber es gibt nirgendwo Reflexionen oder unsichtbare Abhängigkeiten. Selbst wenn Sie einen Tag brauchen, um sich zu konzentrieren, ist es nur ein einziger Tag für ein Produkt, das es schon seit Jahren gibt ...
Das einzige Problem dabei ist, dass es bedeutet, Verantwortung für das Ganze zu übernehmen. Wenn man sich ansieht, wie ein Teil des Codes im Laufe der Jahre geändert wurde, scheint dies etwas zu sein, das einige vermeiden wollten (ich nehme aus dem Wunsch heraus an, in der Lage zu sein um Korrekturen / Verbesserungen aus der Verarbeitung einfach herauszuholen). Aber die Realität ist, dass der Code vor einiger Zeit die Kompatibilität verloren hat ... leider ohne bisher die daraus resultierende Freiheit auszunutzen (ich meine im Kern).
Jemand sollte es versuchen, es ist meiner Meinung nach wirklich nicht so kompliziert, wie es aussieht.

Wenn es hilft, habe ich hier eine Problemumgehung vorgenommen: http://playground.arduino.cc/Main/Headless (von der Entwickler-Mailingliste, danke an Matthew Beckler)

Ugh, wie ist das noch ein Problem? Die obige Problemumgehung setzt weiterhin die Java-Anzeige voraus. export JAVA_TOOL_OPTIONS='-Djava.awt.headless=true' hilft auch bei # 5132 nicht, da auf dem Begrüßungsbildschirm immer noch ein Fehler angezeigt wird. Gibt es keine Möglichkeit, eine Skizze auf einem kopflosen Display zu kompilieren und hochzuladen?

Immer noch nicht behoben ... leider.

Wenn wir dies als auch uns betreffen und die CLI auf einem eingebetteten Gerät ausführen, würden wir es wirklich vorziehen, Xvfb nicht ausführen zu müssen, um eine angeschlossene Karte zu flashen. 😄

Zu Ihrer Information , wie PlatformIO gewechselt, das kopflose Builds und Uploads von Arduino-Skizzen durchführen kann. Für diejenigen, die Python in ihrer kopflosen Umgebung ausführen können, kann dies eine vorübergehende Problemumgehung sein. Für Travis-Tests zum Beispiel ist das ein Wunder.

Es ist ein sehr ironisches Multi-Target-PlatformIO-Framework, das dies kann und die offizielle Nur-Arduino-IDE nicht. Oh mein

Es ist ein sehr ironisches Multi-Target-PlatformIO-Framework, das dies kann und die offizielle Nur-Arduino-IDE nicht. Oh mein

Abgesehen von der Ironie möchte ich darauf hinweisen, wie viel Arbeit erforderlich ist, um dies zu erreichen. Die Arduino IDE ist ein Zweig der Verarbeitung, der von Anfang an als GUI-Anwendung konzipiert wurde: Es erfordert sicherlich viel mehr Arbeit, um eine "reine" CLI-Anwendung zu erhalten, als eine Anwendung, die ... nun ... als Befehl geboren wird Leitungsdienstprogramm! :-)
Bedenken Sie auch, dass die Anzahl der Benutzer, die die IDE über die CLI ausführen, eine kleine Minderheit ist (und wer sie unter Linux "kopflos" verwendet, ist sogar ein Teil davon), weshalb dieses Problem nicht unsere oberste Priorität war auch die Tatsache, dass eine einfache Problemumgehung existiert.

Wie auch immer, ich habe gerade https://github.com/arduino/Arduino/pull/5578 gedrückt, um dieses Problem ein für alle Mal zu lösen.

Vielen Dank für Ihre Bemühungen auf diesem @cmaglie

Es ist wirklich gut, Arduino-Builds mithilfe der offiziellen Toolchain automatisch überprüfen zu können.

Tut mir leid, wenn ich unhöflich war, das ist nicht meine Absicht ... Ich war nur erstaunt. Ich entschuldige mich
Wie @njh gesagt hat, vielen Dank für Ihre hervorragende Arbeit an diesem und jedem anderen Thema, @cmaglie.

"Bedenken Sie auch, dass die Anzahl der Benutzer, die die IDE über die CLI ausführen, eine kleine Minderheit ist."
Wie viele haben Sie angesichts all dieser Faktoren erwartet?

"Ausführen von Arduino-Cli von einem kopflosen Linux-Computer" trifft <0,01% unserer Benutzerbasis, die hauptsächlich aus Windows / Mac mit einem Desktop-PC besteht. Übrigens ist es jetzt behoben, es macht keinen Sinn, dies weiter zu diskutieren.

Danke für diese Arbeit! Es ermöglicht alle möglichen Dinge, von der Verwendung des bevorzugten Texteditors oder der bevorzugten IDE für Arduino-Code bis hin zu automatisierten Neuerstellungen und Bereitstellungen.

Ich bemerke immer noch die Notwendigkeit dieser X11-Problemumgehung erst im Build 1.8.5 als Teil der Entwicklungsarbeit an einem Continuous Integration-System für Arduino (https://github.com/ianfixes/arduino_ci).

Zusätzlich zu dem, was ich annehme, dass der Begrüßungsbildschirm auftauchte, wurden einige Fehler grafisch statt über die Konsole angezeigt, was zu einem Hang führte - Warten auf ein grafisches "OK", bevor Sie fortfahren.

Gibt es einen Befehlszeilenschalter, den ich vermisse?

Ich bemerke dies auch mit 1.8.5 - selbst wenn ich mit X Forwarding arbeite - da Tausende anderer Apps einwandfrei funktionieren.

$ arduino
Gtk-Message: 12:07:10.935: GtkDialog mapped without a transient parent. This is discouraged.
java.awt.HeadlessException
        at java.awt.SplashScreen.getSplashScreen(SplashScreen.java:117)
        at processing.app.Base.<init>(Base.java:206)
        at processing.app.Base.main(Base.java:135)

Ich verwende Fedora 27 in QubesOS. Dieses Problem ist nicht früher aufgetreten, obwohl ich die Arduino-IDE im letzten Jahr nicht verwendet habe.
Fehlermeldung:

$ arduino
java.awt.HeadlessException
    at java.awt.SplashScreen.getSplashScreen(SplashScreen.java:117)
    at processing.app.Base.<init>(Base.java:206)
    at processing.app.Base.main(Base.java:135)

dnf info arduino Ausgabe:

Name         : arduino
Epoch        : 1
Version      : 1.8.5
Release      : 4.fc27
Arch         : noarch
Size         : 3.0 M
Source       : arduino-1.8.5-4.fc27.src.rpm
Repo         : <strong i="11">@System</strong>
From repo    : updates
[... description, license, ASO redacted for brevity]

@GammaSQ Es scheint, dass Sie eine Version der Arduino IDE verwenden, die über einen Paketmanager installiert wurde. Es wurde von Dritten auf unbekannte Weise modifiziert, was die Ursache des Problems sein könnte. Ich empfehle, das Ding zu entfernen und die offizielle Arduino IDE zu testen, die heruntergeladen wurde von:
https://www.arduino.cc/en/Main/Software

@GammaSQ @CRCinAU
Wenn Sie nur arduino ausführen, wird die Arduino IDE (die GUI) gestartet. Sie müssen einen Befehl eingeben, um tatsächlich etwas zu tun (Complie / Verify / Upload ...).

@ianfixes
Welchen genauen Befehl führen Sie aus? Bitte posten Sie in einer anderen Ausgabe mit Anweisungen zur Reproduktion.

5578 sagt, dass es dies behoben hat, aber das Ausführen von Arduino auf Raspbian Stretch gibt immer noch den Fehler.

Es wurde keine X11 DISPLAY-Variable festgelegt, aber dieses Programm hat eine Operation ausgeführt, die dies erfordert.
at sun.awt.HeadlessToolkit.getMenuShortcutKeyMask (HeadlessToolkit.java:236)
at process.core.PApplet.(Unbekannte Quelle)
... 3 mehr

@darrahts Welchen Befehl hast du gestartet?

Arduino 2: 1.0.5

arduino --upload ../controllerWithDCmotorsNetsblox/controllerWithDCmotorsNetsblox.ino --port / dev / ttyACM0

versuchte auch den Arduino-Headless-Trick, aber er hing nur (obwohl keine Fehlermeldungen, aber das Hängen ist selbst ein Fehler)

Sie verwenden Arduino 1.0.5, jetzt sind wir bei 1.8.5.

Bitte entfernen Sie das Paket aus den sehr alten Raspbian-Repositories und laden Sie das neueste von arduino.cc herunter.

@cmagile Ich werde in meinem Leben schwören, dass ich dieses Problem in die gesamte Testsuite für meine CI-Bibliothek unter Linux über Travis ausgeführt, wobei der xdpy Display Manager-Hack deaktiviert war. und es funktioniert gut.

Kann nicht repro. Öffnet ein neues Problem, falls es jemals wieder auftritt.

Vielen Dank für das Follow-up!

Ja, das würde einen großen Unterschied machen (Entschuldigung für das Versehen!), Aber ich habe immer noch Probleme. Auf einem neuen sudo apt-get install arduino -y ich immer noch den gleichen Fehler erhalten und konnte offensichtlich nicht arduino --version ausführen, um die Version zu überprüfen. Als ich dann zu arduino.cc ging und die Linux-Arm-Datei tar.bz herunterlud, blieb mir folgendes übrig:

Hinzufügen von Desktop-Verknüpfungen, Menüelementen und Dateizuordnungen für Arduino IDE ... touch: '/root/.local/share/applications/mimeapps.list' kann nicht berührt werden: Keine solche Datei oder kein solches Verzeichnis
/ usr / bin / xdg-mime: 803: / usr / bin / xdg-mime: /root/.local/share/applications/mimeapps.list.new kann nicht erstellt werden: Verzeichnis nicht vorhanden
getan!

Wenn ich es ohne Sudo laufen lasse, bekomme ich folgendes:

touch: kann '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy' nicht berühren: Keine solche Datei oder kein solches Verzeichnis
touch: kann '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy' nicht berühren: Keine solche Datei oder kein solches Verzeichnis
touch: '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy' kann nicht berührt werden: Keine solche Datei oder kein solches Verzeichnis
touch: '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy' kann nicht berührt werden: Keine solche Datei oder kein solches Verzeichnis
touch: kann '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy' nicht berühren: Keine solche Datei oder kein solches Verzeichnis
touch: kann '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy' nicht berühren: Keine solche Datei oder kein solches Verzeichnis
touch: kann '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy' nicht berühren: Keine solche Datei oder kein solches Verzeichnis
touch: '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy' kann nicht berührt werden: Keine solche Datei oder kein solches Verzeichnis
touch: kann '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy' nicht berühren: Keine solche Datei oder kein solches Verzeichnis
touch: kann '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy' nicht berühren: Keine solche Datei oder kein solches Verzeichnis

Ich bin auf einer Neuinstallation von Raspbian Stretch. Dies sah ähnlich aus wie # 6116, aber der RESOURCE_NAME ist bereits Arduino-Arduinoid

sudo apt-get install arduino -y

@darrahts , das wird dir wahrscheinlich eine 1.0.5-Version bringen, die "neueste" von Debian. Holen Sie sich die Zip-Datei besser direkt von arduino.cc (es gibt eine ARM / RPI-Version).

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen