Co chcemy osiągnąć
Chcemy uruchomić aplikacje graficzną na systemie Linux, ale widzieć jej okno po stronie windowsa. Jednocześnie nie chcemy przesyłać całego obrazu pulpitu, tak jak robi to VNC.
Demonstracja efektu
Założenia
Zakładam, że pracujemy na LinuxCNC (opens new window), który bazuje na dystrybucji debian. Wszelkie opisy zakładają, że przygotujemy konfiguracje dla komputera sterującego maszyną numeryczną CNC. Dodatkowo nie chcemy na stałe konfigurować ekranu na maszynie CNC. Zrobimy to dynamicznie przy każdym zdalnym podłączeniu.
Będziemy mogli sterować frezarką zdalnie, siedząc przy komputerze z systemem windows.
Konfiguracja
Zakładam, że sieć jest już skonfigurowana, możemy zalogować się do maszyny CNC przy pomocy SSH, najlepiej jak byśmy logowali się przy pom ocy certyfikatu, a nie hasła. Dodatkowo pomocne będzie upewnienie się, że wybrane maszyny zawsze będą miały taki sam adres IP.
W moim przypadku adresy IP są przypisane następująco:
Komputer | Adres IP |
---|---|
Windows 10 | 192.168.10.126 |
Linux CNC | 192.168.10.225 |
Przed przystąpieniem do dalszych prac, upewniamy się, że możemy pingować wzajemnie komputery. Jeśli to się nie udaje, warto tymczasowo wyłączyć zaporę firewall po stronie windowsa.
Konfiguracja po stronie Linuxa
Podstawowa aktualizacja pakietów:
sudo su -
apt-get -o Acquire::Check-Valid-Until=false update
apt-get update
apt-get upgrade
apt-get dist-upgrade
Instalujemy kilka aplikacji:
sudo su -
apt-get install mc gnome-terminal xterm
Nie chcemy ustawiać zmiennej środowiskowej DISPLAY na stałe. Wolimy to zrobić skryptem przy próbie połączenia, jeśli jednak chcemy statycznie skonfigurować zdalny ekran, możemy to zrobić następująco:
export DISPLAY=192.168.10.126:0
lub jeśli chcemy, aby zmiany były stałe przy każdym uruchomieniem systemu to do pliku /etc/environment dodajemy następującą linnie:
DISPLAY=192.168.10.126:0
Konfiguracja po stronie Windowsa
Tymczasowo wyłączamy firewall dla sieli lokalnej. Ułatwi nam to prace, pod koniec ponownie aktywujemy zaporę i dodamy do niej odpowiednie reguły.
Instalujemy serwer X vcxsrv (opens new window). Najlepiej jeśli jako katalog docelowy wybierzemy taki, który nie zawiera spacji. W moim przypadku jest to "D:\bin\VcXsrv".
Generujemy klucz SSH w formacie OpenSSH przy pomocy PuTTYgen, otwieramy plik klucza i wybieramy Conversions>Export OpenSSH
- Instalujemy potrzebne moduły do pythona 3:
pip3 install paramiko
pip3 install cryptography==2.4.2
pip install ifaddr
Popraw ścieżki w pliku scripts/run_x11.py oraz w skryptach bat.
Uruchom zdalną sesję lub aplikacje przy pomocy skryptów .bat.
Jak to działa
Skrypt powłoki windows wywołuje skrypt pythona, który jest odpowiedzialny za:
- Sprawdzenie, czy serwer X jest uruchomiony i jego uruchomienie
- Dodanie adresu klienta do puli adresów, z których akceptujemy połączenia
- Połączenie się ze stacją Linux przy pomocy SSH, konfiguracja wyświetlania zdalnego i wywołanie polecenia.
Reguły dla windows defender
Dla potrzeb naszej konfiguracji tymczasowo wyłączyliśmy windows defender, jednak teraz gdy już wszystko mamy uruchomione i działające możemy ponownie aktywować ochronę jedynie dodając do niej dwie reguły.
Otwieramy konfiguracje windows defender
Pozwalamy naszej maszynie odpowiadać na PING, de/aktywując regułę opisaną jako "Udostępnienie plików i drukarek (żądanie echa ICMPv4)"
- Tworzymy nową regułę otwierającą połączenia przychodzące dla portów TCP 6000-6010
Info
Jeśli pomimo tej instrukcji masz problem z konfiguracją, rozważ skorzystanie z moich usług.