Na ogół pracując zdalnie na systemie *nix wykorzystujemy konsolę w trybie tekstowym i łączymy się poprzez SSH. W zdecydowanej większości przypadków jest to wystarczające. Ba! na serwerze najczęściej nie ma środowiska graficznego, bo jest zupełnie zbędne.
Są jednak przypadki, kiedy okienka muszą zostać wyświetlone (np. instalacja Oracle). Co wtedy zrobić? Z reguły leniwy administrator raczej nie ma ochoty ruszać się z miejsca, by pracować na serwerze lokalnie, zwłaszcza gdy w serwerowni panuje nieprzyjemny chłód i hałas, a tym bardziej, gdy maszyna znajduje się w odległej lokalizacji. W takim przypadku dobrze jest znać budowę systemu X i wiedzieć jak można ją wykorzystać.
Otóż system X działa w architekturze klient - serwer, co oznacza, że składa się z dwóch elementów - z serwera wyświetlającego okna i klienta czyli oprogramowania, które do serwera przesyła informacje o zmianie okna. Obsługą klawiatury i myszy zajmuje się serwer.
Z tego krótkiego opisu teoretycznego domyśleć można się, że programy znajdują się na naszej zdalnej maszynie, a serwer X musi być uruchomiony na komputerze lokalnym. Przekierowania wyświetlania dokonać możemy podając parametr -display
przy wywołaniu programu (standardowy parametr dla programów pisanych pod X) lub ustawiając zmienną środowiskową DISPLAY
, np.:
server ~ # xterm -display 192.168.1.74:0.0
lub
server ~ # DISPLAY=192.168.1.74:0.0 xterm
Oczywiście po drugiej stronie, czyli na komputerze, przy którym siedzimy, uruchomiony musi być serwer X nasłuchujący połączeń. Domyślny port to 6000, z reguły wyłączony za pomocą przełącznika -nolisten tcp
(trzeba uruchomić bez niego). Dodatkowo musimy zezwolić na połączenie dodając zdalną maszynę do listy za pomocą xhost
:
localhost ~ # xhost +192.168.1.254
Wywołanie xhost
bez parametru wyświetli aktualną listę.
Można również dla bezpieczeństwa tunelować połączenie klienta do serwera korzystając z SSH. W tym celu serwer SSH (na maszynie zdalnej) musi być odpowiednio skonfigurowany (X11Forwarding yes
w pliku sshd_config
dla OpenSSH), program xauth
dostępny na serwerze, a uruchamiając klienta podać należy przełącznik -X
(lub wpisać ForwardX11
na stałe do pliku z parametrami konfiguracyjnymi klienta SSH).
Powyższy opis jest poprawny, jeśli pracujemy wykorzystując system *nix. Co w przypadku, gdy na naszej stacji zainstalowane mamy okienka z Microsoft? Spokojnie, istnieją implementacje X Window System dla systemów z rodziny Microsoft Windows. Jedną z nich jest bezpłatny Xming. Ale możemy sprawdzić również płatne WinaXe lub X-Win32, które testowo pozwalają na 30 min pracy.
Najpopularniejszy klient SSH - PuTTY również pozwala na tunelowanie połączeń (Category -> Connection -> SSH -> X11 -> Enable X11 forwarding).
Jeśli chodzi o wydajność wspomnianych rozwiązań, to raczej nie powinien być to kluczowy argument przy wyborze, niemniej wykonałem proste testy za pomocą x11perf i wynik wygląda następująco (względem serwera X i wyświetlania lokalnego; im wyższy tym lepszy; dwa środowiska testowe):
- WinaXe + SSH X11Forwarding - 3%, 54%
- WinaXe - 15%, 153%
- X-Win32 + SSH X11Forwarding - 2,9%, 49%
- X-Win32 - 8,3%, 152%
- Xming + SSH X11Forwarding - 3,2%, 54%
- Xming - 14%, 153%
Środowiska testowe mocno się różniły - pierwsze to zwirtualizowany system w Microsoft Virtual PC, drugi, to system zainstalowany bezpośrednio na maszynie. Niemniej jednak pomiędzy omawianymi implementacjami X Servera dużych różnic nie ma.
Jak mówi slogan: "Skoro nie widać różnicy, to po co przepłacać". Jeśli nie wykorzystujemy specyficznych cech danego programu, w dodatku używamy go sporadycznie, to darmowa wersja Xming zupełnie wystarczy.