Программа 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
Любые предложения приветствуются.
@feverDream, 👍20
Обсуждение3 ответа
Самое простое решение — добавить себя в группу 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
Часто повторяемый совет «просто сделайте 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> исправил это для меня.
Как ни странно, это также явно указано здесь в разделе «УСТАНОВИТЬ РАЗРЕШЕНИЕ». Вздох.
Да, стоит проверить фактическую группу владельцев. Кроме того, файл устройства может иметь формат ttyUSB# или ttyACM# (или теоретически любой другой) в зависимости от типа платы, драйвера ядра и, в конечном счёте, конфигурации udev или того, что создаёт узлы., @Chris Stratton
Об этом также упоминается на https://www.arduino.cc/en/Guide/Linux#toc6, @Roberto Tyley
Со мной такое случается. В моем случае я обновил версию Arduino, и, похоже, проблема была в файле настроек. Просто удалите файл ~/.arduino/preferences.txt (при закрытой среде Arduino IDE).
Шаги:
- Закрыть Arduino IDE
выполнить это:
rm ~/.arduino/preferences.txt
Запустить Arduino IDE
Это сработало для меня, надеюсь, сработает и для кого-то ещё. Я использую Linux Mint 17 и обновился с Arduino 1.05 до Arduino 1.06, извлекая Arduino IDE. Я не использую ту, что в репозитории. (Разумеется, после добавления вашего пользователя в соответствующую группу, как упоминалось другими, но если это не поможет, попробуйте это)
Возможно, с этим связано то, что одним из побочных эффектов запуска инструментов от имени пользователя root является то, что вы можете оставить после себя временные, конфигурационные или проектные файлы, которые ваша обычная учетная запись не сможет изменить или очистить., @Chris Stratton
- Arduino IDE Отказано В Разрешении На Загрузку, Ubuntu
- avrdude ser_open() can't set com-state
- Float печатается только 2 десятичных знака после запятой
- ошибка: espcomm_upload_mem failed при загрузке скетча
- Печать массива байтов на экране последовательного монитора Arduino IDE
- Разные и самые быстрые способы вычисления синусов и косинусов в Arduino
- Нет заголовочных файлов (.h) в Documents\Arduino\libraries\arduino_144469 с демонстрационным кодом
- Связь Arduino master/slave с использованием RS485
Посмотрите, поможет ли [это](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