O programa Arduino funciona apenas quando executado como root


19

Carregar esboços simples parece funcionar quando executo o programa Arduino como root ( sudo). Eu gostaria de executá-lo como um usuário comum. Alguém já enfrentou o mesmo problema antes e o corrigiu?

Aqui está o que eu obtive de lsusb:

$ lsusb
Bus 002 Device 022: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)

E o programa Arduino o identifica como /dev/ttyACM0. Aqui estão suas permissões:

$ ls -l /dev/ttyACM0 
crw-rw---T 1 root dialout 166, 0 Mar 14 22:03 /dev/ttyACM0

Aqui está a saída de id

groups=1000(abhiram),20(dialout),24(cdrom),25(floppy),29(audio),
30(dip),44(video),46(plugdev),105(scanner),110(bluetooth),112(netdev)

Quando carrego um esboço dos exemplos, como usuário comum, encontro este erro:

avrdude:stk500_recv(): programmer not responding

Todas as sugestões são bem-vindas.


Veja se isso ajuda, seção "SET THE
PERMISSION

4
E +1 por não aceitar a situação para executar o IDE como raiz, mas tentando descobrir como resolver o problema corretamente.
jippie

Qual é o erro exato que você recebe ao tentar executar o IDE em um usuário não privilegiado? Pode ser necessário ativar a saída detalhada no Preferencesmenu.
jippie

Verifique se você está se conectando ao dispositivo correto, desconectando-o, aguarde alguns segundos, reconecte-o e verifique a saída do dmesgarquivo de dispositivo registrado.
jippie

Verificado isso, o dispositivo foi descoberto corretamente como /dev/ttyACM0: USB ACM device. Então, isso não me parece um problema. Por outro lado, os logs de compilação e upload (precisavam habilitá-los nas Preferências), parecem promissores. Eu só não consigo copiá-los a partir do programa arduino :( (pode ser que eles estão escrevendo a um algum lugar do arquivo?).
feverDream

Respostas:


13

A solução mais fácil é se adicionar ao dialoutgrupo.

Primeiro, anote a saída de id. Salve-o em um arquivo (não no /tmpque é limpo em uma reinicialização). Se você observar a saída, notará que seu usuário está inscrito em vários grupos e esses grupos representam privilégios extras no sistema. Por padrão, o seu Arduino é atribuído ao grupo dialoutporque se registra como uma interface serial e, antigamente, eles costumavam ser usados ​​para ... discar usando um modem.

Para se adicionar ao dialoutgrupo, emita o seguinte comando:

sudo usermod -a -G dialout $USER

Não esqueça a -abandeira (para anexar grupos em vez de substituir) ou você terá problemas totalmente diferentes. Essa é a razão para fazer uma cópia da idsaída em um arquivo. Portanto, caso você estrague tudo, pelo menos você sabe como seu usuário estava configurado antes.

Em seguida, efetue logout e logon e deverá funcionar a partir desse ponto.

Opcionalmente, você pode verificar a saída em idrelação à saída que você salvou anteriormente.


obrigado @jippie, pela resposta atenciosa. Eu me adicionei ao dialoutgrupo, mas o problema ainda parece persistir. Modifiquei minha pergunta com a saída do idcomando
feverDream

Minha impressão com a atualização é que a causa exata do problema mudou para o próximo problema. Você está no seu caminho para resolvê-lo. O que acontece quando você cat /dev/ttyACM0? Isso gera um erro?
jippie

Não, o arquivo do dispositivo parece estar vazio quando eu cato faço .
feverDream

Vazio está OK, desde que você não receba uma mensagem de erro.
jippie

9

O conselho muitas vezes repetido de "simplesmente sudo usermod -aG dialout <username>nunca funcionou para mim, e eu finalmente descobri o porquê. Na minha máquina, /dev/ttyUSB0é do grupo seriale não dialout, então adicionar meu nome de usuário dialoutnão fez nada.

# ls -l
# crw-rw---- 1 root serial 188, 0 Mar 31 20:52 /dev/ttyUSB0
                    ^^^^^^ (group-name)

Finalmente: sudo usermod -aG <group-name> <username>consertei para mim.

Embaraçosamente, isso também é mencionado explicitamente aqui em "SET THE PERMISSION". Suspiro.


Sim, vale a pena conferir o grupo proprietário atual. Além disso, o arquivo do dispositivo pode ser um ttyUSB # ou um ttyACM # (ou teoricamente qualquer coisa) dependendo do tipo de placa, driver do kernel e, finalmente, a configuração do udev ou o que cria os nós.
Chris Stratton


0

Isso acontece comigo. No meu caso, eu atualizei a versão do arduino e parece que o arquivo de preferências estava causando o problema. Apenas exclua o arquivo ~ / .arduino / preferências.txt (com o Arduino IDE fechado).

Passos:

  1. Fechar o Arduino IDE
  2. execute isto:

    rm ~ / .arduino / preferências.txt

  3. Iniciar o IDE do Arduino

Isso funcionou para mim, espero que funcione para outra pessoa. Estou usando o Linux Mint 17 e atualizei do Arduino 1.05 para o Arduino 1.06 extraindo o IDE do Arduino. Não estou usando o que está no repositório. (Obviamente, depois de adicionar seu usuário ao grupo correspondente, conforme mencionado por outros, mas se isso não ajudar você a tentar isso)


Possivelmente relacionado a isso, um efeito colateral das ferramentas em execução como root é que você pode deixar para trás arquivos temporários, de configuração ou de projeto que sua conta comum não pode modificar ou limpar.
22430 Chris Stratton
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.