Програма Arduino працює лише під час запуску як root


19

Завантаження простих ескізів, здається, працює, коли я запускаю програму Arduino як root (sudo ). Я хотів би запустити його як постійний користувач. Хтось стикався з тією ж проблемою і раніше і виправляв її?

Ось що я отримав від lsusb:

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

І програма Arduino ідентифікує це як /dev/ttyACM0. Ось його дозволи:

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

Ось вихід з id

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

Коли я завантажую ескіз із прикладів, як звичайний користувач, я стикаюся з цією помилкою:

avrdude:stk500_recv(): programmer not responding

Будь-які пропозиції вітаються.


Перегляньте, чи це допомагає, розділ "Встановіть дозволу"
alexan_e

4
І +1 за те, що не сприймає ситуацію, щоб запустити IDE як корінь, але намагається з'ясувати, як правильно вирішити проблему.
jippie

Яку точну помилку ви отримуєте при спробі запустити IDE під непривілейованим користувачем? Можливо, вам потрібно буде включити довільний вихід у Preferencesменю.
джиппі

Переконайтеся, що ви підключаєтесь до потрібного пристрою, від'єднавшись від мережі, потім зачекайте кілька секунд, потім відключіться, а потім перевірте вихід dmesgфайлу пристрою, який зареєстровано.
джиппі

Перевірив це, пристрій виявлено належним чином /dev/ttyACM0: USB ACM device. Отже, це не здається мені проблемою. З іншого боку, журнали зі складання та завантаження (повинні були ввімкнути їх у налаштуваннях), здаються перспективними. Я просто не можу здатись скопіювати їх з програми arduino :(. (Може, вони кудись пишуть у файл?)
temperatureDream

Відповіді:


13

Найпростіше рішення - додати себе до dialoutгрупи.

Спочатку занотуйте результат з id. Збережіть його у файлі (не в /tmpтому, що очищається при перезавантаженні). Якщо ви подивитесь на вихід, ви помітите, що ваш користувач зареєстрований у кількох групах, і ці групи представляють додаткові привілеї в системі. За замовчуванням ваш Arduino призначений до групи, dialoutоскільки він реєструється як послідовний інтерфейс, а за старих часів вони часто використовувались для ... набору номера за допомогою модему.

Щоб додати себе до dialoutгрупи, видайте таку команду:

sudo usermod -a -G dialout $USER

Не забувайте -aпрапор (для додавання груп, а не заміни), або у вас виникнуть зовсім інші проблеми. Це причина для копіювання idвиводу у файл, тому у випадку, якщо ви зіпсуєте, принаймні ви знаєте, як налаштований ваш користувач, як раніше.

Потім вийдіть і увійдіть, і він повинен працювати з цього моменту.

За бажанням ви можете подвійно перевірити вихід на idвідповідність результату, який ви зберегли раніше.


дякую @jippie, за продуману відповідь. Я додав себе до dialoutгрупи, але проблема все ще зберігається. Я змінив своє запитання з висновком з idкоманди.
лихоманкаДерев’я

Моє враження від вашого оновлення полягає в тому, що точна причина проблеми перейшла до наступного випуску. Ви на шляху вирішити це. Що відбувається, коли ти cat /dev/ttyACM0? Це кидає помилку?
джиппі

Ні, файл пристрою, здається, порожній, коли я catйого.
лихоманкаДома

Порожня в порядку, поки ви не отримаєте повідомлення про помилку.
джиппі

9

Часто повторювана порада "просто sudo usermod -aG dialout <username>ніколи не працював для мене, і я, нарешті, з'ясував, чому. На моїй машині /dev/ttyUSB0є групою, serialа ні dialout, тому додавання мого імені користувача dialoutнічого не робив.

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

Нарешті: sudo usermod -aG <group-name> <username>виправили це для мене.

Збентежено, про це також прямо згадується тут у розділі "Встановити дозволу". Зітхнути.


Так, варто перевірити фактичну групу володіння. Також файлом пристрою може бути або ttyUSB #, або ttyACM # (або теоретично все, що завгодно) залежно від типу плати, драйвера ядра та в кінцевому рахунку конфігурації udev або будь-якого іншого, що створює вузли.
Кріс Страттон

Також згадується на arduino.cc/en/Guide/Linux#toc6
Роберто Тілей

0

Це трапляється зі мною. У моєму випадку я оновив версію arduino і, здається, файл налаштувань викликав проблему. Просто видаліть файл ~ / .arduino / preferences.txt (із закритим IDE Arduino).

Кроки:

  1. Закрийте Arduino IDE
  2. виконати це:

    rm ~ / .arduino / preferences.txt

  3. Запустіть Arduino IDE

Це працювало для мене, сподіваюся, це працює для когось іншого. Я використовую Linux Mint 17, і я перейшов з Arduino 1,05 до Arduino 1,06, витягнувши ID Arduino, я не використовую репо в репо. (Звичайно, після додавання користувача до відповідної групи, як згадували інші, але якщо це не допоможе вам спробувати це)


Можливо, пов'язане з цим, одним із побічних ефектів запущених інструментів як root є те, що ви можете врешті залишити тимчасові, конфігураційні або проектні файли, які ваш обліковий запис ordinay не може змінити чи очистити.
Кріс Страттон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.