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.

feverDream
fonte
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.

jippie
fonte
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.

hoosierEE
fonte
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
Também é mencionado em arduino.cc/en/Guide/Linux#toc6
Roberto Tyley 18/17
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)

soynerdito
fonte
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