Arduino: La ligne de commande nécessite X11

Créé le 1 avr. 2014  ·  45Commentaires  ·  Source: arduino/Arduino

J'aimerais utiliser la CLI dans Arduino 1.5 sur un Raspberry Pi sans tête (accessible uniquement via SSH, pas d'environnement X11), pour créer une plate-forme d'intégration continue.

Lors de l'appel d'arduino dans la ligne de commande, Java se plaint que l'environnement X11 n'est pas défini et est requis (ce qui ne devrait pas être nécessaire pour les programmes CLI).

Sortie CLI:

$ 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

Commentaire le plus utile

Si vous fermez ceci, veuillez documenter BLATANTMENT que le mode "CLI" pour l'éditeur arduino + le bouton macro n'est pas en fait un mode CLI.

J'ai juste perdu beaucoup de temps et installé une valeur de 220 Mo de cruft pour découvrir que le mode CLI est complètement cassé et n'est en fait qu'un mode GUI sans quelques appels de dessin.

Le fait que vous ayez besoin d'une installation X11 fonctionnelle doit être en gras en haut des pages de documentation officielles qui y font référence, telles que http://playground.arduino.cc/Learning/CommandLine

Tous les 45 commentaires

Cela semble lié à # 1970, mais c'est probablement un problème distinct. Je vais mettre cela sur ma liste pour enquêter, merci pour le rapport.

@matthijskooijman

En y réfléchissant un peu plus, je pense que ce ne sera pas facile à résoudre. À l'heure actuelle, lors de l'exécution des commandes CLI, toute l'initialisation normale se produit normalement, à l'exception de la création et de l'affichage de la fenêtre. Pour résoudre ce problème, nous aurions besoin de refactoriser le code GUI pour qu'il soit moins couplé à la fonctionnalité de compilation, ce qui ne sera pas très facile. Nous devrions le faire éventuellement de toute façon, mais cela exigera probablement un effort important.

Je voudrais commenter que j'ai le même problème et que j'aimerais pouvoir exécuter les commandes de compilation et de téléchargement via SSH (sans X11).

Salut matthijskoijman même problème sur une machine virtuelle Debian sans GUI, j'ai essayé d'utiliser arduino-mk, mais ne fonctionne pas de toute façon ...

Même problème avec la version 1.5.8 sur Debian Wheezy (Raspbian) fonctionnant dans un Raspberry Pi.

Même problème - essayer de faire une intégration continue sur un nœud Jenkins OS X pour vérifier les fichiers Arduino, mais il doit être sans tête. J'ai essayé ino mais cela semble assez obsolète. Existe-t-il une autre solution de contournement en attendant? J'ai entendu parler de bii hive , je vais essayer aussi, mais toutes les autres recommandations sont les bienvenues.

À votre santé,
Raquel

Nous utilisons jenkins tout le temps. Pour contourner les besoins de l'EDI, nous avons installé https://wiki.jenkins-ci.org/display/JENKINS/Xvnc+Plugin

Merci beaucoup @ffissore , je vais essayer.

Désolé si cela devient un peu hors sujet. @ffissore , Sur quelle plateforme utilisez-vous ce plugin? J'essaie de tester la vérification Arduino sur un nœud Mac Jenkins et après beaucoup de configuration et de travail, je suis bloqué.

Sur mac, nous n'utilisons pas ce plugin car le nœud est lancé via java web start. Cela permet au processus java sur le nœud mac d'accéder à l'affichage. En effet, de temps en temps, l'EDI apparaît et exécute ses tests fonctionnels

Je ne suis pas sûr de comprendre. Cela signifie-t-il qu'il est impossible de tester cela sur un nœud Mac? :(

Bien au contraire. Nous le faisons tout le temps. Mais vous devez démarrer correctement le nœud mac. Je ne me souviens pas quel tutoriel j'ai utilisé pour le configurer, mais le résultat est que notre utilisateur principal de mac a une application de démarrage "start jenkins" qui se connecte à master en utilisant java web start

Oh je vois. Je vais google! Merci beaucoup!

Fermeture comme wontfix. La réparation nécessiterait le démantèlement de l'EDI. Nous faisons de petits pas tous les jours, mais nous ne pouvons pas vraiment définir un horaire

Si vous fermez ceci, veuillez documenter BLATANTMENT que le mode "CLI" pour l'éditeur arduino + le bouton macro n'est pas en fait un mode CLI.

J'ai juste perdu beaucoup de temps et installé une valeur de 220 Mo de cruft pour découvrir que le mode CLI est complètement cassé et n'est en fait qu'un mode GUI sans quelques appels de dessin.

Le fait que vous ayez besoin d'une installation X11 fonctionnelle doit être en gras en haut des pages de documentation officielles qui y font référence, telles que http://playground.arduino.cc/Learning/CommandLine

Essayez PlaformIO , cela fonctionne parfaitement pour moi.

@wollew - C'est là que je me suis retrouvé, après avoir parcouru 3 ou 4 autres options.

