Il programma Arduino funziona solo quando eseguito come root


19

Il caricamento di semplici schizzi sembra funzionare quando eseguo il programma Arduino come root ( sudo). Vorrei eseguirlo come un utente normale. Qualcuno ha affrontato lo stesso problema prima e risolto?

Ecco cosa ho ottenuto da lsusb:

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

E il programma Arduino lo identifica come /dev/ttyACM0. Ecco i suoi permessi:

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

Ecco l'output di 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 carico uno schizzo dagli esempi, come utente normale, riscontro questo errore:

avrdude:stk500_recv(): programmer not responding

Eventuali suggerimenti sono ben accetti


Vedi se questo aiuta, sezione "SET THE PERMISSION"
alexan_e

4
E +1 per non aver accettato la situazione per eseguire l'IDE come root, ma per cercare di capire come risolvere correttamente il problema.
jippie,

Qual è l'errore esatto che si ottiene quando si tenta di eseguire l'IDE con un utente non privilegiato? Potrebbe essere necessario abilitare l'output dettagliato nel Preferencesmenu.
jippie,

Assicurati di connetterti al dispositivo corretto, scollegando, quindi attendi qualche secondo, quindi ricollegalo, quindi controlla l'output del dmesgfile del dispositivo registrato.
jippie,

Controllato che, il dispositivo viene scoperto correttamente come /dev/ttyACM0: USB ACM device. Quindi, non mi sembra un problema. D'altra parte, i log di compilazione e caricamento (hanno dovuto abilitarli nelle Preferenze), sembrano promettenti. Non riesco proprio a copiarli dal programma Arduino :(. (Potrebbe essere che stanno scrivendo su un file da qualche parte?)
febbreDream

Risposte:


13

La soluzione più semplice è aggiungerti al dialoutgruppo.

Prima di tutto prendi nota dell'output di id. Salvalo nel file (non in /tmpquando viene ripulito al riavvio). Se guardi l'output, noterai che il tuo utente è registrato per diversi gruppi e questi gruppi rappresentano privilegi extra sul sistema. Di default il tuo Arduino è assegnato al gruppo dialoutperché si registra come interfaccia seriale e ai vecchi tempi erano spesso usati per ... chiamare, usando un modem.

Per aggiungerti al dialoutgruppo, emetti il ​​seguente comando:

sudo usermod -a -G dialout $USER

Non dimenticare la -abandiera (per i gruppi aggiunti anziché la sostituzione) o avrai problemi completamente diversi. Questo è il motivo per fare una copia iddell'output in un file, quindi nel caso in cui sbagli almeno sai come è stato configurato il tuo utente prima.

Quindi disconnettersi e accedere e dovrebbe funzionare da quel punto.

Se lo si desidera, è possibile ricontrollare l'output idrispetto all'output salvato in precedenza.


grazie @jippie, per la risposta premurosa. Mi sono aggiunto al dialoutgruppo, ma il problema sembra ancora persistere. Ho modificato la mia domanda con l'output del idcomando.
febbre Sogna il

La mia impressione dal tuo aggiornamento è che la causa esatta del problema è passata al problema successivo. Sei sulla buona strada per risolverlo. Cosa succede quando tu cat /dev/ttyACM0? Emette un errore?
jippie,

No, il file del dispositivo sembra vuoto, quando lo faccio cat.
febbre Sogna il

Vuoto è OK, purché non venga visualizzato un messaggio di errore.
jippie,

9

Il consiglio spesso ripetuto di "semplicemente non ha sudo usermod -aG dialout <username>mai funzionato per me, e finalmente ho capito perché. Sulla mia macchina, /dev/ttyUSB0è del gruppo seriale non dialout, quindi aggiungendo il mio nome utente per dialoutnon fare nulla.

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

Finalmente: sudo usermod -aG <group-name> <username>riparato per me.

Imbarazzante, questo è anche esplicitamente menzionato qui sotto "SET THE PERMISSION". Sospiro.


Sì, vale la pena controllare l'attuale gruppo proprietario. Inoltre, il file del dispositivo può essere un ttyUSB # o un ttyACM # (o teoricamente qualsiasi cosa) a seconda del tipo di scheda, del driver del kernel e, in definitiva, della configurazione di udev o di qualunque cosa crei i nodi.
Chris Stratton,


0

Questo succede a me Nel mio caso, avevo aggiornato la versione di Arduino e sembra che il file delle preferenze stia causando il problema. Basta eliminare il file ~ / .arduino / preferenze.txt (con l'IDE di Arduino chiuso).

passi:

  1. Chiudi Arduino IDE
  2. eseguire questo:

    rm ~ / .arduino / preferenze.txt

  3. Avvia IDE Arduino

Questo ha funzionato per me, spero che funzioni per qualcun altro. Sto usando Linux Mint 17 e ho aggiornato da Arduino 1.05 ad Arduino 1.06 estraendo l'IDE di Arduino, non sto usando quello nel repository. (Naturalmente, dopo aver aggiunto il tuo utente al gruppo corrispondente come indicato da altri, ma se ciò non ti aiuterà a provare questo)


Forse correlato a questo, un effetto collaterale dell'esecuzione di strumenti come root è che puoi finire per lasciare indietro file temporanei, di configurazione o di progetto che il tuo account ordinario non può modificare o ripulire.
Chris Stratton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.