Arduino: 命令行需要X11

创建于 2014-04-01  ·  45评论  ·  资料来源: arduino/Arduino

我想在无头Raspberry Pi上的Arduino 1.5中使用CLI(仅通过SSH访问,没有X11环境),以创建一个持续集成平台。

在命令行中调用arduino时,Java抱怨未设置X11环境,它是必需的(对于CLI程序,这不是必需的)。

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

最有用的评论

如果要关闭此窗口,请

我只是浪费了一些时间,安装了价值220 MB的文件,只是发现CLI模式已完全损坏,实际上只是一个GUI模式,没有进行任何绘制调用。

需要功能性X11安装的事实应该在引用该文档的官方文档页面顶部以粗体显示,例如http://playground.arduino.cc/Learning/CommandLine

所有45条评论

这似乎与1970年有关,但可能是一个单独的问题。 我将其列入清单进行调查,感谢您的举报。

@matthijskooijman

再多考虑一下,我认为这将不容易解决。 现在,运行CLI命令时,所有正常的初始化都正常进行,除了创建和显示窗口外。 要解决此问题,我们需要重构GUI代码,以减少与编译功能的耦合,而这并非易事。 无论如何,我们最终还是应该这样做,但这可能需要付出巨大的努力。

我想评论说我遇到同样的问题,并且希望能够通过SSH(没有X11)运行编译和上传命令。

嗨,matthijskoijman在没有GUI的Debian虚拟机上也遇到了同样的问题,我尝试使用arduino-mk,但无论如何都无法正常工作...

在Raspberry Pi中运行的Debian Wheezy(Raspbian)上1.5.8的相同问题。

相同的问题-尝试在Jenkins OS X节点上进行持续集成以验证Arduino文件,但它必须没有头。 我已经尝试过ino,但似乎已经过时了。 同时还有其他解决方法吗? 我听说过bii hive ,我也会尝试一下,但是欢迎其他任何建议。

干杯,
拉奎尔

我们一直在使用詹金斯。 为了解决IDE的需求,我们安装了https://wiki.jenkins-ci.org/display/JENKINS/Xvnc+Plugin

非常感谢@ffissore ,我将尝试一下。

抱歉,这有点题外话了。 @ffissore ,您在哪个平台上运行该插件? 我正在尝试在Jenkins Mac节点上测试Arduino验证,经过大量配置和解决后,我陷入了困境。

在Mac上,我们不使用该插件,因为该节点是通过Java Web Start启动的。 这允许mac节点上的java进程访问显示。 确实,偶尔会弹出IDE并执行其功能测试

我不确定我是否理解。 这是否意味着不可能在Mac节点上进行测试? :(

恰恰相反。 我们一直在做。 但是您需要正确启动mac节点。 我不记得我曾经设置过哪个教程,但是结果是我们的mac主要用户有一个启动“ start jenkins”应用程序,该应用程序使用java web start连接到master

哦,我懂了。 我会用谷歌搜索! 非常感谢!

以willtfix关闭。 修复将需要拆除IDE。 我们每天都会迈出小步,但无法真正设定时间表

如果要关闭此窗口,请

我只是浪费了一些时间,安装了价值220 MB的文件,只是发现CLI模式已完全损坏,实际上只是一个GUI模式,没有进行任何绘制调用。

需要功能性X11安装的事实应该在引用该文档的官方文档页面顶部以粗体显示,例如http://playground.arduino.cc/Learning/CommandLine

试试PlaformIO ,它对我来说非常合适。

@wollew-在经历了3或4个其他选择之后,这就是我的

请注意,这实际上是在https://github.com/arduino/Arduino/blob/ide-1.5.x/build/shared/manpage.adoc#bugs上记录的,这是从页面链接的命令行模式的主要文档您引用了。

@agdl ,也许您可​​以更新http://playground.arduino.cc/Learning/CommandLine上的链接以将其指向https://github.com/arduino/Arduino/blob/master/build/shared/manpage.adoc因为当前的链接将来可能会中断。

我正在重新讨论此问题,因为我认为此问题应在某个时间点解决。 它确实需要对代码进行大量的重构,因此不会很快得到解决,但是“ wontfix”似乎很难解决。

@matthijskooijman对不起,但只是注意到标签给我...。链接再次更新对不起

使用vi进行此操作肯定会带来麻烦。 用月食来完成它主要是要有开始的意愿和将它结束的1/2天。 想法不是很大。 它有点杂乱无章,但在任何地方都没有反射或任何不可见的依赖关系。 即使花了一天的时间才能专注,但对于已经存在多年的产品来说,它仍然只是一天。
这样做的唯一理由是,这意味着要对整个事情负责,看看多年来这些代码是如何更改的,这似乎是某些人想要避免的事情(我想是出于能够以轻松获取处理过程中的任何修复/改进)。 但是现实是代码在不久前失去了兼容性...不幸的是,到目前为止没有充分利用所产生的自由(我是说核心)。
有人应该试一试,它真的不像看起来那么复杂。

如果有帮助,我可以在此处进行解决: http :

gh,这怎么还是个问题? 上面的解决方法仍假定使用Java显示。 export JAVA_TOOL_OPTIONS='-Djava.awt.headless=true'没有帮助,即使使用#5132也一样,因为您仍会在启动屏幕上看到错误。 有没有办法在无头显示器上编译和上传草图?

仍然没有解决...不幸的是。

碰到这个问题也会影响到我们,因此在嵌入式设备上运行CLI实在是我们更希望不必运行Xvfb来刷新连接的主板。 😄

仅供参考,正如@wollew建议的那样,我切换到PlatformIO ,该Travis测试是一个奇迹。

具有讽刺意味的是,多目标PlatformIO框架可以做到,而正式的仅Arduino的IDE无法做到。 天啊

具有讽刺意味的是,多目标PlatformIO框架可以做到,而正式的仅Arduino的IDE无法做到。 天啊

除了具有讽刺意味的是,我想指出实现这一目标所需的工作量。 Arduino IDE是Processing的分支,从一开始就被设计为GUI应用程序:与……很好……作为命令诞生的应用程序相比,它肯定需要更多的工作才能获得“纯” CLI应用程序。行实用程序! :-)
还考虑从CLI运行IDE的用户数量很少(在Linux上“无头”使用它的用户甚至占其中的一部分),这就是为什么这个问题不是我们的首要任务,因为还存在一个简单的解决方法。

