Gdy port LinNWT na ttyUSB0 milczy...

Spis treści

Oczywiście po zmontowaniu NWT natychmiast łączymy go (poprzez USB) z PC.

I... pierwsze uruchomienie niekoniecznie zakończy się sukcesem.  Dla "doświadczonych" użytkowników nie jest to nic nowego. 

W sieci można znaleźć wiele opisów kłopotów ze sterownikami. Pod Linuksem przyczyna bywa prozaiczna i najczęściej nie jest to wina sterowników. Mimo to taki "skutek" też nie cieszy.

Poniżej opisałem działania naprawcze (pod Linuksem) z interfejsem USB zbudowanym na układzie FT232RL (prod. Future Technology Devices International, Ltd.).

Łatwo powiedzieć: trzeba poprawić... Zrobić też nietrudno. :)

Weryfikacja obecności urządzenia USB

Prawidłowo zbudowany interfejs z portem USB winien zostać prawidłowo rozpoznany i automatycznie zainstalowany. System zrobi to szybko i niezauważalnie dla użytkownika. Czy tak było zweryfikuje nam komenda (wydana w oknie terminala).

Ważne: FTDI należy wpisać dużymi literami:

user@XYZ:~$ dmesg | grep FTDI
[ 5.338006] usbserial: USB Serial support registered for FTDI USB Serial Device
[ 5.338081] ftdi_sio 9-2:1.0: FTDI USB Serial Device converter detected
[ 5.340545] usb 9-2: FTDI USB Serial Device converter now attached to ttyUSB0
user@XYZ:~$

Aby sprawdzić czy rzeczywiście port USB jest już aktywny wystarczy (w terminalu) podać komendę: lsusb. Najlepiej najpierw wykonać ją bez podłączonego NWT. Policzyć ilość urządzeń. A następnie podłączyć NWT i po chwili ponowić komendę. Widocznym będzie, że lista powiększyła się o nową pozycję:

Sygnatura portu na bazie FT232RL

Problem z portem....Czyli (niby) wszystko jest ok, ale...jeśli spróbujemy uruchomić program LinNWT jako "zwykły" użytkownik okaże się, że nie działa jak należy. Brak możliwości otwarcia portu ttyUSB0 (to port USB, przez który PC komunikuje się z NWT7).

Niestety!

PuTTY w kłopocie...By pokazać, że nie jest to wina programu LinNWT obok prezentacja analogicznego błędu wygenerowanego przez popularny program "komunikacyjny" PuTTY.


ttyUSB0 - choć obecny "nie chce gadać"!

Przyczyną jest brak uprawnień "zwykłego" użytkownika do korzystania z portu ttyUSB0. By sprawdzić jak to wygląda w oknie terminala należy podać komendę: 

user@XYZ:~$ ll /dev/ttyUSB*Listing ttyUSB0

jakkolwiek jej wynik potwierdza istnienie portu o nazwie ttyUSB0 to próby odwołania się do niego (przez nieuprzywilejowanego użytkownika) kończą się komunikatem o błędzie.

Zwróć uwagę na wpisy: root oraz dialout. Nie wdając się w szczegóły: pierwsza określa właściciela a druga grupę, którzy są (i tylko oni) uprawnieni do korzystania z portu ttyUSB0.

sudo, gksu czy usermod?

Superuser może wiele...Wyżej napisałem, że nieuprzywilejowany użytkownik nie może skorzystać z urządzenia ttyUSB0. W wielu dystrybucjach Linuksa dostępne są komendy (sudo - w trybie tekstowym, najczęściej wywoływanym za pomocą terminala, gksu - w trybie graficznym, itp.) pozwalające skorzystać z uprawnień użytkownika uprzywilejowanego (superużytkownika, super user, root - posiadających tzw. root privilege). Nadanie tych uprawnień spowoduje, że (po autoryzacji dostępu) będziemy mogli użyć portu ttyUSB0. Potwierdza to obrazek z lewej.

Drugim kierunkiem działania jest "dopisanie" (naszego) użytkownika do grupy "dialout". Jak widzieliśmy ona ma również uprawnienia (rw - czytania i pisania) do portu ttyUSB0. Czy warto? Moim zdaniem: zdecydowanie tak.