Notez que cela est en fait documenté à https://github.com/arduino/Arduino/blob/ide-1.5.x/build/shared/manpage.adoc#bugs , qui est la documentation principale pour le mode ligne de commande comme lié à partir de la page vous avez référencé.

@agdl , pourriez-vous peut-être mettre à jour le lien sur http://playground.arduino.cc/Learning/CommandLine pour le pointer vers https://github.com/arduino/Arduino/blob/master/build/shared/manpage.adoc car le lien actuel pourrait finir par se rompre à l'avenir.

Je rouvre ce problème, car je pense que ce problème devrait être résolu à un moment donné. Cela nécessite une refactorisation significative du code, donc ce ne sera pas quelque chose qui sera bientôt corrigé, mais "wontfix" semble durer une résolution.

@matthijskooijman désolé mais vient de me remarquer la balise .... lien mis à jour désolé encore

Faire cela avec vi pose définitivement des problèmes. Le faire avec éclipse, c'est surtout avoir la volonté de commencer et 1/2 journée pour aller jusqu'au bout. L'ide n'est pas très grande. C'est un peu désorganisé, mais il n'y a aucune réflexion ou aucune dépendance invisible nulle part. Même si cela vous prend une journée si vous vous concentrez, ce n'est encore qu'une seule journée pour un produit qui existe depuis des années ...
Le seul problème avec le faire est que cela signifie prendre la responsabilité de tout cela, ce qui, en regardant comment une partie du code a été modifiée au fil des ans, semble avoir été quelque chose que certains voulaient éviter (je suppose que par désir de pouvoir pour extraire facilement les correctifs / améliorations du traitement). Mais la réalité est que le code a perdu la compatibilité il y a quelque temps ... malheureusement sans profiter jusqu'à présent de la liberté résultante (je veux dire sur le noyau).
Quelqu'un devrait essayer, ce n'est vraiment pas aussi compliqué qu'il y paraît.

Si cela aide, j'ai mis une solution de contournement ici: http://playground.arduino.cc/Main/Headless (de la liste de diffusion des développeurs, grâce à Matthew Beckler)

Ugh, comment est-ce toujours un problème? La solution de contournement ci-dessus suppose toujours l'affichage Java. export JAVA_TOOL_OPTIONS='-Djava.awt.headless=true' n'aide pas, même avec # 5132 car vous obtenez toujours une erreur sur l'écran de démarrage. N'existe-t-il aucun moyen de compiler et de télécharger un croquis sur un écran sans tête?

Toujours pas fixé ... malheureusement.

Si cela nous affecte aussi, en exécutant la CLI sur un périphérique intégré, nous préférerions vraiment ne pas avoir à exécuter Xvfb pour flasher une carte connectée. 😄

Pour info , comme PlatformIO qui peut effectuer des constructions sans tête et des téléchargements de croquis Arduino. Pour ceux qui peuvent exécuter Python dans leur environnement sans tête, cela peut être une solution temporaire. Cela fonctionne une merveille pour les tests Travis par exemple.

C'est un framework PlatformIO multi-cible très ironique qui peut le faire et l'IDE officiel Arduino uniquement ne le peut pas. Oh mon

C'est un framework PlatformIO multi-cible très ironique qui peut le faire et l'IDE officiel Arduino uniquement ne le peut pas. Oh mon

Ironie mise à part, je voudrais souligner la quantité de travail nécessaire pour y parvenir. L'IDE Arduino est une fourchette de traitement qui a été conçue dès le début comme une application GUI: il faut sûrement beaucoup plus de travail pour obtenir une application CLI "pure" par rapport à une application qui ... enfin ... est née comme commande utilitaire de ligne! :-)
Considérez également que le nombre d'utilisateurs qui exécutent l'EDI à partir de la CLI est une petite minorité (et qui l'utilise "sans tête" sous Linux en est même une partie), c'est pourquoi ce problème n'a pas été notre priorité absolue, étant donné également le fait qu'une solution de contournement simple existe.

Quoi qu'il en soit, je viens de pousser https://github.com/arduino/Arduino/pull/5578 qui devrait résoudre ce problème une fois pour toutes.

Merci beaucoup pour vos efforts sur ce @cmaglie

Ce sera vraiment bien de pouvoir vérifier automatiquement les builds d'Arduino, en utilisant la chaîne d'outils officielle.

Désolé si j'ai été impoli, ce n'est pas mon intention ... J'étais seulement étonné. Je m'excuse
Comme @njh l' a dit, merci beaucoup pour votre excellent travail sur ce sujet et sur toute autre question, @cmaglie.

"Considérez également que le nombre d'utilisateurs qui exécutent l'EDI à partir de la CLI est une petite minorité"
Compte tenu de tout ce qui précède, combien en attendiez-vous?

"Running-arduino-cli-from-a-headless-linux-machine" atteint <0,01% de notre base d'utilisateurs qui est principalement Windows / Mac avec un PC de bureau. BTW maintenant c'est corrigé, il ne sert à rien d'en discuter davantage.

Merci pour ce travail! Cela permettra à toutes sortes de choses de laisser les gens utiliser leur éditeur de texte préféré ou leur IDE pour le code arduino aux reconstructions et déploiements automatisés.

Je remarque toujours la nécessité de cette solution de contournement X11 aussi récemment que la version 1.8.5, dans le cadre du travail de développement sur un système d'intégration continue pour Arduino (https://github.com/ianfixes/arduino_ci).

En plus de ce que je suppose que l'écran de démarrage apparaît, certaines erreurs ont été présentées graphiquement au lieu de via la console, ce qui a provoqué un blocage - en attendant un "ok" graphique avant de continuer.

Y a-t-il un commutateur de ligne de commande qui me manque?

Je remarque cela aussi avec la 1.8.5 - même si je cours avec X Forwarding - car des milliers d'autres applications fonctionnent bien.

$ 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)

