Le programme Arduino ne fonctionne que lorsqu'il est exécuté en tant que root


19

Le téléchargement de croquis simples semble fonctionner lorsque j'exécute le programme Arduino en tant que root ( sudo). Je voudrais l'exécuter en tant qu'utilisateur régulier. Quelqu'un a-t-il déjà rencontré le même problème et l'a-t-il résolu?

Voici ce que j'ai obtenu de lsusb:

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

Et le programme Arduino l'identifie comme /dev/ttyACM0. Voici ses autorisations:

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

Voici la sortie 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)

Lorsque je télécharge un croquis à partir des exemples, en tant qu'utilisateur régulier, je rencontre cette erreur:

avrdude:stk500_recv(): programmer not responding

Toutes suggestions sont les bienvenues.


Voir si cela aide, section "RÉGLER LA PERMISSION"
alexan_e

4
Et +1 pour ne pas avoir accepté la situation pour exécuter l'IDE en tant que root, mais avoir essayé de comprendre comment résoudre correctement le problème.
jippie

Quelle est l'erreur exacte que vous obtenez lorsque vous essayez d'exécuter l'IDE sous un utilisateur non privilégié? Vous devrez peut-être activer la sortie détaillée dans le Preferencesmenu.
jippie

Assurez-vous que vous vous connectez au périphérique approprié, en débranchant, puis attendez quelques secondes, puis rebranchez, puis vérifiez la sortie de dmesgpour le fichier de périphérique qui est enregistré.
jippie

Vérifié que le périphérique est détecté correctement en tant que /dev/ttyACM0: USB ACM device. Donc, cela ne me semble pas problématique. En revanche, les journaux de compilation et de téléchargement (devaient les activer dans les Préférences), semblent prometteurs. Je n'arrive pas à les copier à partir du programme arduino :(. (Peut-être qu'ils écrivent dans un fichier quelque part?)
feverDream

Réponses:


13

La solution la plus simple est de vous ajouter au dialoutgroupe.

Prenez d'abord note de la sortie de id. Enregistrez-le dans un fichier (pas dans /tmpcar cela est nettoyé lors d'un redémarrage). Si vous regardez la sortie, vous remarquerez que votre utilisateur est inscrit à plusieurs groupes et ces groupes représentent des privilèges supplémentaires sur le système. Par défaut, votre Arduino est affecté au groupe dialoutcar il s'enregistre en tant qu'interface série et dans le passé, ceux-ci étaient souvent utilisés pour ... numéroter, à l'aide d'un modem.

Pour vous ajouter au dialoutgroupe, exécutez la commande suivante:

sudo usermod -a -G dialout $USER

N'oubliez pas le -adrapeau (pour ajouter des groupes plutôt que pour les remplacer) ou vous aurez des problèmes complètement différents. C'est la raison pour laquelle faire une copie de la idsortie dans un fichier, donc au cas où vous gâcheriez au moins vous savez comment votre utilisateur a été configuré comme avant.

Ensuite, déconnectez-vous et connectez-vous et cela devrait fonctionner à partir de ce point.

En option, vous pouvez vérifier la sortie par idrapport à la sortie que vous avez enregistrée auparavant.


merci @jippie, pour la réponse réfléchie. Je me suis ajouté au dialoutgroupe, mais le problème semble persister. J'ai modifié ma question avec la sortie de la idcommande.
feverDream

Mon impression de votre mise à jour est que la cause exacte du problème est passée au problème suivant. Vous êtes sur le point de le résoudre. Que se passe-t-il quand vous cat /dev/ttyACM0? Cela génère-t-il une erreur?
jippie

Non, le fichier de l'appareil semble vide quand je catle fais .
feverDream

Vide est OK, tant que vous n'obtenez pas de message d'erreur.
jippie

9

Le conseil souvent répété de " sudo usermod -aG dialout <username>ne fonctionne tout simplement pas pour moi, et j'ai finalement compris pourquoi. Sur ma machine, /dev/ttyUSB0est du groupe serialet non dialout, donc ajouter mon nom d'utilisateur à dialoutn'a rien fait.

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

Enfin: sudo usermod -aG <group-name> <username>corrigé pour moi.

De manière embarrassante, cela est également explicitement mentionné ici sous "SET THE PERMISSION". Soupir.


Oui, cela vaut la peine de vérifier le groupe propriétaire réel. Le fichier de périphérique peut également être un ttyUSB # ou un ttyACM # (ou théoriquement n'importe quoi) en fonction du type de carte, du pilote du noyau et, finalement, de la configuration d'udev ou de tout ce qui crée les nœuds.
Chris Stratton

Il est également mentionné sur arduino.cc/en/Guide/Linux#toc6
Roberto Tyley

0

Cela m'arrive. Dans mon cas, j'avais mis à niveau la version d'arduino et il semble que le fichier de préférences soit à l'origine du problème. Supprimez simplement le fichier ~ / .arduino / preferences.txt (avec l'IDE Arduino fermé).

Pas:

  1. Fermer Arduino IDE
  2. exécutez ceci:

    rm ~ / .arduino / preferences.txt

  3. Lancez Arduino IDE

Cela a fonctionné pour moi, j'espère que cela fonctionne pour quelqu'un d'autre. J'utilise Linux Mint 17 et je suis passé d'Arduino 1.05 à Arduino 1.06 en extrayant l'IDE Arduino, je n'utilise pas celui du dépôt. (Bien sûr, après avoir ajouté votre utilisateur au groupe correspondant comme mentionné par d'autres, mais si cela ne vous aide pas à essayer cela)


Peut-être lié à cela, un effet secondaire de l'exécution des outils en tant que root est que vous pouvez finir par laisser des fichiers temporaires, de configuration ou de projet que votre compte ordinaire ne peut pas modifier ou nettoyer.
Chris Stratton
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.