Przemawiają za tym następujące przesłanki:

  • wiele programów odwołuje się (i są one wystarczające) do uprawnień grupy dialout. Dopisanie użytkownika do grupy jest (jednorazowym i) trwałym rozwiązaniem nie wymagającym każdorazowej autoryzacji,Położenie plików konfiguracyjnych...
  • użytkownik działa w obrębie własnych uprawnień (w tym grupowych).
  • Pliki konfiguracyjne programów (w tym korzystających z portów) tworzone są w katalogu macierzystym użytkownika (korzystając z uprawnień superużytkownika pliki te zostaną utworzone w katalogu root'a. I prawa zmian będą również należały do root'a),
    Użytkownik (po dopisaniu) dokonując zmian w konfiguracji programów nie musi tych operacji autoryzować i/lub korzystać z uprawnień super użytkownika,
  • W przypadku automatycznej instalacji i tworzenia przez system do nich linków (z reguły) zawierają one wszystko co niezbędne do uruchomienia. I nie trzeba dodawać żadnych elementów (komend) modyfikujących uprawnienia użytkownika).

Dlatego moim zdaniem celowym jest skorzystanie z dopisaniem (własnego) użytkownika do grupy "dialout". Pozostaje więc tylko pytanie:


Jak dopisać użytkownika do grupy "dialout"?

Oczywiście poniższy opis przeznaczony jest dla użytkowników systemu Linuks.

Kluczowe znaczenie ma tu (właściwe!!! - wytłuszczenie i wykrzykniki nie są przypadkowe) wykorzystanie komendy "usermod".

Zanim przejdę do opisu komendy proponuję wykonanie komendy uwidaczniającej członków grupy o nazwie "dialout" (co było widoczne w listingu własności urządzenia ttyUSB0). Podając w terminalu komendę (ukazującą zawartość pliku /etc/group, w częsci zawierającej nazwę grupy "dialout"):

user@XYZ:~$ cat /etc/group | grep dialout
dialout:x:45:

(brak wpisów po ":" wskazuje na brak innych członków tej grupy)

Widać, że nasz użytkownik user nie jest członkiem grupy dialout. I w tym problem. Dopisać użytkownika "user" do grupy dialout można na kilka sposobów. Jednym z nich jest wydanie (w oknie terminala) poniższej komendy:

sudo usermod -a -G dialout $USER

Uwaga:

  • opcja "-a" (wraz opcją "-G") wymusza dopisanie (a nie przypisanie) użytkownika do wskazanej grupy! "Przypisanie" powoduje: usunięcie przynależności użytkownika do wszystkich grup i dopisanie do tej wskazanej w komendzie!
    W wielu opisach komendy "usermod" opcja "-a", ew. "--append" (jak tutaj) jest pominięta,
  • użyte w komendzie "$USER" to parametr powłoki, który w momencie jej wykonania w miejscu parametru użyje rzeczywistej nazwy użytkownika wywołującego komendę.

By sprawdzić, czy nasz użytkownik (o przykładowej nazwie user) został dopisany do grupy należy wykonać w terminalu komendę:

user@XYZ:~$ cat /etc/group | grep dialout
dialout:x:45:user

(jak widać po ":" pojawiła się nazwa naszego użytkownika)

Powyżej wspomniałem, że jedną z metod dopisania jest wykorzystanie "usermod". Można też "ręcznie edytować" pliki konfiguracyjne. Osobiście tej metody nie polecam. Zwłaszcza "tym, którzy zaczynają" z Linuksem. Czasami jedna zbędna spacja w pliku może sprawić duży problem.

By móc się cieszyć nowym "członkostwem" musimy "zrestartować" komputer. Wykonaj w oknie termiala komendę:

user@XYZ:~$ sudo reboot


Efekt końcowy

Członkostwo, zamiast przywilejów...Po restarcie komputera i uruchomieniu programu "linnwt" możemy cieszyć się pełną jego funkcjonalnością.

Jak widać na rysunku z lewej okazuje się, że oprócz nieskrępowanego dostępu do portu ttyUSB0 program korzysta również z systemowych (odmiennych niż w przypadku root'a) ustawień "szaty graficznej" otwieranej aplikacji. Putty na ttyUSB0

Oczywiście również PuTTY po dopisaniu nie ma już najmniejszych problemów w wykorzystaniu z portu ttyUSB0. 

Ten rozbudowany opis powstał dlatego, że wiele urządzeń (programatory, sondy, przystawki oscyloskopowe, itp.) pod Linuksem korzysta z portów ttyUSB*. I bywa, że przed wykonaniem opisanych powyżej procedur nie działają prawidłowo.

Zapraszam do Warsztatu krótkofalowca.