Программа Arduino работает только при запуске от имени root

Загрузка простых скетчей, кажется, работает, когда я запускаю программу 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

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

, 👍20

Обсуждение

Посмотрите, поможет ли [это](http://playground.arduino.cc/Linux/All#.UyM2QpX7Zwc), раздел «УСТАНОВКА РАЗРЕШЕНИЙ», @alexan_e

И +1 за то, что не смирились с ситуацией и не запустили IDE от имени root, а попытались выяснить, как правильно решить проблему., @jippie

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

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

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

Что происходит, когда вы avrdude -p atmega328 -carduino -P /dev/ttyACM0 -b 57600 -D -Uflash:r:/tmp/project.hex:i ? Дважды проверьте устройство и скорость передачи данных., @jippie

Я понимаю, что вы имеете в виду, мне пришлось немного изменить команду. Вот как это выглядит /usr/share/arduino/hardware/tools/avrdude -C/usr/share/arduino/hardware/tools/avrdude.conf -v -v -v -v -patmega328p -carduino -P/dev/ttyACM0 -b115200 -D -Uflash:w:/tmp/build6432672958845434451.tmp/Blink.cpp.hex:i И это работает, когда я запускаю его как обычный пользователь :). Хотя не уверен, почему это тормозит с инструментом arduino., @feverDream

Скорость передачи данных странная, я ожидал 57600, по крайней мере, я использую ее для подключения к Arduino. Вы нашли эту скорость передачи данных в журнале Arduino? Я использую другую плату, это может объяснить разницу., @jippie


3 ответа


13

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

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

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

sudo usermod -a -G dialout $USER

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

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

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

,

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

Мое впечатление от вашего обновления таково, что точная причина проблемы переместилась в следующую проблему. Вы на пути к ее решению. Что происходит, когда вы cat /dev/ttyACM0? Выдает ли это ошибку?, @jippie

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

Оставить пустым — нормально, если только не появится сообщение об ошибке., @jippie


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
                    ^^^^^^ (название группы)

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

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

,

0

Со мной такое случается. В моем случае я обновил версию Arduino, и, похоже, проблема была в файле настроек. Просто удалите файл ~/.arduino/preferences.txt (при закрытой среде Arduino IDE).

Шаги:

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

    rm ~/.arduino/preferences.txt

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

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

,