Zdalne programowanie i użytkowanie Raspberry Pi i innych mini komputerów

Programowanie na miniaturowych komputerach takich jak Raspberry Pi, czy Beaglebone Black może być uciążliwe gdy nie mamy do dyspozycji naszego ulubionego IDE, albo gdy ze względu na słaby procesor działa zbyt wolno by było użyteczne. Czasami problem stanowi też brak monitora, czy klawiatury i myszy, które można by podłączyć do takiego komputerka by cokolwiek na nim zrobić.

W tym artykule zaprezentuje metody zdalnej pracy na mini-komputerach (w sumie dowolnych) dzięki ssh, sshfs, VNC/RDP. Zaprezentuję też jak po sieci programować w Pythonie za pomocą PyCharma.

Zaczynamy od SSH

Podstawowe wymaganie to podłączenie naszej stacji roboczej i mini komputera do tej samej sieci. Raspberry Pi automatycznie łączy się po Ethernecie, natomiast Beaglebone Black domyślnie w ogóle nie nawiązuje połączenia sieciowego (takie trudne przypadki trzeba zawczasu skonfigurować korzystając z monitora/klawiatury/myszy).

Jeżeli na mini PC zainstalowany jest serwer SSH (openssh-server) to możemy zdalnie zalogować się na użytkownika na tej maszynie, np:

ssh pi@192.168.1.100

Gdzie pi to nazwa użytkownika a 192.168.1.100 to dla przykładu wewnętrzny adres IP komputera, z którym się łączymy. Jak go zdobyć? Można zobaczyć w panelu routera jakie urządzenie się podłączyło, można spróbować użyć nmap, czy na Androidzie/iOS aplikacji takich jak Fing. Na upartego można próbować zgadnąć (jak nasz PC ma końcówkę 100 to kolejne urządzenie zapewne dostanie 101). Jeżeli trafimy z adresem IP to powinniśmy dostać pytanie o hasło i po jego podaniu zostaniemy zalogowani na mini komputer. Możemy wykonywać wszystko co da się z konsoli, choć środowiska graficznego nie uruchomimy tak. Możemy pisać i odpalać skrypty - ale bez wspomnianego środowiska graficznego.

Fing namierzył Raspberry Pi

Przerzucamy pliki przez SFTP

Mając serwer SSH dostajemy też odpowiednik dostępu poprzez FTP - SFTP. Żeby połączyć się poprzez SFTP zazwyczaj w menedżerze plików wystarczy jako adres podać:

sftp://pi@192.168.1.100

Gdzie wszystkie części składowe są takie jak dla połączeń SSH z konsoli. Klienty FTP w większości też powinny obsługiwać połączenia SFTP - więc wybierz najbardziej pasujące Ci narzędzie.

Dostęp przez SFTP

Montujemy katalogu poprzez SSHFS

Dla pełni szczęścia IDE mogą wymagać by katalog z kodem dostępny był lokalnie. By to zapewnić można zamontować katalog z mini PC na naszej maszynie roboczej za pomocą SSHFS. W tym celu zainstaluj sshfs (sudo apt-get install sshfs) by móc montować po sieci katalogi w taki sposób:

sshfs pi@192.168.1.100:/ścieżka/na/mini/PC /ścieżka/na/PC/ -C

Tutaj oprócz nazwy użytkownika i adresu IP podajemy ścieżkę jaką chcemy zamontować oraz ścieżkę, pod którą ją zamontować na stacji roboczej. Dzięki temu będziemy mogli edytować pliki na zdalnej maszynie praktycznie tak jakby były na naszym komputerze. By odmontować wystarczy wykonać:

fusermount -u /ścieżka/na/PC/

Zdalny pulpit

Czasami przydaje się mieć dostęp do pulpitu. Pod Linuksem da się to zrobić za pomocą np. VNC lub RDP. Po stronie mini PC instalujemy serwery:

sudo apt-get install xrdp tightvncserver

