Программа 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 от имени пользователя root, но пытаетесь выяснить, как правильно решить проблему.
— Джиппи

Какую именно ошибку вы получаете, когда пытаетесь запустить IDE под непривилегированным пользователем? Возможно, вам потребуется включить подробный вывод в Preferencesменю.
— Джиппи

Убедитесь, что вы подключаетесь к правильному устройству, отсоединив его от сети, затем подождите несколько секунд, затем снова подключите и проверьте выход dmesgдля файла устройства, который зарегистрирован.
— Джиппи

Проверено, что устройство правильно обнаружено как /dev/ttyACM0: USB ACM device. Так что для меня это не проблема. С другой стороны, журналы от компиляции и загрузки (должны были включить их в настройках), кажутся многообещающими. Я просто не могу скопировать их из программы arduino :(. (Может быть, они записывают в файл где-нибудь?)
— feverDream

Ответы:


13

Самое простое решение - добавить себя в dialoutгруппу.

Сначала запишите вывод из id. Сохраните его в файле (а не в /tmpтом, что он очищается при перезагрузке). Если вы посмотрите на вывод, вы заметите, что ваш пользователь подписан на несколько групп, и эти группы представляют дополнительные привилегии в системе. По умолчанию ваш Arduino назначен группе, dialoutпотому что он регистрируется как последовательный интерфейс, и в старые времена они часто использовались для ... набора номера с использованием модема.

Чтобы добавить себя в dialoutгруппу, введите следующую команду:

sudo usermod -a -G dialout $USER

Не забывайте -aфлаг (для добавления групп, а не замены), иначе у вас будут совершенно другие проблемы. Это является причиной создания копии idвыходных данных в файл, поэтому, если вы все перепутаете, вы хотя бы знаете, как настраивался ваш пользователь ранее.

Затем выйдите и войдите, и это должно работать с этого момента.

При желании вы можете дважды проверить вывод по idсравнению с сохраненным ранее.


спасибо @jippie, за вдумчивый ответ. Я добавил себя в dialoutгруппу, но проблема, похоже, сохраняется. Я изменил свой вопрос с выводом idкоманды.
— feverDream

Из вашего обновления у меня сложилось впечатление, что точная причина проблемы сместилась к следующей проблеме. Вы на своем пути, чтобы решить это. Что происходит, когда ты cat /dev/ttyACM0? Выдает ошибку?
— Джиппи

Нет, файл устройства кажется пустым, когда я catего.
— feverDream

Пусто в порядке, пока вы не получите сообщение об ошибке.
— Джиппи

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 (с закрытой средой Arduino).

шаги:

  1. Закрыть Arduino IDE
  2. выполнить это:

    rm ~ / .arduino / preferences.txt

  3. Запустите Arduino IDE

Это сработало для меня, надеюсь, что это работает для кого-то еще. Я использую Linux Mint 17, и я обновил Arduino 1.05 до Arduino 1.06 путем извлечения Arduino IDE, я не использую тот из репо. (Конечно, после добавления вашего пользователя в соответствующую группу, как уже упоминалось другими, но если это не поможет, попробуйте это)


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