El programa Arduino solo funciona cuando se ejecuta como root

19

Cargar bocetos simples parece funcionar cuando ejecuto el programa Arduino como root ( sudo). Me gustaría ejecutarlo como usuario habitual. ¿Alguien ha enfrentado el mismo problema antes y lo solucionó?

Esto es lo que obtuve de lsusb:

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

Y el programa Arduino lo identifica como /dev/ttyACM0. Aquí están sus permisos:

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

Aquí está la salida 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)

Cuando subo un boceto de los ejemplos, como usuario habitual, me encuentro con este error:

avrdude:stk500_recv(): programmer not responding

Cualquier sugerencia es bienvenida.

fiebre
fuente
Vea si esto ayuda, sección "ESTABLECER EL PERMISO"
alexan_e
44
Y +1 por no aceptar la situación para ejecutar el IDE como root, pero tratar de descubrir cómo resolver el problema adecuadamente.
jippie
¿Cuál es el error exacto que obtienes cuando intentas ejecutar el IDE con un usuario sin privilegios? Es posible que deba habilitar la salida detallada en el Preferencesmenú.
jippie
Asegúrese de conectarse al dispositivo correcto, desenchufando, luego espere unos segundos, luego vuelva a enchufar, luego verifique la salida del dmesgarchivo del dispositivo que está registrado.
jippie
Comprobado eso, el dispositivo se descubre correctamente como /dev/ttyACM0: USB ACM device. Entonces, no me parece un problema. Por otro lado, los registros de compilación y carga (tuvieron que habilitarlos en Preferencias), parecen prometedores. Parece que no puedo copiarlos del programa arduino :(. (¿Pueden estar escribiendo en un archivo en alguna parte?)
feverDream

Respuestas:

13

La solución más fácil es agregarse al dialoutgrupo.

Primero tome nota de la salida de id. Guárdelo en el archivo (no dentro, /tmpya que se limpia al reiniciar). Si observa el resultado, notará que su usuario está registrado en varios grupos y esos grupos representan privilegios adicionales en el sistema. De forma predeterminada, su Arduino está asignado al grupo dialoutporque se registra como una interfaz en serie y en los viejos tiempos se solía usar para ... marcar, usando un módem.

Para agregarse al dialoutgrupo, emita el siguiente comando:

sudo usermod -a -G dialout $USER

No olvide la -abandera (para agregar grupos en lugar de reemplazar) o tendrá problemas completamente diferentes. Esta es la razón para hacer una copia de la idsalida en un archivo, por lo que en caso de que se equivoque, al menos ya sabe cómo se configuró su usuario antes.

Luego cierre sesión e inicie sesión y debería funcionar desde ese punto.

Opcionalmente, puede verificar dos veces la salida con idla salida que guardó anteriormente.

jippie
fuente
gracias @jippie, por la atenta respuesta. Me he agregado al dialoutgrupo, pero el problema aún parece persistir. He modificado mi pregunta con el resultado del idcomando.
feverDream
Mi impresión de su actualización es que la causa exacta del problema se ha desplazado al siguiente problema. Estás en camino a resolverlo. ¿Qué pasa cuando tú cat /dev/ttyACM0? ¿Lanza un error?
jippie
No, el archivo del dispositivo parece estar vacío, cuando lo hago cat.
feverDream
Vacío está bien, siempre y cuando no reciba un mensaje de error.
jippie
9

El consejo repetido a menudo de "simplemente sudo usermod -aG dialout <username>nunca funcionó para mí, y finalmente descubrí por qué. En mi máquina, /dev/ttyUSB0es del grupo serialy no dialout, así que agregar mi nombre de usuario dialoutno hizo nada.

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

Finalmente: lo sudo usermod -aG <group-name> <username>arregló para mí.

Vergonzosamente, esto también se menciona explícitamente aquí en "ESTABLECER EL PERMISO". Suspiro.

hoosierEE
fuente
Sí, vale la pena verificar el grupo propietario real. Además, el archivo del dispositivo puede ser ttyUSB # o ttyACM # (o teóricamente cualquier cosa) dependiendo del tipo de placa, el controlador del kernel y, en última instancia, la configuración de udev o lo que sea que cree los nodos.
Chris Stratton
También se menciona en arduino.cc/en/Guide/Linux#toc6
Roberto Tyley
0

Esto me pasa a mi. En mi caso, había actualizado la versión de arduino y parece que el archivo de preferencias estaba causando el problema. Simplemente elimine el archivo ~ / .arduino /ferences.txt (con Arduino IDE cerrado).

Pasos:

  1. Cerrar IDE de Arduino
  2. ejecuta esto:

    rm ~ / .arduino / preferencias.txt

  3. Inicie Arduino IDE

Esto funcionó para mí, espero que funcione para otra persona. Estoy usando Linux Mint 17 y actualicé de Arduino 1.05 a Arduino 1.06 extrayendo el IDE de Arduino, no estoy usando el del repositorio. (Por supuesto, después de agregar a su usuario al grupo correspondiente según lo mencionado por otros, pero si eso no lo ayudará, intente esto)

soynerdito
fuente
Posiblemente relacionado con esto, un efecto secundario de ejecutar herramientas como root es que puede terminar dejando archivos temporales, de configuración o de proyecto que su cuenta ordinaria no puede modificar o limpiar.
Chris Stratton