Програма 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.