Arduino: A linha de comando requer X11

Criado em 1 abr. 2014  ·  45Comentários  ·  Fonte: arduino/Arduino

Eu gostaria de usar a CLI no Arduino 1.5 em um Raspberry Pi sem cabeça (acessado apenas por meio de SSH, sem ambiente X11), para fazer uma plataforma de integração contínua.

Ao chamar o arduino na linha de comando, o Java reclama que o ambiente X11 não está configurado e é obrigatório (o que não deveria ser necessário para programas CLI).

Saída 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

Comentários muito úteis

Se você estiver fechando isso, documente BLATANTESMENTE que o modo "CLI" para o editor arduino + botão macro não é realmente um modo CLI.

Eu simplesmente perdi um monte de tempo e instalei 220 MB de cruft apenas para descobrir que o modo CLI está completamente quebrado e na verdade é apenas um modo GUI sem algumas chamadas de desenho.

O fato de que você precisa de uma instalação funcional do X11 deve estar em negrito na parte superior das páginas de documentos oficiais que se referem a ele, como http://playground.arduino.cc/Learning/CommandLine

Todos 45 comentários

Isso parece relacionado a # 1970, mas provavelmente é um problema separado. Vou colocar isso na minha lista para investigar, obrigado por relatar.

@matthijskooijman

Pensando um pouco mais nisso, acho que não será fácil de consertar. Neste momento, ao executar os comandos CLI, toda a inicialização normal acontece normalmente, exceto para criar e mostrar a janela. Para corrigir isso, precisaríamos refatorar o código da GUI para ficar menos acoplado à funcionalidade de compilação, o que não será muito fácil. Devemos fazer isso eventualmente de qualquer maneira, mas isso provavelmente exigirá um esforço significativo.

Eu gostaria de comentar que tenho o mesmo problema e adoraria poder executar os comandos de compilação e upload via SSH (sem X11).

Olá matthijskoijman mesmo problema em uma máquina virtual Debian sem GUI, eu tentei usar o arduino-mk, mas não funciona de qualquer maneira ...

Mesmo problema com 1.5.8 no Debian Wheezy (Raspbian) rodando em um Raspberry Pi.

Mesmo problema - tentando fazer integração contínua em um nó do Jenkins OS X para verificar os arquivos do Arduino, mas precisa ser sem interface com o usuário. Eu tentei ino mas parece bastante desatualizado. Existe alguma outra solução alternativa entretanto? Já ouvi falar em bii hive , vou tentar também, mas qualquer outra recomendação é bem-vinda.

Felicidades,
Raquel

Usamos Jenkins o tempo todo. Para contornar as necessidades do IDE, instalamos https://wiki.jenkins-ci.org/display/JENKINS/Xvnc+Plugin

Muito obrigado @ffissore , vou tentar.

Desculpe se isso está saindo um pouco do assunto. @ffissore , em qual plataforma você está executando esse plugin? Estou tentando testar a verificação do Arduino em um nó Jenkins Mac e depois de muito configurar e trabalhar, estou preso.

No mac, não usamos esse plugin porque o nó é iniciado via java web start. Isso permite que o processo java no nó mac acesse a tela. Na verdade, de vez em quando, o IDE aparece e executa seus testes funcionais