无论如何,我刚刚推送了https://github.com/arduino/Arduino/pull/5578 ,它应该可以彻底解决此问题。

非常感谢您为这个@cmaglie所做的努力

能够使用官方工具链自动验证Arduino构建会非常好。

抱歉,如果我不礼貌,那不是我的意图...我只是惊讶。 我道歉
正如@njh所说,非常感谢您在此问题以及其他任何问题上所做的出色工作,@cmaglie。

“还要考虑从CLI运行IDE的用户数量很少”
考虑到以上所有,您期望多少?

“从无头Linux机器上运行arduino-cli”在我们的用户群中占不到0.01%,该用户群主要是台式PC的Windows / Mac。 顺便说一句,现在它是固定的,没有必要进一步讨论了。

感谢这项工作! 从让人们使用自己喜欢的文本编辑器或IDE编写arduino代码到自动重建和部署,它将实现各种各样的事情。

我仍在1.8.5版本之前注意到这种X11解决方法的需要,这是Arduino持续集成系统(https://github.com/ianfixes/arduino_ci)上的开发工作的一部分。

除了我认为弹出的初始屏幕之外,还以图形方式(而不是通过控制台)显示了一些错误,这些错误导致挂起-等待图形“确定”,然后继续。

我缺少命令行开关吗?

我在1.8.5中也注意到了这一点-即使我在X转发中运行-因为成千上万的其他应用程序运行良好。

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

我正在QubesOS中运行fedora 27。 尽管我去年没有使用过arduino IDE,但这个问题并未较早发生。
错误信息:

$ 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输出:

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 ,看来您正在使用通过软件包管理器安装的Arduino IDE版本。 第三方已对其进行了未知方式的修改,这可能是问题的原因。 我建议删除该东西,然后尝试从以下位置下载官方的Arduino IDE:
https://www.arduino.cc/en/Main/软件

@GammaSQ @CRCinAU
仅运行arduino会启动Arduino IDE(GUI),您需要提供一些命令以实际执行操作(编译/验证/上传...)

@ianfixes
您正在运行哪个命令? 请在另一期中发布复制说明。

5578说它解决了这个问题,但是在树莓派拉伸上运行arduino仍然会给出错误。

没有设置X11 DISPLAY变量,但是该程序执行了需要它的操作。
在sun.awt.HeadlessToolkit.getMenuShortcutKeyMask(HeadlessToolkit.java:236)
在processing.core.PApplet。(来源不明)
...另外3个

@darrahts您启动了哪个命令?

Arduino的2:1.0.5

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

也尝试过arduino-headless技巧,但它只是挂起了(尽管没有错误消息,但是挂起本身就是一个错误)

您正在运行Arduino 1.0.5,现在我们是1.8.5。

请从非常老的raspbian存储库中删除软件包,然后从arduino.cc下载最新的软件包。

@cmagile我会发誓我在1.8.5上看到了这个问题,但是我只是通过Travis在Linux的CI库上运行关闭

无法复制。 如果再次发生,将打开一个新问题。

感谢您的跟进!

是的,那将会有很大的不同(对不起,疏忽了!),但是我仍然遇到问题。 在新的sudo apt-get install arduino -y我仍然收到相同的错误,显然无法运行arduino --version来验证版本。 然后,转到arduino.cc并下载linux arm tar.bz文件,这给了我:

为Arduino IDE添加桌面快捷方式,菜单项和文件关联...触摸:无法触摸'/root/.local/share/applications/mimeapps.list':没有这样的文件或目录
/ usr / bin / xdg-mime:803:/ usr / bin / xdg-mime:无法创建/root/.local/share/applications/mimeapps.list.new:目录不存在
完成!

没有sudo运行它我得到这个:

触摸:无法触摸“ /home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy”:无此类文件或目录
触摸:无法触摸“ /home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy”:无此类文件或目录
触摸:无法触摸“ /home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy”:无此类文件或目录
触摸:无法触摸“ /home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy”:无此类文件或目录
触摸:无法触摸“ /home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy”:无此类文件或目录
触摸:无法触摸“ /home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy”:无此类文件或目录
触摸:无法触摸“ /home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy”:无此类文件或目录
触摸:无法触摸“ /home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy”:无此类文件或目录
触摸:无法触摸“ /home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy”:无此类文件或目录
触摸:无法触摸“ /home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy”:无此类文件或目录

我正在重新安装树莓派。 这看起来与#6116类似,但是RESOURCE_NAME已经是arduino-arduinoide

须藤apt-get install arduino -y

@darrahts ,可能会为您提供1.0.5版本,这是Debian的“最新版本”。 最好直接从arduino.cc获取zipfile(有ARM / rpi版本)。

此页面是否有帮助?
0 / 5 - 0 等级