Использование X11 — 1. Введение
X Window System, версия 11 (или сокращенно X11) является системой графического отображения с прозрачной для сети архитектурой клиент-сервер. Она позволяет приложениям графически создавать на экране пиксели, линии, тексты, изображения и т.п. X11 также имеет дополнительные библиотеки, благодаря которым приложения могут свободно рисовать интерфейсы пользователя — кнопки, поля для текста и т.п.
X11 фактически является стандартной системой графического отображения в мире Unix. Она поставляется вместе с Linux, *BSD и большинством коммерческих вариантов Unix. На ее основе работают такие виды среды рабочего стола, как CDE, KDE и GNOME.
1.2 Что такое Mac OS X?
Mac OS X — операционная система, производителем которой является Apple. Как и предшествующие NeXTStep и OpenStep, она основана на BSD и таким образом входит в семейство операционных систем Unix. Но при этом она выпускается с системой графического отображения, являющейся частной собственностью. Графический процессор называется Quartz, а интерфейс Aqua, хотя оба названия часто используются как взаимозаменяемые.
1.3 Что такое Darwin?
Darwin по сути является упрощенной версией Mac OS X, которую можно получить бесплатно с полным исходным кодом. Она не содержит Quartz, Aqua и прочую сопутствующую технологию. По умолчанию она предлагает только текстовую консоль.
1.4 Что такое XFree86?
XFree86 — реализация X11 на основе исходного кода. Первоначально она была разработана для применения на ПК Intel x86, отсюда и ее название. В настоящее время применяется во многих архитектурах и операционных системах, в т.ч. OS/2, Darwin, Mac OS X и Windows.
1.5 Что такое Xtools?
Xtools — продукт Tenon Intersystems. Это версия X11 для Mac OS X, основанная на XFree86.
1.6 Клиент и сервер
X11 имеет архитектуру клиент-сервер. Есть одна центральная программа, которая фактически создает графику и координирует доступ через несколько приложений; это сервер. Приложение, желающее создать графику с применением X11, соединяется с сервером и дает указание, что именно надо нарисовать. В контексте X11 приложения называются клиентами.
X11 позволяет серверу и клиентам находиться на разных машинах, в результате чего часто происходит путаница в терминах. В среде с рабочими станциями и серверами вы будете использовать сервер отображения X11 на машине рабочей станции, а приложения (клиенты X) — на машине сервера. Таким образом, говоря «сервер», вы имеем в виду программу сервера отображения X11, а не машину, спрятанную в вашем шкафу.
1.7 Что означает «бескорневой» («rootless»)?
Немного предыстории: X11 моделирует экран в виде иерархии окон, находящихся одно в другом. В верхней части иерархии находится специальное окно размером с экран, вмещающее все другие окна. Оно содержит фон рабочего стола и называется «корневым окном».
Теперь вернемся к нашей теме: Как и любая графическая среда, X11 написана для самостоятельной работы и полного управления экраном. В Mac OS X Quartz уже управляет экраном, т. обр. для одновременной работы обеих систем надо совершить определенные действия.
Одно из возможных действий — позволить системам работать поочередно. Каждая среда получает в распоряжение весь экран, но в определенный момент времени видна только одна из них и пользователь может перемещаться между ними. Это называется полноэкранным или корневым режимом. Корневым — потому что есть абсолютно нормальное корневое окно на экране X11, работающее также, как и в других системах.
Другое действие — комбинирование окон двух видов среды. Это устраняет необходимость перемещения между экранами, а также избавляет от корневого окна X11, т.к. Quartz уже берет на себя заботу о фоне рабочего стола. Поскольку нет корневого (видимого) окна, данный режим называется «бескорневым». Это наиболее удобный способ использования X11в Mac OS X.
1.8 Что такое менеджер окон?
В большинстве видов графической среды вид рамок окон (строка заголовка, кнопка закрытия и т.д.) определяется системой. В X11 это решается иначе. Рамки окон (также называемые «декоративными обрамлениями») в X11 обеспечиваются отдельной программой — менеджером окон. Во многих отношениях менеджер окон является просто еще одним клиентом; он запускается и общается с сервером X через те же каналы.
Существует большой выбор разных менеджеров окон. На сайте xwinman.org имеется исчерпывающий список. Наиболее популярные из них позволяют пользователю настроить вид через т. наз. темы. Многие менеджеры окон также обеспечивают такие дополнительные функции, как всплывающие меню в корневом окне, стыковки и кнопки запуска.
Для Fink скомпилированы многие менеджеры окон — см. текущий список.
1.9 Что такое Quartz/Aqua, Gnome и KDE?
Это виды среды рабочего стола, в числе многих других. Их цель — обеспечение дополнительных границ для приложений, чтобы их вид и поведение были визуально последовательными. Пример:
графический процессор : X11
Границы между графическим процессором, менеджером окон и рабочим столом размыты, т.к. схожая или одинаковая функция может быть реализована одним или несколькими из них. Это одна из причин того, почему отдельный менеджер окон может не работать с отдельной средой рабочего стола.
Многие приложения разработаны для интеграции с отдельным рабочим столом. Чаще всего после инсталляции библиотек среды рабочего стола (и других базовых библиотек) разработанное для данной среды приложение работает с небольшими функциональными потерями или вовсе без них. Примером служит растущий выбор приложений GNOME, которые можно инсталлировать и использовать без применения GNOME. К сожалению, это достижение пока не распространяется на приложения KDE.
Языки: | English | Français | Deutsch | 日本語 (Nihongo) | Русский (Russkiy) | Español | Português | 中文 (简) (Simplified Chinese) |
Последнее изменение: nieder ‚ 04 August 2023 , 05:08 GMT
Сетевые соединения X11
Есть две технологии в ИТ, которые казалось должны были исчезнуть на рубеже прошлого века, но их живучесть и удобство раз за разом отодвигает их уход со сцены. Речь идет об IPv4 и X11. Если первый из них практически во всех аспектах уступает IPv6, то преимущества Wayland, как технологии над X11 очевидны не всем. Wayland вовсе не универсален, как X Windows System, он намного более прост. Это дает ему ряд преимуществ по сравнению с иксами, но в этом же кроются его недостатки.
Если говорить о преимуществах, то это в первую очередь простота реализации и долгожданное избавление пользователей графической среды Linux от таких артефактов перерисовки, как разрывы изображения, a․ k․ a․ tearing. С этим особенно часто сталкиваются обладатели видеокарт NVidia. Хватает и недостатков и противники замены X-сервера напирают на гибкость использования сетевых возможностей в различных сценариях.
As mentioned, X is essentially a networking protocol with graphical displaying capabilities.
На самом деле X11 сетевой протокол с графическими возможностями, а не наоборот. Из этого простого факта следует, что даже если в скором времени основные дистрибутивы Linux перейдут на протокол Wayland, многие из возможностей и примеров использования X сервера будут востребованы еще достаточно долгое время. Удаленный доступ к приложениям и сессиям X.Org — современной реализации X Window System, одна из таких ключевых особенностей системы.
▍ Сетевая структура взаимодействий X-сервера
Наиболее распространенным IPC, т․ е․ способом взаимодействия между процессами, X-клиента и X-сервера, являются сокеты. Их роль в предоставлении API связи с использование TCP/IP, а также сокетов домена Unix. Помимо сокетов клиент и сервер для коммуникации могут также использовать иные каналы IPC, например MIT Shared Memory Extension.
Доменные сокеты Unix (от англ. Unix Domain Sockets, UDS) являются POSIX-механизмом IPC, с помощью которого различные процессы ОС могут взаимодействовать друг с другом. Такие сокеты эффективнее локальных TCP/IP соединений, так как не требуют дополнительных байтов в заголовке протокола. Подобно сокетам TCP/IP, доменные сокеты Unix поддерживают надёжную потоковую передачу данных с помощью SOCK_STREAM. Они также могут работать в режиме упорядоченной ( см․ SOCK_SEQPACKET) и неупорядоченной ( см․ SOCK_DGRAM) передачи датаграмм.
Рис. 1 Сетевое взаимодействие между клиентом и сервером X с помощью UDS.
UDS используют файловую систему ОС в качестве адресного пространства имён (например /tmp/my_xapp ), сами сокеты в ней всего лишь inode, а процессы обращаются к сокетам, так же, как к файлу. Однако обмен данными в активном соединении использует не файловую систему, а только буферы памяти ядра.
Рис. 2 Сетевое взаимодействие между клиентом и сервером X поверх TCP/IP.
Сокеты TCP/IP и UDS создаются с помощью функции CreateWellKnownSockets(). Для этого она обращается к _XSERVTransMakeAllCOTSServerListeners . Эта процедура пробегает по каждому интерфейсу транспорта, поддерживаемого сервером.
static Bool TryCreateSocket(int num, int *partial) < char port[20]; snprintf(port, sizeof(port), "%d", num); return (_XSERVTransMakeAllCOTSServerListeners(port, partial, &ListenTransCount, &ListenTransConns) >= 0); >
Количество таких интерфейсов определено константой NUMTRANS в файле X11/Xtrans/Xtrans.c.
#define NUMTRANS (sizeof(Xtransports)/sizeof(Xtransport_table))
Таблица Xtransports[] определена в том же самом файле и содержит 10 элементов, таким образом NUMTRANS ≤ 10.
|admin@redeye:[~]> grep '< &TRANS' /usr/include/X11/Xtrans/Xtrans.c < &TRANS(SocketTCPFuncs), TRANS_SOCKET_TCP_INDEX >, < &TRANS(SocketINET6Funcs), TRANS_SOCKET_INET6_INDEX >, < &TRANS(SocketINETFuncs), TRANS_SOCKET_INET_INDEX >, < &TRANS(SocketLocalFuncs), TRANS_SOCKET_LOCAL_INDEX >, < &TRANS(SocketUNIXFuncs), TRANS_SOCKET_UNIX_INDEX >, < &TRANS(LocalFuncs), TRANS_LOCAL_LOCAL_INDEX >, < &TRANS(PTSFuncs), TRANS_LOCAL_PTS_INDEX >, < &TRANS(NAMEDFuncs), TRANS_LOCAL_NAMED_INDEX >, < &TRANS(PIPEFuncs), TRANS_LOCAL_PIPE_INDEX >, < &TRANS(SCOFuncs), TRANS_LOCAL_SCO_INDEX >,
Сами же флаги, которые во время сборки определяют транспортные интерфейсы X сервера, можно найти в xc/config/cf/linux.cf .
#if HasDECnet # define ConnectionFlags -DUNIXCONN -DTCPCONN -DDNETCONN # define ExtraLibraries -ldnet #else # define ConnectionFlags -DUNIXCONN -DTCPCONN #endif
Проследив цепочку до системного вызова socket() находим такую последовательность транспортных процедур.
TRANS(MakeAllCOTSServerListeners) | v +-------------------------+ +----->TRANS(OpenCOTSServer)+--->|TRANS(SocketSelectFamily)| | | |TRANS(SocketOpen) | | v +-------+-----------------+ | TRANS(Open) | | | | | v v +------+TRANS(ParseAddress) socket()
Серверный процесс стартует с вызова функции TRANS(CreateListener) из Xtrans.c . Далее переход в состояние ожидания входящего соединения происходит в такой последовательности.
TRANS(MakeAllCOTSServerListeners) | v TRANS(CreateListener) | v TRANS(SocketCreateListener) | v bind()
В файле Xtransmit.h можно обнаружить X_TCP_PORT . Первое клиентское соединение будет использовать порт 6000, второе — 6001 и т․ д․
#define X_TCP_PORT 6000
▍ Взгляд изнутри трафика между клиентом и сервером X
Запустим простейшую иксовую программу Xclock и проверим как все это работает на практике.
|admin@redeye:[~]> DISPLAY=tcp/192.168.10.10:0.0 strace -e trace=network -f xclock 2>& 1 |grep -A3 TCP 1. socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_TCP) = 3 2. setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0 3. setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0 4. connect(3, , 16) = 0
В первой строке вывода видим, что системный вызов socket() завершился успешно и вернул файловый десткриптор 3. Далее, во второй строке setsockopt() выставляет параметр TCP_NODELAY , с которым TCP фрагменты отправляются по сети как можно ранее, даже если эти фрагменты слишком малы. В третьей строке опять встречается setsockopt() на это раз для активации опции SO_KEEPALIVE . Данный параметр поддерживает соединение в активном состоянии, с помощью периодической отправки служебных сообщений. Наконец в четвертой строке системный вызов connect() соединяет клиент X с сервером, по TCP порту 6000.
Используемый TCP порт напрямую связан с количеством соединений и номером переменной $DISPLAY , если бы использовалось DISPLAY=tcp/192.168.10.10:1.0 , то тогда в последней строке connect() состоялся бы по TCP порту 6001.
После рукопожатия обмен данными происходит с использованием структур X-клиента — xConnClientPrefix , и X-сервера — xConnSetupPrefix , XconnSetup , определенных в файле /usr/include/X11/Xproto.h . Размер занимаемой памяти в структур в байтах определен в #define директивах заголовочного файла.
#define sz_xConnClientPrefix 12 #define sz_xConnSetupPrefix 8 #define sz_xConnSetup 32 . typedef struct < CARD8 byteOrder; BYTE pad; CARD16 majorVersion, minorVersion; CARD16 nbytesAuthProto; /* Authorization protocol */ CARD16 nbytesAuthString; /* Authorization string */ CARD16 pad2; >xConnClientPrefix; . typedef struct < CARD8 success; BYTE lengthReason; /*num bytes in string following if failure */ CARD16 majorVersion, minorVersion; CARD16 length; /* 1/4 additional bytes in setup info */ >xConnSetupPrefix;
Рис. 3 Установка параметров соединения в сессии X11.
Можно также пронаблюдать за процессом с помощью сетевого анализатора, клиентский запрос Initial connection request соответствует вызову xConnClientPrefix . Соответственно Initial connection reply в следующем пакете создан со стороны xConnSetupPrefix и xConnSetup . Для сбора трафика можно запустить Wireshark и слушать локальный интерфейс, либо с помощью следующей команды tcpdump.
|root@redeye:[~]> tcpdump -i lo -vv not arp -w x11_trace.pcapng
Далее, сам файл можно открыть в Wireshark и отфильтровать просмотр по протоколу x11 . Обычно для сбора трафика нужны привилегии root.
Рис. 4 Сетевой след соединения X11 в WireShark.
То же самое и во всех подробностях можно увидеть в tshark в текстовом формате. Так выглядит клиентский запрос X11 в сторону сервера.
Frame 11: 134 bytes on wire (1072 bits), 134 bytes captured (1072 bits) Encapsulation type: Ethernet (1) . [Protocols in frame: eth:ethertype:ipv6:tcp:x11] Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Destination: 00:00:00_00:00:00 (00:00:00:00:00:00) Address: 00:00:00_00:00:00 (00:00:00:00:00:00) . Internet Protocol Version 6, Src: ::1, Dst: ::1 0110 . = Version: 6 . Transmission Control Protocol, Src Port: 49202, Dst Port: 6010, Seq: 1, Ack: 1, Len: 48 Source Port: 49202 Destination Port: 6010 . X11, Request, Initial connection request byte-order: 0x6c (Little-endian) unused protocol-major-version: 11 protocol-minor-version: 0 authorization-protocol-name-length: 18 authorization-protocol-data-length: 16 unused authorization-protocol-name: MIT-MAGIC-COOKIE-1
Пакет с ответом со стороны X-сервера совсем не так лаконичен, в нем указаны все необходимые детали для форматирования графического вывода на экран.
Frame 13: 14698 bytes on wire (117584 bits), 14698 bytes captured (117584 bits) Encapsulation type: Ethernet (1) . [Protocols in frame: eth:ethertype:ipv6:tcp:x11] Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) Destination: 00:00:00_00:00:00 (00:00:00:00:00:00) Address: 00:00:00_00:00:00 (00:00:00:00:00:00) . Internet Protocol Version 6, Src: ::1, Dst: ::1 0110 . = Version: 6 . Transmission Control Protocol, Src Port: 6010, Dst Port: 49202, Seq: 1, Ack: 49, Len: 14612 Source Port: 6010 . X11, Reply, Initial connection reply success: 1 unused protocol-major-version: 11 protocol-minor-version: 0 replylength: 3651 release-number: 12011000 resource-id-base: 0x0b200000 resource-id-mask: 0x001fffff motion-buffer-size: 256 length-of-vendor: 20 maximum-request-length: 65535 number-of-screens-in-roots: 1 number-of-formats-in-pixmap-formats: 7 image-byte-order: 0x00 (LSBFirst) bitmap-format-bit-order: 0x00 (LSBFirst) bitmap-format-scanline-unit: 32 bitmap-format-scanline-pad: 32 min-keycode: 8 max-keycode: 255 unused vendor: The X.Org Foundation pixmap-format pixmap-format . pixmap-format . screen screen (000007a4: 1920 x 1080 x 24) root: 0x000007a4 default_colormap: 0x00000020 white_pixel: 0x00ffffff black_pixel: 0x00000000 current_input_masks: 0x00fa8033 width_in_pixels: 1920 height_in_pixels: 1080 width_in_millimeters: 451 height_in_millimeters: 254 min_installed_maps: 1 max_installed_maps: 1 root_visual: 0x00000021 backing_stores: 0x01 save_unders: False root_depth: 24 allowed_depths_len: 7 depth-detail depth-detail depth: 24 unused visualtypes-numbers: 576 unused visualtype visualtype . visualtype . visualtype .
▍ Удаленное подключение к X-серверу по ssh
Переходя от теории сетевых взаимодействий X Window System к практике, рассмотрим, как запустить графическое приложение на уделенном X-сервере при подключении по ssh.
|admin@redeye:[~]> ssh -X my.remote.host |admin@redeye:[~]> ssh -Y my.remote.host
- Подключение необходимо запускать с ключом -X , который активирует переадресацию X11. На практике, однако из-за X11 SECURITY extension это часто не работает. В таких случаях используют -Y для подключения с доверительной переадресацией X11.
- Убедитесь, что на удаленном сервере установлен пакет xauth , который создаст файл ~/.Xauthority y. Если все нормально, то файл уже создан и проверка показывает на наличие MAGIC COOKIE.
|admin@redeye:[~]> xauth list host/unix:0 MIT-MAGIC-COOKIE-1 00000000000000111111111111111111
- Имеет смысл в качестве проверки иксов выполнить xclock прежде, чем запускать JAVA installer, или мастер настроек некоей корпоративной CRM, или ERP системы. Если показалось окно xclock, то соединение с X-сервером работает как надо.
Рис. 5 Собственно xclock, значит удаленные иксы настроены и работают.
- Если после логина по ssh была выполнена команда смены пользователя sudo su — для перехода в root, то тогда необходимо выставить переменную DISPLAY. Этого не надо делать, если используется изначальный пользователь и сеанс shell.
|admin@redeye:[~]> export DISPLAY=:0 echo $DISPLAY :0
Я стараюсь по мере возможности тестировать сеанс Wayland при каждом новом релизе KDE Plasma, несмотря на многочисленные улучшения с каждым разом, на версии kde-apps-21.04.3 работать можно лишь на Plasma-X11. В чем бы не состояли преимущества Wayland, до тех пор пока в терминале зависает команда man, хаотично прыгают элементы ниспадающего меню и блуждает внешний монитор, старый и добрый X Window System остается вне конкуренции. Надеюсь так не будет продолжаться долго.
▍ Для дополнительной информации
- X Window system internals
- Can’t start X11 applications after su.
- Xterm cannot open display?
- Xlib — C Language X Interface
Система X Window Версии 11 (x11)
Tests security measures and simulates attacks to identify weaknesses.
X11 является сокращением от X Window System версии 11. Это сетевой протокол и графический пользовательский интерфейс (GUI), который позволяет приложениям запускаться на удаленном сервере и отображаться на локальном компьютере. Разработанная Массачусетским технологическим институтом в 1980-х годах, X11 стала стандартной системой отображения для операционных систем на базе Unix и широко используется в дистрибутивах Linux.
Протокол X11 работает путем отделения графического интерфейса приложения от его функциональности. Приложение запускается на удаленном сервере, в то время как графический вывод отправляется на локальный компьютер. Это позволяет пользователям запускать приложения на мощных серверах, сохраняя при этом возможность взаимодействовать с ними через локальный компьютер.
X11 также поддерживает несколько окон, позволяя пользователям запускать несколько приложений одновременно и легко переключаться между ними. Он включает в себя набор стандартных виджетов, таких как кнопки, текстовые поля и меню, которые разработчики приложений могут использовать для создания графических интерфейсов.
Протокол X11 легко настраивается, позволяя пользователям изменять внешний вид среды своего рабочего стола. Он также обладает высокой степенью расширения, и для расширения его функциональности доступно множество сторонних приложений.
Cracking the Safe: Insights from a Bank Penetration Test
Exploring a Government Network Penetration Test
Общие порты X11
Порт TCP 6000: Это порт X11 по умолчанию, используемый для связи между X-сервером и X-клиентами. Порт TCP 6001: Обычно он используется в качестве первого альтернативного порта, когда порт по умолчанию уже используется. Порт TCP 6002: Обычно он используется в качестве второго альтернативного порта, когда и порт по умолчанию, и первый альтернативный порт уже используются. Порт TCP 6010: Это еще один альтернативный порт, который можно использовать для связи X11. Порт TCP 6011: Это еще один альтернативный порт, который можно использовать для связи X11.
Стандартные команды от неавторизованных пользователей
xhost: Эта команда позволяет пользователям добавлять или удалять хосты из списка контроля доступа X server. Неавторизованные пользователи могут попытаться использовать эту команду для получения доступа к X-серверу из удаленной системы. xeyes: Эта команда отображает пару анимированных глаз, которые следуют за курсором мыши. Хотя эта команда безвредна, неавторизованные пользователи могут попытаться использовать ее, чтобы проверить, есть ли у них доступ к X-серверу. xkill: Эта команда позволяет пользователям отключить работающий клиент X11. Неавторизованные пользователи могут попытаться использовать эту команду для завершения работы важных приложений или служб. xmodmap: Эта команда позволяет пользователям изменять сопоставления ключей на X-сервере. Неавторизованные пользователи могут попытаться использовать эту команду для перехвата нажатий клавиш или выполнения вредоносных команд. xset: Эта команда позволяет пользователям изменять различные настройки X11, такие как время ожидания экранной заставки или частоту повторов с клавиатуры. Неавторизованные пользователи могут попытаться использовать эту команду для отключения функций безопасности или изменения системных настроек.
Инструменты для использования протокола X11
- xev: Этот инструмент отображает X событий, генерируемых пользовательскими устройствами ввода, такими как щелчки мыши или нажатия клавиш. Это может быть полезно для отладки приложений X11.
- xdpyinfo: Этот инструмент отображает информацию о сервере X, включая количество экранов, доступные расширения и поддерживаемые протоколы.
- xwininfo: Этот инструмент отображает информацию об окне, включая его геометрию, родительские и дочерние окна и идентификатор ресурса.
- xkill: Этот инструмент позволяет пользователям отключить запущенный клиент X11, нажав на его окно. Это может быть полезно для завершения работы приложений, не отвечающих на запросы.
- xrandr: Этот инструмент позволяет пользователям настраивать разрешение экрана, частоту обновления и поворот на дисплеях X11.
- xset: Этот инструмент позволяет пользователям настраивать различные параметры X11, такие как время ожидания экранной заставки и частота повторения с клавиатуры.
- xclock: Этот инструмент отображает аналоговые или цифровые часы на экране X11. Это может быть полезно для тестирования различных функций X11.
- xfontsel: Этот инструмент позволяет пользователям просматривать и выбирать шрифты X11 для использования в приложениях.
- xcalc: Этот инструмент предоставляет простой интерфейс калькулятора на экране X11. Это может быть полезно для тестирования функциональности ввода и вывода.
- xterm: Этот инструмент предоставляет эмулятор терминала на экране X11. Это может быть полезно для тестирования приложений командной строки.
Автоматизированные инструменты:
- Xnest: Этот инструмент предоставляет вложенный сервер X11 внутри существующего сеанса X11. Его можно использовать для тестирования многоэкранных настроек или для изоляции приложений X11.
- Xvfb: Этот инструмент предоставляет виртуальный фреймбуфер X11, который можно использовать для запуска приложений X11 без физического дисплея. Это может быть полезно для тестирования безголовых серверов.
- xdotool: Этот инструмент предоставляет интерфейс командной строки для автоматизации задач X11, таких как имитация щелчков мыши или ввода с клавиатуры.
- xmacro: Этот инструмент записывает и воспроизводит макросы X11, которые представляют собой последовательности событий X11. Это может быть полезно для автоматизации повторяющихся задач.
- xpra: Этот инструмент предоставляет постоянный сервер X11, к которому можно получить удаленный доступ через веб-браузер или SSH-соединение. Это может быть полезно для тестирования функциональности удаленного доступа.
- Xnee: Этот инструмент предоставляет набор инструментов автоматизации X11, включая функции записи и воспроизведения, моделирование событий и синхронизацию.
- Xorg-x11-server-utils: Этот пакет предоставляет набор серверных утилит X11, включая xinput, xmodmap и xsetroot.
- X11perf: Этот инструмент предоставляет набор тестов производительности X11, включая рендеринг, манипулирование окнами и задержку ввода.
- xrestop: Этот инструмент предоставляет представление об использовании ресурсов X11 в режиме реального времени, включая использование памяти и процессора.
- xtrace: Этот инструмент обеспечивает отслеживание трафика протокола X11 между X-сервером и клиентами. Это может быть полезно для отладки приложений X11.
Последние пять известных CVE для X11
• CVE-2020-14346 – Ошибка была обнаружена в xorg-x11-server до 1.20.9. Недостаточный поток целых чисел при декодировании протокола расширения ввода X на сервере X может привести к произвольному доступу к содержимому памяти. Наибольшая угроза, исходящая от этой уязвимости, касается конфиденциальности и целостности данных, а также доступности системы.
• CVE-2015-3812 – Множественные утечки памяти в функции x11_init_protocol в epan/dissectors/packet-x11.c в X11 dissector в Wireshark 1.10.x до 1.10.14 и 1.12.x до 1.12.5 позволяют удаленным злоумышленникам вызывать отказ в обслуживании (потребление памяти) через созданный пакет.
• CVE-2013-2004 – Функции (1) getDatabase и (2) _XimParseStringFile в X.org libX11 1.5.99.901 (1.6 RC1) и более ранние версии не ограничивают глубину рекурсии при обработке директив для включения файлов, что позволяет X-серверам вызывать отказ в обслуживании (потребление стека) через созданный файл.
• CVE-2013-1997 – Многократное переполнение буфера в X.org libX11 1.5.99.901 (1.6 RC1) и более ранние версии позволяют X-серверам вызывать отказ в обслуживании (сбой) и, возможно, выполнять произвольный код с помощью созданных значений длины или индекса для (1) XAllocColorCells, (2) _XkbReadGetDeviceInfoReply, (3) _XkbReadGeomShapes, (4) _XkbReadGetGeometryReply, (5) _XkbReadKeySyms, (6) _XkbReadKeyActions, (7) _XkbReadKeyBehaviors, (8) _XkbReadModifierMap, (9) _xkbreadexplicit Components, (10) _XkbReadVirtualModMap, (11) _XkbReadGetNamesReply, (12) _XkbReadGetMapReply, (13) _XimXGetReadData, (14) XListFonts, (15) XListExtensions, и (16) функции XGetFontPath.
• CVE-2013-1982 – Многократное переполнение целых чисел в X.org libXext 1.3.1 и более ранние версии позволяют X-серверам инициировать выделение недостаточной памяти и переполнение буфера с помощью векторов, связанных с (1) функциями XcupGetReservedColormapEntries, (2) XcupStoreColors, (3) XdbeGetVisualInfo, (4) XeviGetVisualInfo, (5) xshapegetrectangle и (6) xsynclistsystemcounter.
Полезная информация
– X11 — это расширяемый протокол, который позволяет добавлять дополнительные функции, не нарушая работу существующих клиентов.
– X11 прозрачен для сети, что означает, что клиент и сервер могут быть запущены либо на одной, либо на разных машинах.
– X11 — это оконная система для отображения растровых изображений, обычно используемая в Unix-подобных операционных системах.
– X11 предоставляет базовую платформу для среды GUI, позволяющую рисовать и перемещать окна на устройстве отображения, а также взаимодействовать с мышью и клавиатурой.
– Протокол X11 позволяет приложениям создавать объекты, такие как окна, и использовать базовые примитивы рисования, такие как заполнение прямоугольника или отображение текста.
– Виджеты, такие как кнопки и меню, создаются клиентскими библиотеками с использованием протокола X11.
– X11 является версией протокола с сентября 1987 года и использует TCP в качестве транспортного протокола.
Известные баннеры
- “Версия системы X Window x.x.x” – это баннерное сообщение по умолчанию, которое отображается при запуске сеанса X11.
- “Добро пожаловать в систему X Window” – это баннерное сообщение обычно используется дистрибутивами Linux в качестве приветствия для их сессий X11.
- “Внимание: Нет контроля доступа!” – Это баннерное сообщение отображается, когда X11 настроен на разрешение доступа с любого клиента, независимо от личности клиента или местоположения.
- “Это частная система – несанкционированный доступ запрещен” – это баннерное сообщение часто используется организациями для предупреждения пользователей о том, что система является частной и несанкционированный доступ запрещен.
- “Обнаружен незащищенный сеанс X11” – это баннерное сообщение отображается, когда сеанс пользователя X11 не защищен должным образом и может быть уязвим для атак.
- “Запрошена пересылка X11, но отображение не установлено” – это баннерное сообщение отображается, когда пользователь пытается перенаправить запросы X11 в удаленную систему, но отображение не было настроено должным образом.
- “Соединение X11 отклонено из-за неправильной аутентификации” – это баннерное сообщение отображается, когда сеанс пользователя X11 отклоняется из-за неправильных учетных данных для аутентификации.
- “Ошибка запроса переадресации X11 на канале 0” – это баннерное сообщение отображается, когда запрос пользователя на переадресацию X11 не удался из-за проблемы с сетевым каналом.
- “Соединение X11 потеряно” – это баннерное сообщение отображается, когда пользовательское соединение X11 было потеряно из-за проблемы с сетью или сервером.
- “Сеанс X11 неожиданно завершен” – это баннерное сообщение отображается, когда сеанс пользователя X11 был прерван из-за ошибки или сбоя.
Книги для учебы X11
“Система X Window: Полная ссылка на Xlib, X Protocol, ICCCM, XLFD” Роберт В. Шейфлер и Джеймс Геттис – Эта книга считается окончательным справочником по системе X Window, охватывающим такие темы, как библиотека Xlib, протокол X и руководство по соглашениям о взаимодействии между клиентами (ICCCM). Он также предоставляет углубленный обзор стандарта X Logical Font Description (XLFD).
“X Электроинструменты” автор Крис Тайлер – Эта книга представляет собой всеобъемлющее руководство по системе X Window, охватывающее такие темы, как оконные менеджеры, среды рабочего стола и программирование X11. Он также содержит советы и рекомендации по настройке среды X11 и повышению производительности.
“Руководство по программированию Xlib: для версии 11 системы X Window” автор: Адриан Най – Эта книга представляет собой подробное введение в программирование с помощью библиотеки Xlib, охватывающее такие темы, как создание окон, обработка событий и графическое программирование. Она также включает примеры и упражнения, которые помогут читателям развить свои навыки программирования на X11.
“Программирование X Window с нуля” Джерри Джонгериус – Эта книга представляет собой руководство для начинающих по программированию на X11, охватывающее такие темы, как создание окон, обработка событий и графическое программирование. Она также включает примеры и упражнения, которые помогут читателям развить свои навыки программирования на X11.
“Руководство пользователя системы X Window: для X11 R3 и R4 системы X Window” автор: Валери Кверсия и Тим О’Рейли – Эта книга представляет собой руководство пользователя по системе X Window, охватывающее такие темы, как оконные менеджеры, среды рабочего стола и приложения X11. Он также содержит советы и рекомендации по настройке среды X11 и повышению производительности.
Список полезной нагрузки для X11
- Оконные менеджеры: Это приложения, которые управляют размещением, внешним видом и поведением Windows. Примерами могут служить twm, Metacity и Openbox.
- Среды рабочего стола: Это полные графические пользовательские интерфейсы, которые включают оконный менеджер, файловый менеджер, панель и другие приложения. Примерами могут служить GNOME, KDE и Xfce.
- Программное обеспечение для удаленного рабочего стола: Это приложения, которые позволяют пользователям подключаться к удаленному компьютеру и отображать его рабочий стол на своем собственном компьютере. Примеры включают VNC и RDP.
- Эмуляторы терминалов: Это приложения, которые позволяют пользователям запускать программы командной строки в графической среде. Примеры включают xterm, GNOME Terminal и Konsole.
- Графические Библиотеки: Это библиотеки программирования, которые предоставляют интерфейс для создания графических объектов, таких как изображения и шрифты, и управления ими. Примеры включают Cairo, OpenGL и SDL.
- Программное обеспечение для захвата экрана: Это приложения, которые позволяют пользователям делать скриншоты или записывать видео со своего рабочего стола. Примерами могут служить recordmydesktop и Kazam.
- Редакторы методов ввода: Это приложения, которые позволяют пользователям вводить нелатинские символы, такие как китайский или японский, с помощью клавиатуры или мыши. Примерами могут служить ibus и SCIM.
- Дисплейные менеджеры: Это приложения, которые управляют экраном входа в систему и запускают X-сервер. Примеры включают GDM, LightDM и XDM.
Смягчение последствий
- Отключение переадресации X11 может уменьшить поверхность атаки системы, поскольку не позволяет злоумышленникам использовать X11 для удаленного управления приложениями или доступа к данным.
- Ограничение доступа X11 может помочь предотвратить доступ неавторизованных пользователей к системе. Это можно сделать, внедрив средства контроля доступа, такие как брандмауэры, и настроив X11 так, чтобы он принимал подключения только из надежных источников.
- Использование SSH-туннелирования может помочь защитить соединения X11 путем шифрования передаваемых данных. Это может помочь предотвратить перехват или подделку трафика X11 злоумышленниками.
- Поддержание программного обеспечения X11 в актуальном состоянии может помочь устранить уязвимости, которые могут быть использованы злоумышленниками. Это включает в себя обновление как сервера X11, так и любых клиентских приложений X11, установленных в системе.
- Использование аутентификации X может помочь предотвратить доступ неавторизованных пользователей к ресурсам X11. Это включает в себя настройку X11 на требование проверки подлинности для подключений и использование безопасных методов проверки подлинности, таких как Kerberos или XDM-AUTHORIZATION-1.
- Использование виртуального фреймбуфера X11 может помочь снизить некоторые риски безопасности, связанные с X11, путем изоляции приложений X11 от хост-системы. Это предполагает запуск приложений X11 в виртуальной среде, которая не имеет прямого доступа к аппаратным ресурсам системы.
- Использование защищенного сервера X11 может помочь предотвратить использование злоумышленниками уязвимостей в протоколе X11. Это включает в себя использование серверов X11, которые были усилены или модифицированы для снижения рисков безопасности.
Заключение
X11 это протокол, используемый для графических пользовательских интерфейсов, который был широко принят многими операционными системами. Хотя X11 предоставляет мощный набор функций для удаленного отображения и управления приложениями, он также создает некоторые риски для безопасности, которые необходимо устранить.
X11 linux что это
Большинство нынешних дистрибутивов по умолчанию устанавливают для пользователя графическую среду X11 (X11 Windows System), под управлением которой и выполняются все графические приложения. Как «внутри» устроена X11? Прежде всего, X11 – это распределенная модульная среда, состоящая из двух основных компонентов: X-сервера и X-клиента.
19.1. Клиент-серверная архитектура X11
X-сервер – это программа, которая организует работу с устройствами ввода/вывода, производит отрисовку видимых элементов, запущена у пользователя и предоставляет свои ресурсы (те же самые устройства ввода-вывода) для X-клиентов. X-сервер загружает драйверы устройств (например видеокарты, мыши или клавиатуры), он же управляет переключением раскладок клавиатуры и т.п. Кроме того, X-сервер частично берет на себя функции работы со шрифтами. Задача использования аппаратного ускорения для отрисовки также является прерогативой X-сервера.
В современных дистрибутивах как правило используется открытый свободно распространяемый X-сервер называющийся Xorg. Его конфигурационный файл называется xorg.conf и расположен в каталоге /etc/X11 . В конфигурационном файле описываются все устройства ввода, которые будет использовать X-сервер, настройки клавиатуры, драйвер видеокарты и многое другое. Более подробную информацию можно получить из справочного руководства ( man Xorg , man xorg.conf ).
X-клиент – это собственно пользовательская программа – браузер, почтовый клиент, видеоплеер, клиент мгновенных сообщений, игры, графические редакторы и просмотрщики и т.д.
Когда пользователь запускает графическое приложение, оно соединяется с X-сервером по стандартному протоколу X11, получает от X-сервера события о перемещении мыши, нажатиях кнопок клавиатуры и соответственно на них реагирует. Когда необходимо провести отрисовку, X-клиент отправляет соответствующие инструкции X-серверу, и уже X-сервер производит непосредственную отрисовку используя драйвер видеокарты. Команды протокола X11 могут передаваться как через разделяемую память или локальное соединение (если X-клиент и X-сервер запущены на одном компьютере), так и по сети – при этом X-клиент и X-сервер могут быть запущены на разных компьютерах.
X-сервер никаким образом не отвечает за внешний вид окна X-клиента – он отрисовывает все в точности так, как это указал клиент, более того – сам по себе X-сервер он не отрисовывает ни обрамлений окон, ни каких либо управляющих элементов, не обрабатывает никаких горячих клавиш – то есть он занимается только отрисовкой картинки присланной X-клиентом, а также чтением данных из устройств ввода и передачей соответствующих событий X-клиенту.
Обрамление окон, иконки рабочего стола, панели и кнопки – это все отрисовывается X-клиентами. Рассмотрим пример окна некоторого приложения (в нашем случае файлового менеджера Nautilus из состава среды GNOME):
На этой картинке на самом деле показан результат работы двух X-клиентов: собственно файлового менеджера nautilus (именно он управляет отрисовкой меню, строки статуса, панелей, иконок и так далее). Второй X-клиент – менеджер окон (window manager) под названием metacity нарисовал рамку окна и кнопки на этой рамке. При этом горячие клавиши для закрытия окна, сворачивания, перемещения и других операций с окном отрабатывает именно metacity, а горячие клавиши копирования файла, перехода по каталогам, навигации по меню, подсвечивание иконок и тому подобное отрабатывает уже сам nautilus.
19.2. Графическая среда пользователя
Графической средой мы будем называть набор программ, для пользователя для выполнения им повседневных функций. Каждая из этих программ как правило является самостоятельным X-клиентом и может работать сама по себе, даже без своих «коллег по окружению», но будучи собранными вместе, они начинают предоставлять пользователю цельный и органичный интерфейс. Достигается это обычно следующим образом:
- Все программы данного графического окружения используют одну и ту же библиотеку для отрисовки своих элементов управления
- В графическое окружение включается какой-либо менеджер окон
- Все программы для данного окружения разрабатываются с соблюдением определенных общих требований
- В состав окружение включаются самостоятельные программы для выполнения базовых функций – текстовые и табличные процессоры, графический редактор, браузер, IM-клиент и другие
- В состав окружения включаются служебные программы, предоставляющие пользователю возможность вызова других программ – например, приложение которое отрисовывает панель, на которой размещается кнопка для вызова меню со списком установленных программ и список окон
- В состав окружения включают утилиты для настройки оборудования и дополнительных функций
В результате внешний вид окружения становится единообразным, а тот факт что оно состоит из множества небольших программ делает графическую среду гибкой в настройке и стабильной в работе. В то же время обширный набор программ для различных функций делает повзволяет графическому окружению удовлетворить большинство потребностей пользователя, а привычная вам картина GNOME или KDE, которую вы видите на экране в процессе работы, является результатом совместной работы множества X-клиентов соответствующего окружения. Или нескольких окружений одновременно.
Наиболее распространенные графические среды в Linux – это GNOME и KDE. И та и другая среда имеют свою библиотеку для отрисовки элементов управления внутри окна (для GNOME это GTK, для KDE это Qt), включают в свой состав почтовый клиент, браузер, мультимедиа-проигрыватель, клиент мгновенных сообщений и графический редактор, файловый менеджер (он же по совместительству отрисовывает иконки на рабочем стол и отвечает за фон рабочего стола), программу которая отрисовывает боковые панели и набор маленьких программ-апплетов, которые встраиваются при необходимости в панели, игры, программы управления для настройки окружения и менеджер окон.
Некоторые X-клиенты не входят в состав какого-либо окружения – например, браузеры Firefox и Opera, медиапроигрыватель Mplayer, офисный пакет OpenOffice.Org. Самое главное что следует запомнить – что графическое окружение, или графическая среда – это всего лишь набор программ, а не одна большая программа вида «все-в-одном», и вы можете, работая в основном в одном окружении, абсолютно спокойно использовать программы другого.
19.3. Внутри X11. Упрощенная схема
X11 – система многослойная, но внутренне логичная и понятная. Схематически ее можно изобразить следующим образом:
Когда приложение отрисовывает что-либо, оно обращается к своей базовой библиотеке, она в свою очередь переадресовывает вызов (или уже цепочку вызовов) в библиотеку libX11, которая использую X11 Core Protocol передает команды на X-сервер. X-сервер интерпретирует команды и передает их на отрисовку драйверам устройств вывода. Воздействие же пользователя на устройства ввода считываются X-сервером через драйвера устройств ввода, через X11 Core Protocol передаются X-клиенту, libX11 переводит команды протокола в события и передает события в тулкит, и уже тулкит передает события программе для того чтобы та на них отреагировала.
То как приложение выглядит – то есть внешний вид строк ввода, полос скроллинга, панелей и кнопок – за все это отвечает библиотека-тулкит (toolkit). Два наиболее распространенных на сегодняшний день тулкита, Qt и GTK, примерно равны по возможностям – они обеспечивают достаточную переносимость приложений (есть реализации GTK и Qt для основных платформ), поддержку «тем» внешнего вида, предоставляют программисту объектно-ориентированный интерфейс и некоторый набор служебных функций и возможностей.
Базовая библиотека X11 (libX11, или Xlib) позволяет программе абстрагироваться и «не связываться» с низкоуровневыми функциями протокола X11, и таким образом обеспечивает сетевую прозрачность X11, то есть позволяет программам работать как с локальным X-сервером, так и с запущеным на другом компьютере, причем делается это незаметно для программы.
19.4. Внутри X11. Растровые шрифты и их отображение
С момента разработки в среде X11 отображение шрифтов управлял X-сервер. Приложение, когда ему необходимо вывести некоторый текст, просто инструктировало X-сервер «отобрази вот этот текст вот таким шрифтом в указанном месте». В ответ на это X-сервер выбирал из своей базы шрифтов наиболее подходящий, и использовал его для выполнения инструкций клиента, причем изначально эти шрифты были растровыми, то есть фактически содержали наборы заранее отрисованых глифов (символов).
Эта технология, называемая X Core Fonts, поддерживается в X11 и сейчас, поэтому в наборе пакетов любого дистрибутива всегда можно встретить наборы широко распространенных семейств растровых шрифтов – fixed, hevetica, times, courier. При этом каждый шрифт представляется множеством файлов, для различных сочетаний размера, ширины и начертания – например, если шрифт имеет десять вариантов размеров (от 8 до 18), две ширины (обычный и жирный) и два начертания (стандартное и курсив), то он будет представляться 40 файлами – по одному файлу для каждого из сочетаний размера, начертания и ширины.
Поскольку количество файлов получается очень большим, чтобы не устанавливать все эти шрифты на все компьютеры где запущены X-серверы, в систему X11 был введен такой объект как сервер шрифтов (font server). Системный администратор может настроить и запустить один сервер шрифтов для всей локальной сети, и указать X-серверу при запуске использовать шрифты с соответствующего сервера, что позволяет поддерживать на всех серверах один и тот же набор шрифтов с минимальными усилиями и избежать ситуации когда шрифт есть на одном компьютере, но его нет на другом.
В большинстве дистрибутивов Linux сервер шрифтов включен в поставку X11 по умолчанию, и называется xfs. Его конфигурационный файл как правило находится в каталоге /etc/X11/fs . В конфигурационном файле сервера шрифтов перечисляются каталоги с растровыми шрифтами, а в конфигурационном файле X-сервера указано, что основным источником шрифтов является сервер шрифтов,запущеный на этом же компьютере.
В новейшей версии проекта Xorg сервер шрифтов уже считается «устаревшей» технологией и по умолчанию не используется (хотя и входит в поставку). При необходимости его (сервер шрифтов) можно запустить и использовать.
Методика наличия предопределенных растеризованых глифов в шрифте позволяла добиться достаточно качественного отображения шрифта в большинстве случаев, но в то же время такие эта методика имеет определенные недостатки – как известно, растровые шрифты очень плохо «вращаются» на угол не кратный 90 градусам, и плохо масштабируются, а с появлением устройств высокой четкости (LCD-мониторов) возникла необходимость еще и отрисовывать шрифты в «сглаженном» виде, с мягкими переходами цвета, чего растровые шрифты также предоставить не могли.
Наиболее распространенное приложение, использующее методику X Core Fonts – это графический эмулятор терминала xterm, который есть в составе всех дистрибутивов, или простейший менеджер графического входа в систему XDM.
19.5. Внутри X11. FreeType и XFT
Для устранения этого недостатка растровых шрифтов была разработана специальные библиотеки XFT и FreeType, которые обеспечивают отображение векторных шрифтов и реализацию таких возможностей как сглаживание шрифтов, их поворот на произвольный угол и хинтинг (подгонку символов шрифта друг к другу оптимальным для данного шрифта способом). Поскольку данная методика плохо согласовывалась с уже сложившейся шрифтовой архитектурой X11, отображение векторных шрифтов было возложено на X-клиента.
При этом схема отображения шрифта меняется: X-клиент не передает на X-сервер запрос на вывод текста указанным шрифтом, а самостоятельно отрисовывает необходимы глифы шрифта использую функции FreeType и XFT, и передает на X-сервер уже сформированную картинку, которую X-сервер и отображает. Вполне логично, что при использовании этой методики X-клиент должен иметь доступ к оригиналу векторного шрифта (обычно это файл) – поэтому современные дистрибутивы также содержат еще и наборы векторных шрифтов PostScript и TrueType.
Новые версии тулкитов GTK и QT используют именно эту методику, но поскольку существуют еще и устаревшие тулкиты, такие как Motif или Xview (OpenLook) и значительное количество приложений на них основанных, да и с точки зрения необходимой полосы пропускания сети технология поддержки растровых шрифтов имеет явное преимущество пред XFT и FreeType, поддержка технологии растровых шрифтов по-прежнему входит в X11 и будет оставаться в ней еще долго.
19.6. Внутри X11. Расширения
Протокол X11 не является замершим в своем развитии, но его развития ведется не путем изменения самого протокола, а путем внесения в протокол расширений – то есть дополнительных опциональных наборов команд и инструкций. Например, для поддержки непрямоугольных окон было введено расширение XShape, для поддержки проигрывания видеороликов введено расширение XVideo, для поддержки OpenGL было введено расширение GLX и так далее.
19.7. Внутри X11. Полезные утилиты
В штатную поставку X11 входит множество полезных программ, позволяющих получать служебную информацию об ваших настройках среды X11. Перечислим некоторые из них:
xterm – эмулятор терминала
xfontsel – интерактивный просмотр растровых шрифтов
xdpyinfo – вывод информации о ваших настройках среды X11 и задействованных расширениях
xwininfo – просмотр информации об указанном окне (положение, размер, класс окна и т.п.)
xwd – моментальный «снимок» окна
xwud – показ результатов работы xwd
xhost – управление контролем доступа X-клиентов к X-серверу
19.8. Внутри X11. Менеджер окон
Существует особая разновидность X-клиентов, называемых менеджерами окон. Их основная функция – обеспечивать управление другими окнами – перемещением, изменением размеров, сворачиванием и разворачиванием окон, отрисовкой обрамлений окон, управление передачей фокуса от окна к окну а также управление Z-порядком размещения окон. Соответственно, в один момент времени для одного экрана может быть использован только один менеджер окон.
GNOME и KDE имеют свои собственные менеджеры окон – это metacity и kwin. Менеджеры окон являются взаимозаменяемыми – то есть вы можете выбрать и использовать тот из них, который вам больше нравится или кажется более удобным. Еще один распространенный (то есть наличествующий почти на всех UNIX-системах) менеджер окон – это twm. Крайне простой и примитивный, он тем не менее предоставляет пользователю базовые функции управления окнами и доступ к меню приложений.
Не следует путать или отождествлять графическую среду и менеджер окон – в большинстве графических сред для Linux менеджер окон является заменяемым по желании пользователя компонентом, в отличие от Windows или MacOS, в которых менеджер окон фактически монолитно склеен с остальными частями графической подсистемы.
19.9. Внутри X11. Composite, XGL и Compiz
Современные версии X-сервера Xorg поддерживают специфическое расширение, называемое Composite. Вкратце его назначение описывается следующим образом: в процессе прорисовки вывода X-клиента, X-сервер рисует не непосредственно в видеопамять (то есть не на экран), а в промежуточный внеэкранный буфер (off-screen buffer), а специализированная программа, называемая Composite manager, подключается к этому буферу, при необходимости изменяет изображение и выводит в видеопамять уже измененное изображение. Такая технология позволяет получить эффекты прозрачности, искажения, плавного «всплытия» окон и многие другие без внесения каких-либо изменений в код X-клиентов или X-сервера. С другой стороны, преобразования изображений лучше реализовывать с использованием аппаратного ускорения, предоставляемого видеокартой.
XGL – это одновременно X-сервер и X-клиент. Как и обыкновенный X-сервер, XGL позволяет подключаться к себе X-клиентам, отсылает им события от устройств ввода и принимает от них команды отрисовки, отрисовку же принятых команд XGL производит с помощью OpenGL. Кроме того, как X-сервер XGL реализует поддержку расширения Composite. Как следствие, пользователь получает следующий «слоеный пирог»: внутри реального X-сервера, от которого требуется только поддержка OpenGL, запускается XGL. Все остальные программы Window manager, Composite manager и обычные X-клиенты подключаются к XGL. Поскольку назвать «элегантной» такую многоуровневую конструкцию нельзя, функции XGL были перенесены в основной X-сервер, а в интерфейс драйверов видеокарт была заложена возможность поддержки расширения Composite.
Наиболее развитые на данные момент драйверы имеют видеокарты NVidia, ATI и Intel. Драйверы видеокарт Intel пишутся сообществом разработчиков Xorg, по открытым фирмой-производителем спецификациям, и поэтому поддерживают Composite и аппаратное ускорение прорисовки трехмерной и двумерной графики, поэтому владельцы этих карт могут использовать Composite manager и расширение Composite в сочетании с поддержкой OpenGL. Спецификации на видеокарты фирм ATI и NVidia закрыты (недоступны разработчикам Xorg), и поэтому открытые драйвера отличаются усеченной функциональностью и слабой поддержкой аппаратного ускорения. Закрытые («проприетарные») драйверы видеокарт NVidia, предоставляемые производителем, обеспечивают поддержку аппаратного ускорения при выводе двумерной и трехмерной графики и предоставляют поддержку Composite. Драйверы для новейших видеокарт ATI следует признать крайне некачественными – в настоящий момент далеко не во всех версиях этих драйверов возможно одновременно задействовать аппаратную поддержку OpenGL и поддержку Composite.
Поддержка функции GLX_texture_from_pixmap была реализована в проприетарных драйверах видеокарт ATI версии 8.42, но эти драйвера этой и более новой версий поддерживают не весь спектр видеокарт производства этой фирмы.
Compiz – это Composite manager, которые в процессе работы использует библиотеки OpenGL и аппаратное ускорение, предоставляемое видеоадаптером. Сопоставляя вышесказанное о драйверах для различных видеокарт, можно сделать вывод что владельцы видеокарт NVidia и Intel могут использовать восзможности и эффекты, реализованные в Compiz, без сколь-нибудь трудностей, а владельцам видеокарт ATI не поддерживаемых новыми версиями драйверов, если они хотят использовать Compiz, необходимо прибегнуть в многоуровневой архитектуре с XGL.
В начало → Linux не для идиотов → X11 и все-все-все |