X-Window — основа графического интерфейса в Unix. Рендеринг происходит на стороне клиента. Программа, занимающаяся рендерингом, называется X-server.
X2GO — комбинация X-Window, ssh и сжатия данных
Протокол Remote Desktop основан на пересылке битмапов отрендеренных на сервере. На сервере запускается X-server, состоящий из xRDP и xorgxrdp. На клиенте используются remmina или rdesktop.
VNC — еще один протокол, основанный на пересылке битмапов. Сервер Xvnc (X-server на входе и VNC сервер на выходе). Клиент TigerVNC.
Изначально X-Window это клиент серверная архитектура и сетевой протокол передачи графических примитивов и событий ввода
X-Server рисует примитивы и принимает ввод от устройств. Может быть реализован на уровне драйверов видеокарт (XOrg), на OpenGL, на DIRECTX, в буфере в памяти (Xvfb), в окне другого X-Server'а (Xnest)
Расширения протокола обеспечивают эффективность на локальном ПК. Composite (рендеринг за пределами окна), XRender (аппаратное ускорение), GLX (OpenGL)
X-Server обеспечивает корневое окно и иерархию вложенных окон, но не дает интерактивных средств для управления окнами
Window manager создает, разворачивает, сворачивает и перемещает окна. Рисует в окнах рамочки.
Клиент получает окно, скорее всего вложенное в окно Window manager
Session Manager обеспечивает запуск комплекса программ для формирования рабочего стола
Клиенты используют библиотеку (классическая XLib, с 2001 года XCB X protocol C-language Binding)
Внешний вид приложения определяется библиотекой виджетов. Athena Widgets, Motiff, GTK, Qt, wxWidgets
На одном компьютере может быть запущено несколько X-серверов.
Доступ клиентов к серверу идет через сокет. Может использоваться Unix-сокет или Inet-сокет
Номер сервера кодируется в имени Unix-сокета (/tmp/.X11-unix/X0) или в номере порта для TCP/IP (6000 + номер сервера)
Для клиента адрес сервера определяется переменной DISPLAY в формате [хост]:сервер[.экран]
Локальный сервер может быть запущен без доступа по TCP
/usr/bin/X11/X -nolisten tcp
Ограничение доступа по IP.
xhost +192.168.1.12
MIT-Magick-Cookie основан на знании сервером и клиентом разделяемого секрета У клиента секреты хранятся в файле ~/.Xauthority
mcookie
— генерация 128 разрядного числа, xauth
— добавление его (на X-Server ?) в файл ~/.Xauthority
xauth add :0 . `mcookie`
ssh
c опцией -X
копирует пробрасывает порт локального сервера на удаленную машину и одновременно добавляет куки в .Xauthority
При запуске графических программ через sudo
надо предпринять дополнительные усилия. Команда sudo может чистить переменные окружения (в том числе DISPLAY), кроме того, у пользователя, от имени которого выполняется команда, свой ~/.Xauthority, в который надо скопировать значение куки.
Mobaxterm - комплекс из XOrg, утилит GNU, ssh и запускалки для Windows. Один самораспаковывающийся файл. Имеет свой оконный менеджер.
Xming - сервер, который запускается через xlаunch
в нескольких режимах:
+ полноэкранное корневое окно,
+ корневое окно в окне Windows,
+ свой оконный менеджер и каждое приложение в своем окне Windows
X2GO — кроссплатформенное сочетание X-сервера, ssh и сжатия данных
При старте компьютера через systemd
— graphical.target
Скриптом startx
.
startx
:mcookie
создает MIT-cokie и регистрирует ее;xinit
, передавая ему команды для запуска клиента и сервераxinit
получает две группы параметров: команда на старт сервера и команда на старт клиента.
Если первый параметр группы начинается с '/' или '.', то выполняется он; иначе проверяются переменные окружения XINITRC и XSERVERRC и, если они установлены, то соответствующие файлы указываются в качестве команд для запуска; иначе выполняется команда по умолчанию. Затем xinit
делает два fork() и стартует сервер и клиент.
xinit $clientargs -- $serverargs $authdisplay &
Файлы для запуска клиента и сервера по умолчанию
В startx
userclientrc="$HOME/.xinitrc"
userserverrc="$HOME/.xserverrc
sysclientrc=/etc/X11/xinit/xinitrc
sysserverrc=/etc/X11/xinit/xserverrc
В xinit
default_server = "X";
default_display = ":0";
default_client = "xterm -geometry +1+1 -n login";
В качестве клиента в xinit может передаваться команда графического логина (xdm) или команда менеджера окон или команда менеджера сессий
Менеджер сессий позволяет сохранять расположение и содержимое окон на рабочем столе. Для восстановления содержимого окон нужна поддержка со стороны приложений.
Для общения менеджера сессий с приложениями используется X Session Management Protocol (XSMP). Адрес менеджера сессий хранится в переменной SESSION_MANAGER
Как правило команда менеджера сессий имеет название типа name-session. Например: gnome-session, kde-session, mate-session.
Классические: twm
(в поставке XOrg), fvwm
, xfvm4
, icewm
Тайловые: xmonad
, ion
Сочетающие функции WM с функциями ускорения: compiz
(OpenGL)