Вы здесь

X-Window

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-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-Server через сокет

На одном компьютере может быть запущено несколько X-серверов.

Доступ клиентов к серверу идет через сокет. Может использоваться Unix-сокет или Inet-сокет

Номер сервера кодируется в имени Unix-сокета (/tmp/.X11-unix/X0) или в номере порта для TCP/IP (6000 + номер сервера)

Для клиента адрес сервера определяется переменной DISPLAY в формате [хост]:сервер[.экран]

Локальный сервер может быть запущен без доступа по TCP

/usr/bin/X11/X -nolisten tcp

Авторизация в X-Server

Ограничение доступа по 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, в который надо скопировать значение куки.

X-серверы для Windows

Mobaxterm - комплекс из XOrg, утилит GNU, ssh и запускалки для Windows. Один самораспаковывающийся файл. Имеет свой оконный менеджер.

Xming - сервер, который запускается через xlаunch в нескольких режимах: + полноэкранное корневое окно, + корневое окно в окне Windows, + свой оконный менеджер и каждое приложение в своем окне Windows

X2GO — кроссплатформенное сочетание X-сервера, ssh и сжатия данных

Запуск X-ов

При старте компьютера через systemdgraphical.target

Скриптом startx.

Скрипт startx:

  • Находит свободный номер дисплея, проверяя /tmp/X-lock*;
  • С помощью mcookie создает MIT-cokie и регистрирует ее;
  • Стартует xinit, передавая ему команды для запуска клиента и сервера

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)

Яндекс.Метрика