A po stronie stacji roboczej klienta, np. vino, remmina i wiele innych (ja użyję Remminy). Aplikacje te są dostępne w repozytoriach. Podczas instalacji serwera VNC zapewne system poprosi o ustawienie hasła do połączeń - należy podać i zapamiętać to hasło, przyda się później ;)

Odpalamy aplikację taką jak Remmina i tworzymy połączenie RDP. Sprowadza się to do podania IP, loginu i hasła użytkownika. Jeżeli wszystko jest zainstalowane i uruchomione na mini PC to połączenie powinno się udać i po chwili zobaczymy pulpit Raspberry w dużym oknie.

Konfiguracja RDP w Remmina
Zdalny pulpit Raspberry Pi na stacji roboczej

Szybkość działania zdalnego pulpitu zależeć będzie od jakości połączenia sieciowego, a także od ustawień klienta i sewera VNC (lub RDP). Różne klienty VNC mogą dawać różne osiągi lub różne problemy z płynnym oddaniem interfejsu różnych aplikacji - więc w razie problemów zobacz kilka, zbadaj opcje dodatkowe - ale nadmiernych fajerwerków się nie spodziewaj. Mini PC mają też swoje hardwarowe ograniczenia.

W przypadku VNC na mini PC trzeba uruchomić serwer:

vncserver :0 -geometry 1920x1080 -depth 24

Gdzie możemy podać też mniejszą rozdzielczość. Następnie w kliencie konfigurujemy połączenie i łączymy się:

Konfiguracja połączenia VNC

Zdalny Python w PyCharm

Do pełni szczęścia przyda się integracja środowiska mini PC z naszym IDE. W przypadku np. Raspberry mamy moduł do obsługi GPIO. Integracja po sieci ze środowiskiem Pythona na takim mini PC da nam wsparcie co do składni, podpowiadania, czy przeglądania kodu. W zależności od IDE powinna istnieć też możliwość zdalnego wykonania kodu.

PyCharm poza obsługą maszyn wirtualnych Vagranta potrafi też używać Pythona po sieci poprzez SSH. Może zalogować się na nasz miniPC i zindeksować całe środowisko Pythona.

Dodawanie sieciowego interpretera Pythona

Dodawanie sieciowego interpretera Pythona

Python na Raspberry Pi po zindeksowaniu gotowy do użycia

W przypadku Raspberry Pi indeksowanie systemowego Pythona chwilę trwało, ale się powiodło. PyCharm chciał też zainstalować setuptools oraz pip na co mu pozwoliłem. Mając gotowy interpreter można go wybrać dla naszego projektu. Edytor w PyCharmie będzie rozpoznawał charakterystyczne dla Raspberry Pi moduły.

Kod możemy pisać lokalnie na maszynie roboczej i puszczać deploy na miniPC za pomocą odpowiedniego skryptu (np. za pomocą fabrica) i wykonywać wrzucony kod z konsoli poprzez SSH. W przypadku PyCharma można też wykorzystać katalog zamontowany przez SSHFS, aczkolwiek trzeba uwzględniać ryzyko zerwania połączenia.

PyCharm i SSHFS

Dla przykładu zamontowałem /home/pi z Raspberry w podkatalogu na maszynie roboczej. PyCharm mógł więc użyć katalogu jako katalogu projektu. Wybrałem interpreter i gotowe. Kod pisany jest przez sieć na Raspberry i z użyciem jego interpretera Pythona. Da się też wykonać skrypt, ale trzeba zmienić ścieżkę w konfiguracji Run → Edit configuration. Domyślnie będzie tam ścieżka jaka istnieje na naszej maszynie roboczej. Żeby to zadziałało trzeba podać ścieżkę jaka istnieje na mini PC (/home/pi/Documents w przypadku poniżej):

Konfiguracja ścieżek potrzebnych do wykonania skryptu
Wykonanie skryptu z poziomu PyCharma
Można też przeskoczyć do kodu zaimportowanego modułu

Zaprezentowane metody powinny ułatwić wam (zdalną) pracę z mini komputerami. Może macie też inne własne sprawdzone sposoby na zdalną obsługę i programowanie?

RkBlog
Comment article
Comment article RkBlog main page Search RSS Contact