Port portu szeregowego> Nie można otworzyć / dev / ttyS0: Odmowa dostępu

19

Miałem Windows XP na tym polu i to się nie udało. Myśląc, że to jest uszkodzony system operacyjny, próbowałem ponownie zainstalować i nie udało się. Ale potem próbowałem zainstalować Ubuntu i nie mogłem uruchomić go z USB lub HD.

Czy test memu i okazało się, że jeden z moich 512 MB pamięci (miał 2) nie powiódł się. Usunąłem zły i mogłem zainstalować Ubuntu, ale był powolny.

Próbowałem szybko skonfigurować radio pakietowe dla Hurricane Sandy. Pobrałem terminal portu szeregowego i mogłem z niego skorzystać, ale system nadal się blokował. Więc zainstalowałem Xubuntu obok niego, planując skończyć następnego dnia, aby uzyskać pamięć RAM dla urządzenia. Włącz Xubuntu i teraz pojawia się następujący błąd z terminalem portu szeregowego:

Cannot open /dev/ttyS0: Permission denied

Chciałbym móc korzystać z terminala portu szeregowego lub odpowiednika Xubuntu, aby móc korzystać z terminalu pakietów kpc3 i podłączyć się do portu com z tyłu komputera.

Jakieś pomysły?

Joe Reynolds
źródło

Odpowiedzi:

39

Urządzenia tty należą do grupy „dialout”, podejrzewam, że nie jesteś członkiem tej grupy i dlatego nie masz dostępu do / dev / ttyS0, więc musisz dodać się do tej grupy.

Najpierw sprawdź, czy jesteś członkiem tej grupy:

groups ${USER}

.. wyświetli wszystkie grupy, do których należysz. Jeśli nie należysz do grupy dialout, dodaj się do niej, na przykład:

sudo gpasswd --add ${USER} dialout

Następnie musisz się wylogować i zalogować ponownie, aby zadziałało. Sprawdź, czy to rozwiązuje problem.

Colin Ian King
źródło
Nawet będąc w grupie wybierania numerów użytkownik o identyfikatorze 1000 nie może otworzyć portu szeregowego do odczytu. Po ponownym uruchomieniu. Ale kiedy używam sudo dla tego samego pliku wykonywalnego, to może się otworzyć /dev/ttyS0. Jaki jest możliwy powód?
Tomilov Anatoliy
3
@Orient Miałem ten sam problem, a to dlatego, że grupa dialoutnie została zdefiniowana. Uruchomienie newgrp dialoutrozwiązało problem.
TheGr8_Nik
@ TheGr8_Nik Thanks. Twoje rozwiązanie działało na Ubuntu 16.04. Nie wymaga ponownego uruchomienia komputera. Domyślnie ten system nie miał nazwy grupy dialout; sprawdzane za pomocą groupspolecenia. Nawet po dołączeniu nazwy użytkownika do dialoutgrupy za pomocą polecenia sudo usermod -a username -G dialout. Po użyciu newgrp dialoutto polecenie esptool.py -p /dev/ttyUSB0 flash_iddziałało.
Sun Bear
11

Jedyne rozwiązanie, które działa dla mnie, to: (za każdym razem, gdy uruchamiam komputer)

sudo chmod 666 /dev/ttys0

Naprawdę trzeba to naprawić w momencie instalacji. Mam 15.10 i wypróbowałem 16.04 LTS, nadal tam jest. Wydaje się, że to takie proste rozwiązanie.

Starsze wersje 10.04LTS nie miały tego problemu.

DRJ101
źródło
2
ta praca z Raspberry Pi 3, ale po ponownym uruchomieniu utraciłem uprawnienia.
J261
1
Dodanie uprawnień do mojej nazwy użytkownika dla dialouta działało dobrze, dość prosta poprawka.
DRJ101,
6

Możesz po prostu użyć tego polecenia:

sudo adduser $USER dialout

Spowoduje to dodanie bieżącego użytkownika do grupy połączeń. Zaloguj się i wyloguj, aby wejść w życie.

Bonnom
źródło
4

W systemie Ubuntu 18.04 naprawiłem ten problem za pomocą następujących poleceń:

sudo usermod -a -G tty $USER
sudo usermod -a -G dialout $USER

A następnie uruchom ponownie.

Jeśli nadal masz problemy, spróbuj debugować za pomocą:

strace -ff <COMMAND> > strace.txt 2>&1

I poszukaj „odmowy” w ścieżce.

Tseho
źródło
3

Rozejrzałem się po różnych forach i wygląda na to, że jest to błąd związany z uprawnieniami. Oto jak poradziłem sobie z problemem (długa wersja). Musisz ZARÓWNO cui setserialzainstalowane pakiety.

W trzech zakładkach terminalu monitorowane dane wyjściowe # tail -f /var/log/messages To właśnie wiemy, czy mamy, /dev/ttyUSB0czy nie.

Na drugiej karcie po prostu uruchomiłem pętlę do ls -ltego urządzenia, aby zobaczyć jego uprawnienia, a jego identyfikator grupy to „dialout”. TO jest bit krytyczny. Z jakiegoś powodu użytkownik MUSI użyć tego identyfikatora GID cu, aby ...

