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

Любые предложения приветствуются.

feverDream
источник
Посмотрите, поможет ли это , раздел «УСТАНОВИТЬ РАЗРЕШЕНИЕ»
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
источник
спасибо @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>исправил это для меня.

Смущающе, это также явно упомянуто здесь под «УСТАНОВИТЬ РАЗРЕШЕНИЕ». Вздох.

hoosierEE
источник
Да, стоит проверить фактическую группу владельцев. Также файл устройства может быть либо 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, я не использую тот из репо. (Конечно, после добавления вашего пользователя в соответствующую группу, как уже упоминалось другими, но если это не поможет, попробуйте это)

soynerdito
источник
Возможно, это связано с тем, что один из побочных эффектов запуска инструментов от имени root заключается в том, что в конечном итоге вы можете оставить временные файлы, файлы конфигурации или проекта, которые ваша обычная учетная запись не может изменить или очистить.
Крис Страттон