Windows-on a felhasználó a grafikus felülettel azonosítja magát az operációs rendszert. Linux/Unix-on viszont (főleg régebben) külön kellett felépíteni és beállítani azt, hogy grafikus felületet is használhassunk. Ezáltal a Linux felhasználó jobban rá van kényszerítve, hogy tudja milyen komponensekből épül fel az, hogy ő egy böngészőben egy weboldalt lát. Amennyiben megismerjük a Grafikus Felület komponenseit, egyből látni is fogjuk, hogy milyen egyszerűen tudunk grafikus felületet nyitni egy gépen úgy, hogy ténylegesen a programok egy másik gépen futnak. Ezáltal egy egyszerű, és butácska vékony klienst létrehozva.
Grafikus felület felépítése
Tekintsük kezdésnek át a grafikus felület felépítését egy tipikus Linux/UNIX rendszeren. Először is fontos leszögezni, hogy a grafikus rendszer neve a X Window System. Sok helyen X11-nek rövidítik, azért mert a jelenlegi fő verzió a 11-es. Ennek ellenére legtöbben csak X-ként hivatkoznak rá, esetleg X-Windows-ként.
Szintén fontos, hogy lássuk, hogy a Grafikus interface Linux/Unix esetében mindig egy Server-Kliens pár. Abban az esetben is, amikor mi nem távolról használjuk. Ilyenkor csupán a szerver és a kliens is ugyan azon a gépen fog futni. Itt viszont érdemes kitérni egy kis magyarázatra. Ugyanis az X Server lesz a felelős a perifériák kezeléséért, és a kép megjelenítésért. Viszont nem az X server kapcsolódik direktben az alkalmazáshoz. Azt az X Client teszi. Amikor egy grafikus környezetet igénylő programot akarunk indítani, az meg fogja automatikusan szólítani az X client-et. Ezek után az X Client felelős azért, hogy a program és az X server között kapcsolatot teremtsen. Így fontos, hogy az X server az, amit futtatnia kell a megjelenítő gépen, az X client pedig ami a programot futtató gépen kell, hogy fusson.
Távoli X elérés koncepció
Bár van lehetőség az X server és X client között direkt elérésre is, ezt mi nem használjuk. Általában egy SSH tunnelt építünk ki, és beállítjuk, hogy a szükséges X forwardingot automatikusan tegye meg a tunnel. Viszont nézzük is mi történik.
SSH kapcsolatot felépíteni nem egy nagy kaland. Tudni kell a távoli gép címét, illetve egy felhasználónevet és jelszót. Ezek után egy ssh paranccsal vagy egy PUTTY (vagy más) kliens segítségével könnyedén beléphetünk a gépre és kaphatunk egy shell-t és egy promptot. Itt még semmilyen X forwarding nincs. Ezt onnan is tudhatjuk, hogy amennyiben egy grafikus interface-t igénylő parancsot futtatunk a következő hibaüzenetet kell kapnunk:
Can’t open display:
Ez arra figyelmeztet, hogy az X client-nek szükséges DISPLAY változó nincs jól beállítva, és nincs X Server amihez tudna csatlakozni. Ez igaz is, hogy a DISPLAY változót lekérve semmit se kapunk vissza.
Természetesen magunk is átüthetjük ezt a változót tetszés szerint. Csak, ha változó mögött nincs egy tényleges X Server, akkor szintén hibaüzenetet fogunk kapni. Nézzük meg egy sematikus ábrán, hogy is lehet ezt könnyen és gyorsan egy SSH tunnel segítségével, automatikusan és biztonságosan kivitelezni.
Először is csatlakoznunk kell a távoli Linux/Unix géphez, ahol fut az X client, és a grafikus interface-t használó alkalmazás.
Ezek után meg kell, hogy teremtsük azt, hogy az X client a távoli gépről a mi általunk használt gépet akarja használni X Server-ként.
Végül már csak egy X Server-t kell indítanunk a saját gépünkön, ami a mi perifériáinkat felhasználva kapcsolatot teremt az X Client-el.
Windows-al
Nézzük, mit kell tennünk abban az esetben, ha Windows-on akarunk megjeleníteni egy Linux/Unix-os programot. Először is szükségünk lesz egy SSH kliensre. Illetve egy X Server programra.
X Server: Xming
SSH Client: Putty
Először is next, next, next finish-el telepítsük az Xming-et.
Ezek után a tálcán megjelenik az Xming ikonja. Ezzel semmit nem kell tennünk, konfigurálnunk. Amennyiben fut, akkor már alkalmas arra, hogy hozzá egy X Client kapcsolódjon.
Ezek után hozzunk létre egy SSH tunnelt. Állítsuk be a a PUTTY-t a következő módon.
Menjünk a Connection / SSH / X11 menübe a bal oldali fa struktúrában. Ott pedig pipáljuk be a Enable X11 Forwarding opciót.
Mensük el a profilt valamilyen néven, hogy ezt ne kelljen minden kapcsolódásnál megtennünk.
Majd csatlakozzunk a kívánt hosthoz.
A csatlakozás után kérjük le a DISPLAY változót.
Ahogy látszik, most automatikusan egy speciális, localhost változó került beállításra. Azért localhost és nem a gépünk címe, mert az SSH tunnel automatikusan át fogja irányítani ezt a forgalmat a mi gépünkre. Most indítsunk el egy grafikus alkalmazást. Legyen ez az xterm. Ami egy grafikus terminál.
Ahogy Látszik a tálcán egy Xming ikon fogja reprezentálni, az indított programot. A program nálunk jelenik meg, viszont a távoli szerveren fog futni.
OSX-el
Az OSX gyakorlatilag egy Unix rendszer. Ennek ellenére az évek alatt oda jutott a fejlesztés, hogy az alapértelmezett X11 komponenseket elhagyta az Apple. A 10.8 esetében pedig már a telepítőn sem található meg. Így a http://xquartz.macosforge.org oldalon kell beszereznünk, és telepítenünk azt. A telepítés után alapértelmezetten elérhető lesz az xQuartz komponens. Külön látnunk, vagy tennünk nem kell semmit.
Most nyissunk egy teminált és SSH-zunk a kívánt szerverre, de figyeljünk oda, hogy a -X kapcsolót is használjuk. Ez lesz a X forwarding opció.
$ ssh -X HOSTNEV
Amennyiben megfelelőképp be tudunk lépni a gépre, úgy az xQuartz automatikusan el fog indulni, és a Dock-on egy új X betűre emlékeztető új program fog elindulni. Ez lesz az OSX X11 szervere. Ahogy látszik, a DISPLAY változó automatikusan beállítódott, és egy xclock nevű grafikus alkalmazást indítva már a saját asztalomon nyílik meg az alkalmazás. Legalábbis úgy látszik. Az a távol szerveren fog futni.
Linux-al
Mivel az egész Linux alapú, így ahogy várni lehetett Linux-al a legegyszerűbb megoldani egy távoli X kapcsolódást. Nem szükséges külön X server beszerzése, hisz valószínűleg a kliensünk rendelkezik grafikus felülettel.
Így csak egy grafikus terminálban a már ismert módon kell kapcsolódnunk a távoli géphez, és futtatni egy grafikus interface-t igénylő alkalmazást.
$ ssh -X HOSTNEV
X forwarding jumpserver-en keresztül
Akkor mi a helyzet, ha nem tudunk közvetlenül be sshzni az adott gépre. Hanem van egy gép, amire bejutva tudunk belépni a szükséges gépre. Akkor már nem lehet X forwarding-ot beállítani? A válasz, az hogy megoldható. Ugyanis az X forwarding és a vele járó SSH tunnel skatujázható. Tehát a jumpserver-re belépünk a már ismertetett módon. Xming, vagy xQuartz. Habár a jumpserverre belépve a session-nek lesz DISPLAY változója, és az ssh kliens is meg fogja tenni a szükséges átirányítást, de ugye még nem azon a szerveren vagyunk, ahol indítani akarjuk a programot, aminek a képét a saját gépünkön akarjuk látni.
Ezért a jumpserveren a következő módon kell továbbmennünk, a kliens gépünkre. Fontos, hogy a parancsot pontosan abban a terminál ablakban adjuk ki, amivel az asztali gépünkről az X forwardingal beléptünk:
$ ssh -X HOSTNEV
Tehát csak az -X kapcsolóval, az X forwardingot tovább visszük. Így lesz egy tunnel és X forwarding a saját gépünk, és a jumpserver között. Majd lesz a jumpserver és a kívánt gép között egy másik ssh tunnel, és X forwarding. Két „csőből” fog kialakulni az a csatorna, amin keresztül mi tudunk kommunikálni.