Программа 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>
исправил это для меня.
Как ни странно, это также явно указано здесь в разделе «УСТАНОВИТЬ РАЗРЕШЕНИЕ». Вздох.
Со мной такое случается. В моем случае я обновил версию 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. Я не использую ту, что в репозитории. (Разумеется, после добавления вашего пользователя в соответствующую группу, как упоминалось другими, но если это не поможет, попробуйте это)
- 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