Arduino: Для командной строки требуется X11

Созданный на 1 апр. 2014  ·  45Комментарии  ·  Источник: arduino/Arduino

Я хотел бы использовать CLI в Arduino 1.5 на Raspberry Pi без головы (доступ только через 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

Самый полезный комментарий

Если вы закрываете это, пожалуйста, НЕОБХОДИМО документально зафиксируйте, что режим "CLI" для редактора arduino + кнопка макроса на самом деле не является режимом CLI.

Я просто потратил кучу времени и установил 220 МБ мусора только для того, чтобы обнаружить, что режим CLI полностью нарушен и фактически является просто режимом GUI без каких-либо вызовов отрисовки.

Тот факт, что вам нужна функциональная установка X11, должен быть выделен жирным шрифтом в верхней части официальных страниц документации, которые относятся к нему, например http://playground.arduino.cc/Learning/CommandLine.

Все 45 Комментарий

Кажется, это связано с # 1970, но, вероятно, это отдельная проблема. Я внесу это в свой список для расследования, спасибо за сообщение.

@matthijskooijman

Поразмыслив над этим еще немного, думаю, исправить это будет непросто. Прямо сейчас, когда выполняются команды CLI, вся нормальная инициализация происходит нормально, за исключением создания и отображения окна. Чтобы исправить это, нам нужно будет реорганизовать код графического интерфейса, чтобы он был менее связан с функциональностью компиляции, что будет непросто. Мы все равно должны это сделать, но это, вероятно, потребует значительных усилий.

Я хотел бы прокомментировать, что у меня такая же проблема, и я хотел бы иметь возможность запускать команды компиляции и загрузки через SSH (без X11).

Привет, matthijskoijman такая же проблема на виртуальной машине Debian без графического интерфейса, я попытался использовать arduino-mk, но все равно не работает ...

Та же проблема с 1.5.8 на Debian Wheezy (Raspbian), работающем на Raspberry Pi.

Та же проблема - попытка выполнить непрерывную интеграцию на узле Jenkins OS X для проверки файлов Arduino, но она должна быть безголовой. Я пробовал ino, но он кажется устаревшим. Есть ли еще какое-нибудь обходное решение? Я слышал о bii hive , я тоже попробую, но любые другие рекомендации приветствуются.

Привет,
Ракель

Мы постоянно пользуемся услугами Дженкинса. Чтобы обойти потребности IDE, мы установили https://wiki.jenkins-ci.org/display/JENKINS/Xvnc+Plugin

Большое спасибо @ffissore , я попробую.

Извините, если это немного не по теме. @ffissore , на какой платформе вы используете этот плагин? Я пытаюсь протестировать проверку Arduino на узле Jenkins Mac, и после долгой настройки и работы я застрял.

На Mac мы не используем этот плагин, потому что узел запускается через запуск java web. Это позволяет процессу Java на узле Mac получить доступ к дисплею. Действительно, время от времени IDE выскакивает и выполняет свои функциональные тесты.

Я не уверен, что понимаю. Означает ли это, что это невозможно проверить на узле Mac? :(

Наоборот. Мы делаем это все время. Но вам нужно правильно запустить узел Mac. Я не помню, какой учебник я использовал для его настройки, но в результате у нашего основного пользователя Mac есть запускаемое приложение "start jenkins", которое подключается к мастеру с помощью java web start

О, я вижу. Я погуглию! Большое спасибо!

Закрытие как wontfix. Для ремонта потребуется разобрать IDE. Мы делаем маленькие шаги каждый день, но не можем составить график

Если вы закрываете это, пожалуйста, НЕОБХОДИМО документально зафиксируйте, что режим "CLI" для редактора arduino + кнопка макроса на самом деле не является режимом CLI.

Я просто потратил кучу времени и установил 220 МБ мусора только для того, чтобы обнаружить, что режим CLI полностью нарушен и фактически является просто режимом GUI без каких-либо вызовов отрисовки.

Тот факт, что вам нужна функциональная установка X11, должен быть выделен жирным шрифтом в верхней части официальных страниц документации, которые относятся к нему, например http://playground.arduino.cc/Learning/CommandLine.

Попробуйте PlaformIO , у меня он отлично работает.

@wollew - Вот где я закончил,

Обратите внимание, что это фактически задокументировано на 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 определенно вызывает проблемы. Чтобы сделать это с затмением, нужно иметь желание начать и полдня, чтобы довести его до конца. Идея не очень большая. Он немного неорганизован, но нигде нет отражения или каких-либо невидимых зависимостей. Даже если у вас уйдет день, если вы сосредоточитесь, это все равно всего один день для продукта, который существует уже много лет ...
Единственное, что нужно сделать для этого, - это взять на себя ответственность за все, что, глядя на то, как часть кода изменялась за эти годы, похоже, было чем-то, чего некоторые хотели избежать легко извлекать любые исправления / улучшения из обработки). Но реальность такова, что код некоторое время назад потерял совместимость ... к сожалению, пока не воспользовался полученной свободой (я имею в виду ядро).
Кто-то должен дать ему шанс, это действительно ИМХО не так сложно, как кажется.

Если это поможет, я нашел здесь обходной путь: http://playground.arduino.cc/Main/Headless (из списка рассылки разработчиков, спасибо Мэтью Беклеру)

Ух, как это все еще проблема? Обходной путь, описанный выше, по-прежнему предполагает отображение java. export JAVA_TOOL_OPTIONS='-Djava.awt.headless=true' не помогает, даже с # 5132, так как вы все равно получаете ошибку на заставке. Нет возможности скомпилировать и загрузить скетч на безголовый дисплей?

Все еще не исправлено ... к сожалению.

Удар по этому, так как это влияет и на нас, запуская CLI на встроенном устройстве, мы действительно предпочли бы не запускать Xvfb для прошивки подключенной платы. 😄

К вашему сведению, как предложил @wollew , я переключился на PlatformIO, которая может выполнять сборки и выгрузку скетчей Arduino без использования головы. Для тех, кто может запускать Python в своей автономной среде, это может быть временное решение. Например, это чудо работает для тестирования Трэвиса .

По иронии судьбы многоцелевой фреймворк PlatformIO может это сделать, а официальная IDE только для Arduino - нет. О мой

По иронии судьбы многоцелевой фреймворк PlatformIO может это сделать, а официальная IDE только для Arduino - нет. О мой

Помимо иронии, я хотел бы отметить объем работы, необходимой для этого. IDE Arduino - это ответвление Processing, которое с самого начала разрабатывалось как приложение с графическим интерфейсом: для получения «чистого» приложения CLI требуется гораздо больше работы по сравнению с приложением, которое ... ну ... рождается как команда линия утилиты! :-)
Учтите также, что количество пользователей, которые запускают IDE из CLI, составляет незначительное меньшинство (и те, кто использует его "без головы" в Linux, составляют их долю), поэтому эта проблема не была нашим главным приоритетом, учитывая также тот факт, что существует простой обходной путь.

