Notatnik techniczny

Zdalne X windows LinuxCNC

Co chcemy osiągać

Chcemy uruchomić aplikacje graficzną na systemie z 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

Video jak łatwo możemy mieć zdalnie okna z LinuxCNC na systemie windows.

Założenia

W tym artykule zakładam ze pracujemy na LinuxCNC, który bazuje na dystrybucji debian. Wszelkie opisy zakładają ze przygotujemy konfiguracje dla komputera sterującego maszyną numeryczną CNC. Dodatkowo nie chcemy na stałe konfigurować ekranu na maszynie CNC, wolimy aby odbywało się to dynamicznie przy każdym zdalnym podłączeniu.

Będziemy mogli sterować frezarką zdalnie siedząc przy komputerze z systemem windows.

Czytelnicy, którzy chcą zastosować podobną konfiguracje na Ubuntu powinni być w stanie to zrobić z minimalnymi modyfikacjami.

Konfiguracja

Zakładam ze 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ę ze wybrane maszyny zawszę będą miały taki sam adres IP, wiec albo ustawimy je statycznie albo na routerze poinstruujemy serwer DHCP aby zawsze przydzielał ten sam adres IP dla naszych maszyn.

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ę ze możemy pingować wzajemnie nasze 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 szystemu to do pliku /etc/environment dodajemy nastepują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. 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
    
  2. sklonuj repozytorium GitHub

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

  4. Uruchom zdalną sesje 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

Usługi

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

Linki