X-сервер графической системы X Window System

Автор: | 13.12.2018

Графическая система 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-сервера.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *