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
| Cecha | X11 + VcXsrv | X2Go | VNC | xRDP |
|---|---|---|---|---|
| Typ dostępu | Pojedyncze okna | Okna lub pulpit | Pełny pulpit | Pełny pulpit |
| Szyfrowanie | SSH (wbudowane) | SSH (wbudowane) | Opcjonalnie (tunel) | TLS / tunel |
| Wydajność grafiki | Niska–średnia | Wysoka (kompresja NX) | Średnia | Średnia–wysoka |
| Suspend/resume sesji | Nie | Tak | Tak | Nie |
| Klient po stronie Windows | VcXsrv + SSH | X2Go Client | Dowolny klient VNC | Wbudowany RDP |
| Trudność konfiguracji | Niska | Średnia | Średnia | Niska |
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
- Pobierz i zainstaluj VcXsrv.
- Uruchom XLaunch z parametrami:
- Multiple windows — każda aplikacja w osobnym oknie
- Display number: 0
- Start no client
- Zaznacz Disable access control
- 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
| Problem | Rozwiązanie |
|---|---|
cannot open display | Sprawdź czy VcXsrv działa. Na serwerze: echo $DISPLAY — powinno zwracać np. localhost:10.0 |
| Okno się nie pojawia | Firewall Windows może blokować VcXsrv — dodaj wyjątek w zaporze |
| Wolne renderowanie | Użyj ssh -X -C lub przejdź na X2Go |
X11 connection rejected | Uż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
- Pobierz X2Go Client i zainstaluj.
- Utwórz nową sesję:
- Host: adres serwera (np.
serwer.lan) - Login: twój użytkownik
- Session type: XFCE
- Host: adres serwera (np.
Tryby pracy
X2Go może pracować w dwóch trybach:
| Tryb | Session Type | Opis | Przypadek użycia |
|---|---|---|---|
| Pełny pulpit | XFCE | Kompletne środowisko graficzne z panelami i menadżerem plików | Praca zdalna z pełnym dostępem do systemu |
| Pojedyncza aplikacja | Single Application | Uruchamia tylko jedną aplikację (np. wireshark) — bez całego pulpitu | Szybki 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
- Otwórz Podłączanie pulpitu zdalnego (
Win+R→mstsc). - Wpisz adres serwera:
serwer.lan. - Zaloguj się swoimi danymi z serwera Linux.
Rozwiązywanie problemów
| Problem | Rozwiązanie |
|---|---|
| Czarny ekran po zalogowaniu | Upewnij 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łanie | Wyłącz efekty kompozytora w XFCE: Settings → Window Manager Tweaks → Compositor |