Eu não tenho certeza se entendi. Isso significa que é impossível testar isso em um nó Mac? :(

Pelo contrário. Nós fazemos isso o tempo todo. Mas você precisa iniciar o nó mac corretamente. Não me lembro qual tutorial usei para configurá-lo, mas o resultado é que nosso usuário principal do mac tem um aplicativo de inicialização "start jenkins" que se conecta ao master usando java web start

Ah eu vejo. Vou pesquisar no Google! Muito obrigado!

Fechando como wontfix. A correção exigiria a desmontagem do IDE. Damos pequenos passos todos os dias, mas não podemos definir uma programação

Se você estiver fechando isso, documente BLATANTESMENTE que o modo "CLI" para o editor arduino + botão macro não é realmente um modo CLI.

Eu simplesmente perdi um monte de tempo e instalei 220 MB de cruft apenas para descobrir que o modo CLI está completamente quebrado e na verdade é apenas um modo GUI sem algumas chamadas de desenho.

O fato de que você precisa de uma instalação funcional do X11 deve estar em negrito na parte superior das páginas de documentos oficiais que se referem a ele, como http://playground.arduino.cc/Learning/CommandLine

Experimente o PlaformIO , funciona perfeitamente para mim.

@wollew - Foi aí que eu acabei, depois de passar por 3 ou 4 outras opções.

Observe que isso está realmente documentado em https://github.com/arduino/Arduino/blob/ide-1.5.x/build/shared/manpage.adoc#bugs , que é a documentação primária para o modo de linha de comando vinculado a partir da página você referenciou.

@agdl , você poderia atualizar o link em http://playground.arduino.cc/Learning/CommandLine para apontá-lo para https://github.com/arduino/Arduino/blob/master/build/shared/manpage.adoc já que o link atual pode acabar quebrando no futuro.

Estou reabrindo este problema, pois acredito que ele deve ser corrigido em algum momento. Ele requer uma refatoração significativa do código, então isso não será algo que será corrigido em breve, mas "wontfix" parece dificultar uma resolução.

@matthijskooijman, desculpe, mas acabei de notar a tag para mim .... link atualizado, desculpe novamente

Fazer isso com o vi definitivamente está procurando problemas. Fazer isso com eclipse é principalmente ter vontade de começar e meio dia para levar até o fim. O ide não é muito grande. É um pouco desorganizado, mas não há reflexo ou qualquer dependência invisível em qualquer lugar. Mesmo que demore um dia para se concentrar, ainda é apenas um dia para um produto que já existe há anos ...
A única coisa em fazer isso é que significa assumir a responsabilidade por tudo, o que olhar como parte do código foi alterado ao longo dos anos, parece ter sido algo que alguns queriam evitar (presumo pelo desejo de poder para obter facilmente quaisquer correções / melhorias do processamento). Mas a realidade é que o código perdeu compatibilidade há um tempo ... infelizmente sem aproveitar até agora a liberdade resultante (quer dizer no núcleo).
Alguém deveria tentar, é IMHO realmente não tão complicado quanto parece.

Se ajudar, coloquei uma solução alternativa aqui: http://playground.arduino.cc/Main/Headless (da lista de e-mail dos desenvolvedores, graças a Matthew Beckler)

Ugh, como isso ainda é um problema? A solução alternativa acima ainda assume a exibição de java. export JAVA_TOOL_OPTIONS='-Djava.awt.headless=true' não ajuda, mesmo com # 5132, pois você ainda obtém um erro na tela inicial. Não há como compilar e fazer upload de um esboço em um monitor sem cabeça?

Ainda não corrigido ... infelizmente.

Superando isso, pois também nos afeta, rodando a CLI em um dispositivo embutido, nós realmente preferiríamos não ter que rodar o Xvfb para fazer flash em uma placa anexada. 😄

Para sua informação, como @wollew sugeriu, mudei para PlatformIO, que pode realizar compilações e uploads sem cabeça de esboços do Arduino. Para aqueles que podem executar o Python em seu ambiente sem comando, pode ser uma solução temporária. É uma maravilha para os testes do Travis, por exemplo.

É muito irônico que a estrutura PlatformIO de múltiplos alvos pode fazer isso, e o IDE oficial exclusivo do Arduino não pode. Oh meu

É muito irônico que a estrutura PlatformIO de múltiplos alvos pode fazer isso, e o IDE oficial exclusivo do Arduino não pode. Oh meu

Ironia à parte, gostaria de destacar a quantidade de trabalho necessária para conseguir isso. O Arduino IDE é um fork do Processing que foi projetado desde o início como um aplicativo GUI: certamente requer muito mais trabalho para obter um aplicativo CLI "puro" em comparação com um aplicativo que ... bem ... nasce como um comando utilitário de linha! :-)
Considere também que a quantidade de usuários que executam o IDE a partir da CLI é uma pequena minoria (e quem o está usando "head-less" no Linux é até mesmo uma parte deles), é por isso que este problema não tem sido nossa prioridade, dado também o fato de que existe uma solução alternativa simples.

De qualquer forma, acabei de enviar https://github.com/arduino/Arduino/pull/5578 que deve resolver esse problema de uma vez por todas.

Muito obrigado por seus esforços neste @cmaglie

Será muito bom poder verificar as compilações do Arduino automaticamente, usando o conjunto de ferramentas oficial.

Desculpe se fui rude, não era essa a minha intenção ... Fiquei apenas pasmo. Peço desculpas
Como @njh disse, muito obrigado por seu excelente trabalho neste e em qualquer outro assunto, @cmaglie.

"Considere também que a quantidade de usuários que executa o IDE a partir da CLI é uma pequena minoria"
Considerando tudo isso, quantos você esperava?

"running-arduino-cli-from-a-headless-linux-machine" atinge <0,01% de nossa base de usuários que é principalmente Windows / Mac com um PC desktop. BTW agora está consertado, não há nenhum ponto em discutir isso mais.

Obrigado por este trabalho! Ele permitirá todo tipo de coisa, desde permitir que as pessoas usem seu editor de texto favorito ou IDE para o código do arduino até reconstruções e implantações automatizadas.

