28 maja 2019

Zdalne X windows LinuxCNC

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

  1. Tymczasowo wyłączamy firewall dla sieli lokalnej. Ułatwi nam to prace, pod koniec ponownie aktywujemy zaporę i dodamy do niej odpowiednie reguły.

  2. 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".

  3. Generujemy klucz SSH w formacie OpenSSH przy pomocy PuTTYgen, otwieramy plik klucza i wybieramy Conversions>Export OpenSSH

PuTTYgen openSSH export
  1. Instalujemy potrzebne moduły do pythona 3:
pip3 install paramiko
pip3 install cryptography==2.4.2
pip install ifaddr
  1. sklonuj repozytorium GitHub (opens new window)

  2. Popraw ścieżki w pliku scripts/run_x11.py oraz w skryptach bat.

  3. 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.

  1. Otwieramy konfiguracje windows defender

  2. Pozwalamy naszej maszynie odpowiadać na PING, de/aktywując regułę opisaną jako "Udostępnienie plików i drukarek (żądanie echa ICMPv4)"

ping windows defender
  1. Tworzymy nową regułę otwierającą połączenia przychodzące dla portów TCP 6000-6010
nowa zasada windows defender

Info

Jeśli pomimo tej instrukcji masz problem z konfiguracją, rozważ skorzystanie z moich usług.

Linki