В любом случае, я только что нажал https://github.com/arduino/Arduino/pull/5578, который должен решить эту проблему раз и навсегда.

Большое спасибо за ваши усилия в этом @cmaglie

Будет действительно хорошо иметь возможность автоматически проверять сборки Arduino, используя официальный набор инструментов.

Извини, если я был груб, это не было моим намерением ... Я был только поражен. я извиняюсь
Как сказал @njh , большое спасибо за отличную работу над этим и любым другим вопросом, @cmaglie.

«Учтите также, что количество пользователей, которые запускают IDE из CLI, составляет небольшое меньшинство»
Учитывая все вышесказанное, сколько вы ожидали?

"running-arduino-cli-from-a-headless-linux-machine" поражает <0,01% нашей пользовательской базы, которая в основном состоит из Windows / Mac с настольными ПК. Кстати, сейчас это исправлено, дальше обсуждать нет смысла.

Спасибо за эту работу! Это позволит реализовать все, что угодно, от разрешения людям использовать их любимый текстовый редактор или IDE для кода Arduino до автоматической перестройки и развертывания.

Я все еще замечаю необходимость в этом обходном пути X11 совсем недавно, в сборке 1.8.5, в рамках разработки системы непрерывной интеграции для Arduino (https://github.com/ianfixes/arduino_ci).

В дополнение к тому, что, как я предполагаю, всплывает экран-заставка, некоторые ошибки были представлены графически, а не через консоль, что привело к зависанию - ожидание графического «ОК» перед продолжением.

Мне не хватает переключателя командной строки?

Я тоже это заметил в 1.8.5 - даже если я работаю с X Forwarding - поскольку тысячи других приложений работают нормально.

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

Я использую Fedora 27 в QubesOS. Раньше этой проблемы не возникало, хотя я не использовал IDE Arduino в течение последнего года.
Сообщение об ошибке:

$ 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, похоже, вы используете версию IDE Arduino, установленную через диспетчер пакетов. Он был изменен неизвестными способами третьими сторонами, что могло быть причиной проблемы. Я рекомендую удалить эту вещь и попробовать официальную IDE Arduino, загруженную с:
https://www.arduino.cc/en/Main/Software

@GammaSQ @CRCinAU
запуск только arduino запустит Arduino IDE (графический интерфейс), вам нужно предоставить некоторую команду, чтобы что-то действительно сделать (выполнить / проверить / загрузить ...)

@ianfixes
какую именно команду вы выполняете? Пожалуйста, разместите в другом выпуске с инструкциями по воспроизведению.

5578 говорит, что это исправлено, однако запуск arduino на raspbian stretch по-прежнему выдает ошибку.

Переменная X11 DISPLAY не была установлена, но эта программа выполнила операцию, которая требует этого.
в sun.awt.HeadlessToolkit.getMenuShortcutKeyMask (HeadlessToolkit.java:236)
в processing.core.PApplet.(Неизвестный источник)
... еще 3

@darrahts какую команду вы запускали?

Ардуино 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, но я только что запустил полный набор тестов в своей библиотеке CI в Linux через Travis с отключенным хаком xdpy display manager , и он отлично работает.

Не могу воспроизвести. Откроет новую проблему, если это когда-нибудь повторится.

Спасибо за продолжение!

Да, это будет иметь большое значение (извините за недосмотр!), Но у меня все еще есть проблемы. на новом sudo apt-get install arduino -y я все еще получал ту же ошибку и, очевидно, не мог запустить arduino --version для проверки версии. Затем, перейдя в arduino.cc и загрузив файл tar.bz linux arm, я получил следующее:

Добавление ярлыка на рабочий стол, пункта меню и ассоциаций файлов для Arduino IDE ... touch: невозможно коснуться '/root/.local/share/applications/mimeapps.list': такого файла или каталога нет
/ usr / bin / xdg-mime: 803: / usr / bin / xdg-mime: невозможно создать /root/.local/share/applications/mimeapps.list.new: каталог не существует
сделанный!

запустив его без sudo, я получаю следующее:

touch: не могу коснуться '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': такого файла или каталога нет
touch: не могу коснуться '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': такого файла или каталога нет
touch: не могу коснуться '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': такого файла или каталога нет
touch: не могу коснуться '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': такого файла или каталога нет
touch: не могу коснуться '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': такого файла или каталога нет
touch: не могу коснуться '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': такого файла или каталога нет
touch: не могу коснуться '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': такого файла или каталога нет
touch: не могу коснуться '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': такого файла или каталога нет
touch: не могу коснуться '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': такого файла или каталога нет
touch: не могу коснуться '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': такого файла или каталога нет

Я нахожусь на новой установке raspbian stretch. Это было похоже на # 6116, но RESOURCE_NAME уже является ардуино-ардуиноидом.

sudo apt-get install arduino -y

@darrahts , скорее всего, вы получите версию 1.0.5, которая является «последней» от Debian. Лучше получить zip-файл напрямую с arduino.cc (есть версия ARM / rpi).

Была ли эта страница полезной?
0 / 5 - 0 рейтинги