Графичните приложения в Unix използват мрежова клиент/сървър технология, известна като X Window System, X11 (по версията на използвания мрежов протокол) или просто X. За разлика от много други клиент/сървър схеми, при X ролите са разменени – сървърът се намира на потребителската машина, докато графичното приложение може да се намира на произволно място в света, достъпно през TCP/IP мрежа. За указване на графичния сървър, където програмите трябва да изобразяват изхода си, се използва променливата на обкръжението $DISPLAY, чиято стойност има вида:

адрес.на.X11.сървър:дисплей.екран

където:

  • адрес.на.X11.сървър — IP адрес или DNS име на X11 сървъра. Във всички случаи това е адресът на вашата машина, освен в случаите, когато се използва тунелиране на X11 през SSH (виж по-долу);
  • дисплей — пореден номер на дисплея, на който работи X11 сървъра. Най-често е 0, но по различни причини може да има друга стойност. Директно е свързан с номера на TCP порта, на който X11 сървърът приема мрежови връзки от клиентите: TCP порт = 6000 + дисплей;
  • екран — пореден номер на екрана в рамките на един X11 дисплей. Най-често е 0, но при многоекранни системи (напр. при използване на Xinerama) може да има няколко различни екрана. При използване на подразбиращата се стойност 0, цялата част .екран може да се пропусне и стойността на $DISPLAY придобива по-компактния вид адрес.на.X11.сървър:дисплей.

За автентикация на клиентите, X11 предвижда няколко различни варианта, които зависят от конкретната реализация. Указването на механизма за автентикация и необходимите за него данни става във файла .xauth, който се намира в домашната ви директория на машината, където се изпълняват графичните приложения.

Комуникацията между приложенията и X11 сървъра може да става както директно, така и през шифрован тунел с използване на SSH.

Директна връзка

При директната връзка вие указвате (ръчно или автоматично в .bashrc) адреса на вашия X11 сървър в променливата $DISPLAY. Този метод има редица недостатъци:

  • работи само, ако вашата машина има публичен IP адрес или се намира в обединената мрежа на катедра АФ и катедра ТФ на ФзФ. Не работи, ако се намирате зад NAT, т.е. ако вашият компютър има IP адрес от вида 10.x.x.x, 192.168.x.x (изключение правят адресите 192.168.2.x в мрежата на АФ и ТФ на ФзФ), 172.16.x.x до 172.31.x.x;
  • трябва да направите X11 сървъра видим отвън, ако използвате защитна стена (firewall);
  • трябва да използвате опростен механизъм за контрол на достъпа до X11 сървъра, базиран само на IP адреса на клъстера. Всеки друг потребител на системата може да свърже свое графично приложение с вашия сървър, което представлява известен риск за сигурността;
  • всеки, който има достъп до мрежовите транспортни съоръжения между клъстера и вашия компютър, може да “подслуша” клавиатурния ви вход.

Ако все пак решите да използвате този метод, то командите, които трябва да изпълните, са:

  • за sh,bash,ksh,zsh:
DISPLAY=server.address:dpy.scr
export DISPLAY

  • за csh и tcsh:

setenv DISPLAY server.address:dpy.scr

Следва да заместите server.address, dpy и scr със съответните им стойности.

SSH тунел

SSH протоколът, който използвате за включване в клъстера, работи чрез установяване на един или няколко канала за сигурен пренос на данни, като един от тези канали пренася вашата интерактивна сесия. В SSH са предвидени механизми, с помощта на които могат да се пренасочват произволни TCP връзки, както от страна на вашата машина, така и от страна на SSH сървъра. При пренасочване на X11 обаче се случват редица автоматизации от страна на сървъра:

  • генерира се файл с автентикационни данни във вашата домашна директория (~/.xauth);
  • установява се променливата на обкръжението $DISPLAY.

Можете да проверите за успешна реализация на X11 тунелирането чрез командата

echo $DISPLAY

Ако в резултат получите нещо от вида localhost:10.0, то пренасочването е установено правилно. Ако получите празен ред (при sh-подобни обвивки) или съобщение за недефинирана променлива (при csh-подобни обвивки), то поради някаква причина тунелирането не е сработило.

Методът с тунелиране през SSH работи, дори ако вашата машина се намира зад NAT или защитна стена.

X сървъри

Съществува плеяда от комерсиални и безплатни сървъри, реализиращи протокола X11. Ето списък на най-известните такива:

XFree86

Една от най-старите безплатни реализации с отворен код на протокола X11. Има версии за почти всички съществуващи операционни системи, в това число Unix и Unix-подобни такива, Linux, Windows и дори OS/2. Ако използвате стара версия на Linux, то най-вероятно графичната ви подсистема е XFree86.

X.org

Модерен клон на проекта XFree86, получен след конфликт на интереси по отношение на лицензирането на XFree86. Напълно свободен софтуер под X11 (MIT) лиценз. Повечето съвременни Unix-подобни операционни системи и Linux включват X.org.

Mac OS X

Операционната система на Apple включва в себе си X11 сървър, базиран на XFree86 4.4 (в Tiger) или X.org (в Leopard). При Tiger пакетът следва да се избере по време на инсталация или да се сложи след това. Самата Mac OS X използва различна графична подсистема.

Xming

Xming е минималистична, но напълно функционална реализация на X11 за Windows. За разлика от пълномащабните си събратя, Xming включва само графичен сървър, пакет шрифтове и инструменти за интеграция с безплатния SSH клиент PuTTY. Базиран е на изходния код на X.org и като такъв поддържа всички негови разширения, които могат да работят върху платформата Windows. Пакетът е безплатен и може да свалите последната му версия от Sourceforge.

Xming работи само на Windows XP и следващите го версии на Windows — 2003 и Vista.

Hummingbird Exceed

Популярна комерсиална реализация на X11 за Windows. По-пълните версии включват в себе си и вграден SSH клиент.