W trzeciej zakładce, jako root, zrobił # newgrp dialout(co odpowiada GID dialout). Testowany z # touch /tmp/anything... robienie ls -ltego pliku pokazuje, że jest on tworzony przez root z grupą dialout, więc jesteśmy gotowi do ... # cu -l /dev/ttyUSB0 W moim przypadku musiałem nacisnąć klawisz Return, aby zobaczyć oczekiwany monit, w innych przypadkach prędkość może wymagać zostać określone.

linuxhelpie
źródło
To był rzeczywisty kawałek, który pomógł mi: Z jakiegoś powodu, twój użytkownik musi użyć tej GID zrobić CU, więc ... . Stukrotne dzięki.
ΤΖΩΤΖΙΟΥ
1

Oto rozwiązanie:

Właśnie zaktualizowałem swój system operacyjny do Ubuntu 18. Normalnie instalowałbym arduino IDE za pośrednictwem strony internetowej Arduino, ponieważ ten dostarczany przez portal Ubuntu Software był zawsze starszą wersją i chciałem mieć najnowsze funkcje i wsparcie dla płyty głównej. Ponieważ jednak właśnie zainstalowałem najnowszy system operacyjny, pomyślałem, że oficjalne centrum oprogramowania z Ubuntu będzie mieć na liście najnowszą wersję IDE i tak się stało.

Teraz część soczysta! Zarówno mój laptop, jak i pulpit miały te same problemy z dostępem do portów szeregowych. zrobiłem make user częścią grupy dial-up i ustawiłem uprawnienia dla portu szeregowego, ale zawsze musiałem się wylogować, a następnie zalogować ponownie, zrób to wszystko za każdym razem po ponownym uruchomieniu! NIE ŚMIESZNE!.

Tym razem to nie zadziałało. Nawet w centrum oprogramowania opcja uprawnień do oprogramowania pokazuje port szeregowy „odłączony”. brak opcji zezwolenia na port, nawet jeśli wszystkie uprawnienia zostały przyznane ręcznie przez okno terminala przy użyciu sudo.

Postanowiłem odinstalować Arduino IDE z centrum oprogramowania i zainstalować go z widoku sieciowego, więc zrobiłem to. Tym razem czytam pliki instalacyjne, aby zobaczyć, czy wspomina o uprawnieniach do portu szeregowego, czy nie, ***** oczywiście, że tak! ****** wszystkie porty są ustawione na pełne uprawnienia dostępu, dostęp użytkownika na całym forum. Okazuje się, że to była odpowiedź. po uruchomieniu pliku arduino-linux-setup.sh dostarczonego przez arduino wszystkie problemy z portem szeregowym zostały rozwiązane. poniżej znajduje się fragment arduino-linux-setup.shpliku;

echo ""
echo "******* Add User to dialout,tty, uucp, plugdev groups *******"
echo ""

sudo usermod -a -G tty $1
sudo usermod -a -G dialout $1
sudo usermod -a -G uucp $1
sudo groupadd plugdev
sudo usermod -a -G plugdev $1


acmrules () {

    echo ""
    echo "# Setting serial port rules"
    echo ""

    cat <<EOF
    "KERNEL="ttyUSB[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="$1"
   "KERNEL="ttyACM[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="$1"
   EOF

}

więc widać, że działa nawet KERNEL. Moja sugestia:

zainstaluj ze strony internetowej arduino ide. w tej chwili zignoruj ​​centrum oprogramowania, dopóki nie zostanie naprawione. Tak, CENTRUM OPROGRAMOWANIA nie zezwala na uprawnienia do portu szeregowego podczas instalacji i na zawsze po niej.

Problem rozwiązany!

Joseph Wimsatt
źródło
0

W moim przypadku problem nadal występuje, nawet gdy dodam mojego użytkownika do grupy za pomocą:

Więc kiedy używam:

sudo gpasswd --add ${USER} dialout

a kiedy piszę: groupsmam ten wynik:

ilyahoo adm cdrom sudo dip plugdev lpadmin sambashare

Ale kiedy piszę, id -Gn ilyahooputput to:

ilyahoo adm tty dialout cdrom sudo dip plugdev lpadmin sambashare 

Wiem, że istnieje problem polegający na tym, że nie wiem, co to jest.

Aby uzyskać rozwiązanie, które właśnie napisałem

newgrp ilyahoo

i problem został rozwiązany.

ilyahoo
źródło
Witamy ilyahoo w askubuntu! Spróbuj sformatować post zgodnie z naszym przewodnikiem. Spróbuj sformatować dane wyjściowe w bardziej czytelny sposób. Dzięki
abu_bua
1
@abu_bua proszę używać formatowania kodu dla danych wyjściowych poleceń, a nie formatować cudzysłowu.
muru
0

Odpowiedź jest prosta. Musisz dodać użytkownika do dwóch grup, aby mieć dostęp do portów USB. Te grupy to dialouti tty:

sudo usermod -a -G dialout <user>
sudo usermod -a -G tty <user>

Zamień <user>na rzeczywistą nazwę użytkownika w tych poleceniach.

soham shailesh ranade
źródło