Ainda estou percebendo a necessidade dessa solução alternativa para o X11 recentemente, como a compilação 1.8.5, como parte do trabalho de desenvolvimento em um sistema de integração contínua para Arduino (https://github.com/ianfixes/arduino_ci).

Além do que presumo ser a tela inicial aparecendo, alguns erros foram apresentados graficamente em vez de por meio do console, o que causou um travamento - aguardando um "ok" gráfico antes de continuar.

Há uma opção de linha de comando que estou perdendo?

Percebo isso também com 1.8.5 - mesmo se eu executar com o X Forwarding - já que milhares de outros aplicativos funcionam bem.

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

Estou executando o fedora 27 no QubesOS. Esse problema não aconteceu antes, embora eu não tenha usado o IDE arduino no ano passado.
Mensagem de erro:

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

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 parece que você está usando uma versão do Arduino IDE instalada por meio de um gerenciador de pacotes. Ele foi modificado de maneiras desconhecidas por terceiros, o que pode ser a causa do problema. Recomendo remover isso e tentar o IDE oficial do Arduino baixado de:
https://www.arduino.cc/en/Main/Software

@GammaSQ @CRCinAU
executando apenas arduino iniciará o IDE do Arduino (a GUI), você precisa fornecer algum comando para realmente fazer algo (complie / verifique / carregue ...)

@ianfixes
qual comando exato você está executando? Por favor, poste em outra edição com instruções para reproduzir.

5578 diz que corrigiu isso, no entanto, executar o arduino no raspbian stretch ainda dá o erro.

Nenhuma variável X11 DISPLAY foi definida, mas este programa executou uma operação que a requer.
em sun.awt.HeadlessToolkit.getMenuShortcutKeyMask (HeadlessToolkit.java:236)
em processing.core.PApplet.(Fonte desconhecida)
... mais 3

@darrahts qual comando você lançou?

Arduino 2: 1.0.5

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

também tentei o truque do arduino-headless, mas ele apenas travou (embora não haja mensagens de erro, mas travar é um erro em si)

Você está executando o Arduino 1.0.5, agora estamos em 1.8.5.

Remova o pacote que vem dos repositórios do raspbian que é muito antigo e baixe o último em arduino.cc.

@cmagile , juro pela minha vida que vi esse problema no 1.8.5, mas acabei de executar o conjunto completo de testes na minha biblioteca de CI no Linux, via Travis, com o hack do gerenciador de exibição xdpy desativado , e funciona bem.

Não é possível reproduzir. Vai abrir um novo problema se isso acontecer novamente.

Obrigado pelo acompanhamento!

Sim, isso faria uma grande diferença (desculpe pelo descuido!), No entanto, ainda estou tendo problemas. em um sudo apt-get install arduino -y , ainda recebi o mesmo erro e obviamente não consegui executar arduino --version para verificar a versão. Então, indo para arduino.cc e baixando o arquivo linux arm tar.bz, me deixou com o seguinte:

Adicionando atalho na área de trabalho, item de menu e associações de arquivo para Arduino IDE ... toque: não é possível tocar em '/root/.local/share/applications/mimeapps.list': Não existe esse arquivo ou diretório
/ usr / bin / xdg-mime: 803: / usr / bin / xdg-mime: não é possível criar /root/.local/share/applications/mimeapps.list.new: Diretório inexistente
feito!

executando-o sem sudo, obtenho o seguinte:

toque: não é possível tocar em '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': arquivo ou diretório não existe
toque: não é possível tocar em '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': Esse arquivo ou diretório não existe
toque: não é possível tocar em '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': Esse arquivo ou diretório não existe
toque: não é possível tocar em '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': arquivo ou diretório não existe
toque: não é possível tocar em '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': arquivo ou diretório não existe
toque: não é possível tocar em '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': Esse arquivo ou diretório não existe
toque: não é possível tocar em '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': Esse arquivo ou diretório não existe
toque: não é possível tocar em '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': arquivo ou diretório não existe
toque: não é possível tocar em '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': Esse arquivo ou diretório não existe
toque: não é possível tocar em '/home/pi/.local/share/icons/hicolor/.xdg-icon-resource-dummy': Esse arquivo ou diretório não existe

Estou em uma nova instalação de trecho de framboesa. Parecia com # 6116, mas RESOURCE_NAME já é arduino-arduinoide

sudo apt-get install arduino -y

@darrahts , isso provavelmente dará a você uma versão 1.0.5, que é a "mais recente" do Debian. Melhor obter o arquivo zip diretamente do arduino.cc (existe uma versão ARM / rpi).

Esta página foi útil?
0 / 5 - 0 avaliações