Графическая система W: [X Window System] предоставляет приложениям операционной системы возможность представления графической информации на графических устройствах вывода, в большинстве случаев — на дисплеях растровых видеотерминалов.
Основной принцип графической системы X позволяет множеству графических приложений осуществлять «одновременный» графический вывод за счёт окон, совместно отображаемых на дисплеях.
Содержимое окон определяется их владельцами — графическими приложениями, а управление окнами (их создание, уничтожение, отображение на дисплеях, перекрытие другими окнами, перемещение, изменение размеров и пр.) и возложено на оконную систему.
Действительной особенностью оконной системы X является ее устройство в виде сетевой службы, что позволяет разным компонентам системы выполняться в виде отдельных процессов на разных узлах сети и взаимодействовать при помощи соответствующих средств, в большинстве случаев — с использованием сетевых сокетов семейств ip и ipv6.
При выполнении компонент оконной системы на одном узле в целях повышения производительности используют локальные (файловые) сокеты unix и даже разделяемую память.
Как любая другая сетевая служба, оконная система X состоит из X-сервера и X-клиентов, взаимодействующих между собой посредством W:[X протокола].
Первичной компонентой оконной системы X является X-сервер, основная задача которого заключается в управлении оборудованием графического вывода и ввода.
Под управлением X-сервера находятся графические дисплеи (видеоадаптеры и подключенные к ним мониторы), устройства «графического» интерфейса с пользователем (манипуляторы «мышь», трекболы, тачпады, графические планшеты и пр.), а кроме того, устройства «символьного» взаимодействия с пользователем — клавиатуры.
Именно X-сервер принимает подключения от X-клиентов и согласно их запросам создает окна, изменяет их размер, отображает или скрывает окна на дисплеях, сообщает положение курсора, рисует текст, линии, точки, прямоугольники, дуги, полигоны и пр.
В обратную сторону X-сервер отправляет X-клиентам информацию о событиях нажатия клавиш клавиатур, кнопок мыши и планшетов, оповещает о движении курсора и т. д.
Содержимое
Аппаратный X-сервер
homer@ubuntu:~$ pgrep -l Xorg
1466 Xorg
homer@ubuntu:~$ ps о pid,tty,cmd p 1466
PID TT CMD
1460 tty7 @ /usr/bin/Х :0 -auth /var/run/lightdn/root/:0 -nolisten tcp vt7 …
homer@ubuntu:~$ sudo lsof -p 1466 -a /dev
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Xorg 1460 root men CHR 226,0 1563 /dev/dri/cardG
Xorg 1460 root 7u CHR 4,7 0t0 1049 /dev/tty7
Xorg 1460 root 8u CHR 10,63 0t0 1026 /dev/vga_arbiter
Xorg 1460 root 9u CHR 226,0 0t0 1563 /dev/drl/cardO
Xorg 1460 root 12u CHR 13,66 0t0 8232 /dev/lnput/event2
Xorg 1460 root 17u CHR 13,68 0t0 1590 /dev/lnput/event4
homer@ubuntu:~$ sudo lsof -p 1466 -a -U
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Xorg 1460 root 1u unix 0xefbbad00 0t0 12475 socket
Xorg 1460 root 3u unix 0xefbbaa80 0t0 12476 /tmp/.X11-unix/X0
Xorg 1460 root 6u unix 0xefbba800 0t0 12483 socket
Xorg 1460 root 60u unix 0xe3dacf00 0t0 626936 socket
homer®ubuntu:~$ sudo lsof -p 1460 -a -l
Листинг выше иллюстрирует сервер Xorg, использующий специальные файлы устройств видеокарты /dev/dri/card0 и устройств пользовательского ввода /dev/input/* для организации на виртуальном терминале) /dev/tty7 графического дисплея с номером :0.
При наличии нескольких видеокарт можно запустить несколько X-серверов с номерами графических дисплеев :1, :2 и т. д., например, для одновременной работы разных пользователей в оконной системе X.
Для взаимодействия с X-клиентами сервер создает локальный (файловый) сокет /tmp/.x11-unix/хе0, но не создает сетевой сокет (в силу своих параметров запуска -noilsten tcp), поэтому подключение X-клиентов по сети к такому серверу невозможно.
Основные свойства X-сервера и управляемых им графических дисплеев можно получить при помощи утилиты xdpyinfo, см. листинг ниже.
Свойства дисплея X-сервера
homer@ubuntu:~$ xdpyinfo | grep -A 4 screen
default screen number: 0
number of screens: 1
screen #0:
dimensions: 1366×768 pixels (361×203 millimeters)
resolution: 96×96 dots per inch
depths: 24, 1, 4, 8, 15, 16, 32 *
root window id: 0xae
Оконная система X и ее X-протокол на текущий момент времени обросли массой расширений, одним из которых является расширение W:[RANDR], позволяющее управлять сменой графического разрешения, ориентацией, подключением и отключением видеовыходов дисплея X-сервера и т. д,
В примере из листинга ниже иллюстрируется утилита xrandr реализующая расширение RANDR, которая может использоваться как для запроса списка видеовыходов (и поддерживаемых ими видеорежимов работы), так и для переключения заданного видеовыхода в тот или иной видеорежим и смены ориентации изображения.
Расширения X-сервера: RANDR
homer@ubuntu:~$ xdpyinfo | grep RANDR
RANDR
homer@ubuntu:~$ xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
LVDS1 connected 1366×768+0+0 (normal left inverted right x axis у axis) 309mm x 174mm
1366×768 60.1*+
1360×768 59.8 60.0
1024×768 60.0
800×600 60.3 . 56.2
640×480 59.9
VGA1 disconnected (normal left Inverted right x axis у axis)
HDMI1 disconnected (normal left inverted right x axis у axis)
DPI disconnected (normal left inverted right x axis у axis)
homer@ubuntu:~$ xrandr —output LVDS1 —mode 1024×768 —rotate left
Расширение GLX является реализацией программного интерфейса W: [OpenGL] для оконной системы X и предназначено для передачи «команд» OpenGL внутри X-протокола.
Программный интерфейс OpenGL используется приложениями, интенсивно работающими с 2D/3D-графикой (в большинстве случаев — игры, системы моделирования и визуализации) и нацеленными на аппаратный рендеринг «команд» OpenGL на стороне сервера. Хотя на сегодняшний день даже «обычные» пользовательские окружения GNOME и KDE интенсивно используют OpenGL для спецэффектов.
Утилита glxinfo, показанная в листинге ниже, предназначена для запроса свойств GLX расширения и свойств самого OpenGL-рендерера.
Расширения X-сервера: GLX
homer@ubuntu:~$ xdpyinfo |grep GLX GLX
SGI-GLX
homer@ubuntu:~$ glxinfo | grep -E «render(er|ing)|version»
direct rendering: Yes «*
server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
OpenGL Tenderer string: Mesa DRI Intel(R) Sandybridge Mobile X86/WX/SSE2
OpenGL version string: 3.0 Mesa 8.0.4 OpenGL shading language version string; 1.30
Необходимо заметить, что все эти утилиты — xdpyinfo, xrandr и glxinFo —являются простейшими X-клиентами и используют X-протокол для опроса X-сервера.