J'utilise fedora 27 dans QubesOS. Ce problème ne s'est pas produit plus tôt, même si je n'ai pas utilisé l'IDE arduino au cours de l'année dernière.
Message d'erreur:

$ 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 sortie:

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 il semble que vous utilisez une version de l'IDE Arduino installée via un gestionnaire de packages. Il a été modifié de manière inconnue par des tiers, ce qui pourrait être la cause du problème. Je recommande de supprimer cette chose et d'essayer l'IDE officiel Arduino téléchargé à partir de:
https://www.arduino.cc/en/Main/Software

@GammaSQ @CRCinAU
courir juste arduino lancera l'IDE Arduino (l'interface graphique), vous devez fournir une commande pour faire quelque chose (se conformer / vérifier / télécharger ...)

@ianfixes
quelle commande exacte exécutez-vous? Veuillez poster dans un autre numéro avec des instructions à reproduire.

5578 dit qu'il a corrigé ce problème, mais exécuter arduino sur raspbian stretch donne toujours l'erreur.

Aucune variable X11 DISPLAY n'a été définie, mais ce programme a effectué une opération qui en a besoin.
à sun.awt.HeadlessToolkit.getMenuShortcutKeyMask (HeadlessToolkit.java:236)
à processing.core.PApplet.(Source inconnue)
... 3 autres

@darrahts quelle commande avez-vous lancée?

Arduino 2: 1.0.5

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

a également essayé l'astuce arduino-headless mais elle s'est juste accrochée (bien qu'aucun message d'erreur, mais la suspension est une erreur en soi)

Vous utilisez Arduino 1.0.5, nous sommes maintenant à 1.8.5.

Veuillez supprimer le paquet provenant des référentiels raspbian qui est très ancien et télécharger le dernier sur arduino.cc.

@cmagile Je la suite complète de tests sur ma bibliothèque CI sous Linux, via Travis avec le hack du gestionnaire d'affichage xdpy désactivé , et cela fonctionne très bien.

Je ne peux pas faire de repro. Ouvre un nouveau problème si jamais cela se reproduit.

Merci pour le suivi!

Oui, cela ferait une grande différence (désolé pour la surveillance!), Mais j'ai toujours des problèmes. sur un frais sudo apt-get install arduino -y j'ai toujours reçu la même erreur, et évidemment je n'ai pas pu exécuter arduino --version pour vérifier la version. Ensuite, aller sur arduino.cc et télécharger le fichier linux arm tar.bz, m'a laissé avec ceci:

Ajout d'un raccourci sur le bureau, d'un élément de menu et d'associations de fichiers pour Arduino IDE ... touch: impossible de toucher '/root/.local/share/applications/mimeapps.list': aucun fichier ou répertoire
/ usr / bin / xdg-mime: 803: / usr / bin / xdg-mime: impossible de créer /root/.local/share/applications/mimeapps.list.new: Répertoire inexistant
terminé!

l'exécuter sans sudo, j'obtiens ceci:

touch: impossible de toucher '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': aucun fichier ou répertoire de ce type
touch: impossible de toucher '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': aucun fichier ou répertoire de ce type
touch: impossible de toucher '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': aucun fichier ou répertoire de ce type
touch: impossible de toucher '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': aucun fichier ou répertoire de ce type
touch: impossible de toucher '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': aucun fichier ou répertoire de ce type
touch: impossible de toucher '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': aucun fichier ou répertoire de ce type
touch: impossible de toucher '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': aucun fichier ou répertoire de ce type
touch: impossible de toucher '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': aucun fichier ou répertoire de ce type
touch: impossible de toucher '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': aucun fichier ou répertoire de ce type
touch: impossible de toucher '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': aucun fichier ou répertoire de ce type

Je suis sur une nouvelle installation de raspbian stretch. Cela ressemblait à # 6116 mais le RESOURCE_NAME est déjà arduino-arduinoide

sudo apt-get installer arduino -y

@darrahts , cela vous donnera probablement une version 1.0.5, qui est la "dernière" de Debian. Mieux vaut obtenir le fichier zip directement depuis arduino.cc (il existe une version ARM / rpi).

Cette page vous a été utile?
0 / 5 - 0 notes