Program Arduino działa tylko po uruchomieniu jako root


19

Przesyłanie prostych szkiców wydaje się działać, gdy uruchamiam program Arduino jako root ( sudo). Chciałbym uruchomić go jako zwykły użytkownik. Czy ktoś napotkał wcześniej ten sam problem i go naprawił?

Oto, co otrzymałem z lsusb:

$ lsusb
Bus 002 Device 022: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)

Program Arduino identyfikuje to jako /dev/ttyACM0. Oto jego uprawnienia:

$ ls -l /dev/ttyACM0 
crw-rw---T 1 root dialout 166, 0 Mar 14 22:03 /dev/ttyACM0

Oto dane wyjściowe z id

groups=1000(abhiram),20(dialout),24(cdrom),25(floppy),29(audio),
30(dip),44(video),46(plugdev),105(scanner),110(bluetooth),112(netdev)

Gdy przesyłam szkic z przykładów, jako zwykły użytkownik napotykam ten błąd:

avrdude:stk500_recv(): programmer not responding

Wszelkie sugestie są mile widziane.


Sprawdź, czy to pomoże, sekcja „USTAW ZEZWOLENIE”
alexan_e

4
I +1 za nieakceptowanie sytuacji, aby uruchomić IDE jako root, ale próbując dowiedzieć się, jak poprawnie rozwiązać problem.
jippie

Jaki dokładnie błąd pojawia się, gdy próbujesz uruchomić IDE dla nieuprzywilejowanego użytkownika? Może być konieczne włączenie pełnego wyjścia w Preferencesmenu.
jippie

Upewnij się, że łączysz się z właściwym urządzeniem, odłączając wtyczkę, a następnie poczekaj kilka sekund, a następnie uruchom ponownie, a następnie sprawdź wyjście dmesgzarejestrowanego pliku urządzenia.
jippie

Sprawdzone, czy urządzenie zostało poprawnie wykryte jako /dev/ttyACM0: USB ACM device. Więc nie wydaje mi się to problemem. Z drugiej strony dzienniki kompilacji i przesyłania (musiały włączyć je w Preferencjach), wydają się obiecujące. Po prostu nie mogę skopiować ich z programu arduino :(. (Może gdzieś piszą do pliku?)
feverDream

Odpowiedzi:


13

Najłatwiejszym rozwiązaniem jest dodanie się do dialoutgrupy.

Najpierw zanotuj dane wyjściowe z id. Zapisz go w pliku (nie w, /tmpponieważ jest czyszczony po ponownym uruchomieniu). Jeśli spojrzysz na dane wyjściowe, zauważysz, że użytkownik jest zarejestrowany w kilku grupach i te grupy reprezentują dodatkowe uprawnienia w systemie. Domyślnie twoje Arduino jest przypisane do grupy, dialoutponieważ rejestruje się jako interfejs szeregowy, aw dawnych czasach były one często używane do ... wybierania numeru za pomocą modemu.

Aby dodać się do dialoutgrupy, wydaj następujące polecenie:

sudo usermod -a -G dialout $USER

Nie zapomnij -aflagi (do dodawania grup zamiast zastępowania), bo będziesz mieć zupełnie inne problemy. To jest powód, aby wykonać kopię idpliku wyjściowego do pliku, więc na wypadek, gdybyś coś popsuł, przynajmniej wiesz, jak skonfigurowano wcześniej użytkownika.

Następnie wyloguj się i zaloguj i od tego momentu powinno działać.

Opcjonalnie możesz dwukrotnie sprawdzić dane wyjściowe w idporównaniu z danymi zapisanymi wcześniej.


dzięki @jippie, za miłą odpowiedź. Dodałem się do dialoutgrupy, ale problem nadal się utrzymuje. Zmodyfikowałem moje pytanie za pomocą danych wyjściowych idpolecenia.
feverDream

Mam wrażenie z twojej aktualizacji, że dokładna przyczyna problemu została przeniesiona do następnego problemu. Jesteś na najlepszej drodze, aby go rozwiązać. Co się stanie, kiedy ty cat /dev/ttyACM0? Czy to powoduje błąd?
jippie

Nie, plik urządzenia wydaje się pusty, kiedy catto robię .
feverDream

Pusty jest OK, o ile nie pojawi się komunikat o błędzie.
jippie

9

Często powtarzana rada „po prostu sudo usermod -aG dialout <username>nigdy nie działała dla mnie, i w końcu zorientowałem się, dlaczego. Na mojej maszynie /dev/ttyUSB0należy do grupy, seriala nie dialout, więc dodanie mojej nazwy użytkownika dialoutnic nie dało.

# ls -l
# crw-rw---- 1 root serial 188, 0 Mar 31 20:52 /dev/ttyUSB0
                    ^^^^^^ (group-name)

Wreszcie: sudo usermod -aG <group-name> <username>naprawiłem to dla mnie.

Żenujące jest to również wyraźnie wymienione tutaj w „USTAW ZEZWOLENIE”. Westchnienie.


Tak, warto sprawdzić faktyczną grupę właścicieli. Plik urządzenia może być albo ttyUSB # lub ttyACM # (lub teoretycznie cokolwiek), w zależności od typu płyty, sterownika jądra i ostatecznie konfiguracji udev lub cokolwiek, co tworzy węzły.
Chris Stratton

Jest także wspomniany na stronie arduino.cc/en/Guide/Linux#toc6
Roberto Tyley

0

To mi się przydarza. W moim przypadku zaktualizowałem wersję arduino i wydaje się, że przyczyną problemu był plik preferencji. Wystarczy usunąć plik ~ / .arduino / preferences.txt (z zamkniętym Arduino IDE).

Kroki:

  1. Zamknij Arduino IDE
  2. wykonaj to:

    rm ~ / .arduino / preferences.txt

  3. Uruchom Arduino IDE

To działało dla mnie, mam nadzieję, że zadziała dla kogoś innego. Używam Linux Mint 17 i zaktualizowałem Arduino 1.05 do Arduino 1.06 poprzez wyodrębnienie Arduino IDE, nie używam tego w repozytorium. (Oczywiście po dodaniu użytkownika do odpowiedniej grupy, jak wspomniali inni, ale jeśli to nie pomoże, spróbuj tego)


Być może związane z tym, jednym z efektów ubocznych uruchamiania narzędzi jako root jest to, że możesz w końcu zostawić pliki tymczasowe, konfiguracyjne lub projektowe, których twoje konto ordinay nie może zmodyfikować ani wyczyścić.
Chris Stratton,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.