Masz serwer Linux i chcesz uruchomić na nim aplikację graficzną, ale siedzisz przed Windows? Przedstawiam kilka rozwiązań.

W starszym wpisie opisywałem X11 forwarding w kontekście sterowania maszyną CNC — tamto podejście opierało się na bezpośrednim ustawianiu zmiennej DISPLAY i otwarciu portów 6000-6010 w firewallu. W tym poście pokazuję cztery metody, w tym bezpieczniejszy wariant X11 tunelowany przez SSH, który nie wymaga otwierania dodatkowych portów.

Porównanie metod

Zestawienie czterech metod zdalnego dostępu graficznego
CechaX11 + VcXsrvX2GoVNCxRDP
Typ dostępuPojedyncze oknaOkna lub pulpitPełny pulpitPełny pulpit
SzyfrowanieSSH (wbudowane)SSH (wbudowane)Opcjonalnie (tunel)TLS / tunel
Wydajność grafikiNiska–średniaWysoka (kompresja NX)ŚredniaŚrednia–wysoka
Suspend/resume sesjiNieTakTakNie
Klient po stronie WindowsVcXsrv + SSHX2Go ClientDowolny klient VNCWbudowany RDP
Trudność konfiguracjiNiskaŚredniaŚredniaNiska

Metoda 1 — X11 over SSH + VcXsrv

Najprostsza opcja. Protokół X11 pozwala przesyłać okna aplikacji graficznej przez tunel SSH. Na Windows potrzebujesz serwera X — najczęściej VcXsrv.

Konfiguracja serwera Linux

Edytuj /etc/ssh/sshd_config i upewnij się, że X11 forwarding jest włączony:

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

Zainstaluj wymagane pakiety i zrestartuj SSH:

sudo apt install -y xauth x11-apps
sudo systemctl restart ssh

Konfiguracja Windows

  1. Pobierz i zainstaluj VcXsrv.
  2. Uruchom XLaunch z parametrami:
    • Multiple windows — każda aplikacja w osobnym oknie
    • Display number: 0
    • Start no client
    • Zaznacz Disable access control
  3. Zapisz konfigurację do pliku .xlaunch.

Wbudowany SSH w Windows nie obsługuje X11 forwarding. Polecenie ssh -X wykona się bez błędu, ale DISPLAY pozostanie puste i żadna aplikacja graficzna się nie otworzy. Do X11 forwarding użyj PuTTY (Connection → SSH → X11 → Enable X11 forwarding, X display location: localhost:0) lub MobaXterm, który ma wbudowany serwer X i SSH — zero dodatkowej konfiguracji.

Połączenie

ssh -X user@serwer.lan # Podstawowe połączenie X11
ssh -X -C user@serwer.lan # X11 z kompresją
ssh -Y user@serwer.lan # Trusted forwarding — mniej restrykcyjne

Test — po połączeniu uruchom:

xclock &     # powinno otworzyć zegar na pulpicie Windows
xeyes &      # klasyczne oczy śledzące kursor

Rozwiązywanie problemów

Najczęstsze problemy z X11 forwarding
ProblemRozwiązanie
cannot open displaySprawdź czy VcXsrv działa. Na serwerze: echo $DISPLAY — powinno zwracać np. localhost:10.0
Okno się nie pojawiaFirewall Windows może blokować VcXsrv — dodaj wyjątek w zaporze
Wolne renderowanieUżyj ssh -X -C lub przejdź na X2Go
X11 connection rejectedUżyj ssh -Y zamiast ssh -X

Flaga -X włącza X11 forwarding z ograniczeniami bezpieczeństwa. Flaga -Y wyłącza te ograniczenia (trusted forwarding) — niektóre aplikacje wymagają -Y, żeby się uruchomić.

Metoda 2 — X2Go

X2Go to rozwiązanie oparte na protokole NX, które kompresuje obraz znacznie lepiej niż czyste X11. Pozwala na zawieszanie i wznawianie sesji, możesz odłączyć się od serwera, a po ponownym połączeniu wszystko jest tam, gdzie je zostawiłeś.

Konfiguracja serwera Linux

sudo apt install -y x2goserver x2goserver-xsession
sudo apt install -y xfce4 xfce4-terminal # Zainstaluj lekkie środowisko graficzne

Konfiguracja Windows

  1. Pobierz X2Go Client i zainstaluj.
  2. Utwórz nową sesję:
    • Host: adres serwera (np. serwer.lan)
    • Login: twój użytkownik
    • Session type: XFCE

Tryby pracy

X2Go może pracować w dwóch trybach:

Tryby pracy w X2Go
TrybSession TypeOpisPrzypadek użycia
Pełny pulpitXFCEKompletne środowisko graficzne z panelami i menadżerem plikówPraca zdalna z pełnym dostępem do systemu
Pojedyncza aplikacjaSingle ApplicationUruchamia tylko jedną aplikację (np. wireshark) — bez całego pulpituSzybki dostęp do konkretnego narzędzia

X2Go obsługuje współdzielenie schowka i przekazywanie dźwięku. Do współdzielenia folderów użyj zakładki Shared folders w ustawieniach sesji.

Metoda 3 — VNC

VNC działa inaczej niż X11 forwarding — zamiast przekazywać pojedyncze okna, tworzy wirtualny pulpit na serwerze i przesyła obraz tego pulpitu do klienta. Pulpit istnieje niezależnie od połączenia — możesz się rozłączyć i wrócić później.

Konfiguracja serwera Linux

sudo apt install -y tigervnc-standalone-server tigervnc-common xfce4

# Ustaw hasło VNC
vncpasswd

# Utwórz plik xstartup — określa co VNC ma uruchomić
mkdir -p ~/.vnc
cat > ~/.vnc/xstartup << 'EOF'
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec startxfce4
EOF
chmod +x ~/.vnc/xstartup

# Uruchom serwer VNC na display :1
vncserver :1 -geometry 1920x1080 -depth 24 -localhost no

# Otwórz port w firewallu
sudo ufw allow 5901/tcp

Bez pliku ~/.vnc/xstartup VNC uruchomi się, ale zaraz po zalogowaniu wyświetli błąd i rozłączy się — serwer nie wie jakie środowisko graficzne ma uruchomić.

Aby zatrzymać serwer:

vncserver -kill :1

Połączenie z Windows

Pobierz dowolny klient VNC — np. TigerVNC Viewer lub RealVNC Viewer. Połącz się na adres serwer.lan:5901.

Metoda 4 — xRDP

xRDP pozwala łączyć się z serwerem Linux za pomocą wbudowanego w Windows klienta Podłączanie pulpitu zdalnego (mstsc). Zero dodatkowego oprogramowania po stronie Windows.

Konfiguracja serwera Linux

sudo apt install -y xrdp xfce4

echo "xfce4-session" > ~/.xsession

sudo systemctl enable xrdp
sudo systemctl start xrdp
sudo ufw allow 3389/tcp

Połączenie z Windows

  1. Otwórz Podłączanie pulpitu zdalnego (Win+Rmstsc).
  2. Wpisz adres serwera: serwer.lan.
  3. Zaloguj się swoimi danymi z serwera Linux.

Rozwiązywanie problemów

Problemy z xRDP
ProblemRozwiązanie
Czarny ekran po zalogowaniuUpewnij się że plik ~/.xsession istnieje i zawiera xfce4-session
Koliduje z aktywną sesjąxRDP może nie działać poprawnie gdy ten sam user ma aktywną sesję konsolową — wyloguj się lokalnie
Wolne działanieWyłącz efekty kompozytora w XFCE: Settings → Window Manager Tweaks → Compositor