Перейти к содержимому

Что такое x11

  • автор:

Что такое x11

Большинство нынешних дистрибутивов по умолчанию устанавливают для пользователя графическую среду 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-клиентом и может работать сама по себе, даже без своих «коллег по окружению», но будучи собранными вместе, они начинают предоставлять пользователю цельный и органичный интерфейс. Достигается это обычно следующим образом:

  1. Все программы данного графического окружения используют одну и ту же библиотеку для отрисовки своих элементов управления
  2. В графическое окружение включается какой-либо менеджер окон
  3. Все программы для данного окружения разрабатываются с соблюдением определенных общих требований
  4. В состав окружение включаются самостоятельные программы для выполнения базовых функций – текстовые и табличные процессоры, графический редактор, браузер, IM-клиент и другие
  5. В состав окружения включаются служебные программы, предоставляющие пользователю возможность вызова других программ – например, приложение которое отрисовывает панель, на которой размещается кнопка для вызова меню со списком установленных программ и список окон
  6. В состав окружения включают утилиты для настройки оборудования и дополнительных функций

В результате внешний вид окружения становится единообразным, а тот факт что оно состоит из множества небольших программ делает графическую среду гибкой в настройке и стабильной в работе. В то же время обширный набор программ для различных функций делает повзволяет графическому окружению удовлетворить большинство потребностей пользователя, а привычная вам картина 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 и все-все-все

Что такое x11

X Window System — оконная система, обеспечивающая стандартные инструменты и протоколы для построения графического интерфейса пользователя. Используется в UNIX-подобных ОС.

X Window System обеспечивает базовые функции графической среды: отрисовку и перемещение окон на экране, взаимодействие с мышью и клавиатурой. X Window System не определяет деталей интерфейса пользователя — этим занимаются менеджеры окон, которых разработано множество. По этой причине внешний вид программ в среде X Window System может очень сильно различаться в зависимости от возможностей и настроек конкретного оконного менеджера.

В X Window System предусмотрена сетевая прозрачность: графические приложения могут выполняться на другой машине в сети, а их интерфейс при этом будет передаваться по сети и отображаться на локальной машине пользователя (в случае если это разрешено в настройках). В контексте X Window System термины «клиент» и «сервер» имеют непривычное для многих пользователей значение: «сервер» означает локальный дисплей пользователя (дисплейный сервер), а «клиент» — программу, которая этот дисплей использует (она может выполняться на удалённом компьютере).

Система X Window System была разработана в Массачусетском технологическом институте (MIT) в 1984 году. Нынешняя (по состоянию на февраль 2009 года) версия протокола — X11 — появилась в сентябре 1987 года. Проект X возглавляет фонд X.Org Foundation. Референсная (или образцовая) реализация ( reference implementation ) системы свободно доступна на условиях лицензии MIT и подобных ей лицензий. [1]

X Window System часто называют X11 или просто X, неформально «иксы́».

Клиент-серверная модель и сетевая прозрачность

В этом примере X-сервер принимает ввод с клавиатуры и мыши и производит вывод на экран. На пользовательской рабочей станции выполняются веб-браузер и эмулятор терминала. Программа обновления системы работает на удалённом сервере, но управляется с машины пользователя. Обратите внимание, что удалённое приложение работает так же, как если бы оно выполнялось локально.

X Window System использует клиент-серверную модель: X-сервер обменивается сообщениями с различными клиентскими программами. Сервер принимает запросы на вывод графики (окон) и отправляет обратно пользовательский ввод (от клавиатуры, мыши или сенсорного экрана). X-сервер может быть:

  • системной программой, контролирующей вывод видео на персональном компьютере;
  • приложением, отображающим графику в окно какой-то другой дисплейной системы;
  • выделенным компонентом аппаратного обеспечения.

Эта клиент-серверная терминология — пользовательский терминал в качестве «сервера» и удалённые приложения в качестве «клиентов» — зачастую запутывает новых пользователей X, так как обычно эти термины имеют обратные значения. Но X Window System принимает точку зрения программы, а не конечного пользователя аппаратуры: локальный дисплей предоставляет услуги отображения графики программам, и потому выступает в роли сервера. Удалённые программы используют эти услуги, и потому играют роль клиентов.

Протокол, с помощью которого сообщаются сервер и клиент, является прозрачным для сети: клиент и сервер могут находиться как на одной и той же машине, так и на разных. В частности, они могут работать на различных архитектурах под управлением разных операционных систем — результат будет одинаковым. Клиент и сервер могут даже безопасно взаимодействовать через Интернет посредством туннелирования соединения сквозь зашифрованный сетевой сеанс.

Чтобы запустить удалённую клиентскую программу, выводящую графику на локальный X-сервер, пользователь обычно открывает эмулятор терминала и подключается к удалённой машине при помощи SSH. Затем он отдаёт команду, указывающую дисплей, на который следует выводить графику (например, export DISPLAY=[имя компьютера пользователя]:0 при использовании

Использование удалённых клиентов может быть полезно, например, в таких ситуациях:

  • графическое администрирование удалённой машины;
  • выполнение интенсивных ресурсоёмких вычислений на удалённой Windows-машине;
  • выполнение графических программ одновременно на нескольких машинах, с одним дисплеем, одной клавиатурой и одной мышью.

Принципы дизайна X

В 1984 году Боб Шейфлер и Джим Геттис зафиксировали ранние принципы построения X:

  • Добавляй новую функциональность только в том случае, если без неё нельзя завершить какое-то реальное приложение.
  • Решить, чем система не является, столь же важно, сколь решить, чем она является. Не пытайся удовлетворить все мыслимые потребности; вместо этого сделай систему расширяемой, чтобы новые потребности могли быть удовлетворены совместимым образом.
  • Хуже обобщения одного примера может быть только обобщение вообще без примеров.
  • Если проблема не понята до конца, возможно, лучше не решать её вовсе.
  • Если ты можешь добиться 90 процентов нужного эффекта, затратив всего 10 процентов сил, используй более простое решение.
  • Изолируй сложные места как можно сильнее.
  • Обеспечивай механизм, а не политику. В частности, политика интерфейса пользователя должна быть в руках клиентов.

С тех пор проект X, в основном, придерживался этих принципов. Демонстрационная реализация разрабатывается с расчётом на расширение и улучшение, в то же время, она остаётся почти полностью совместимой с протоколом 1987 года.

Интерфейсы пользователя

X Window System в Mac OS X

X Window System намеренно не определяет, как должен выглядеть интерфейс пользователя приложения — кнопки, меню, заголовки окон и т. д. Эти вопросы решаются на уровне оконных менеджеров, инструментариев элементов интерфейса, сред рабочего стола, либо на уровне отдельных приложений. По этой причине вид «типичного» X-интерфейса претерпел огромные изменения с течением времени.

Оконный менеджер управляет размещением и внешним видом окон приложений. Он может создавать интерфейс, подобный Microsoft Windows или KDE и GNOME), или совершенно другой стиль (например, в фреймовых оконных менеджерах, таких, как Ion). Оконный менеджер может быть простым и минималистичным (как Enlightenment).

Многие пользователи используют X вместе с полной средой рабочего стола, которая включает в себя оконный менеджер, различные приложения и единый стиль интерфейса. Наиболее популярные среды рабочего стола — KDE. В стандарте указана среда freedesktop.org пытается обеспечить взаимодействие между различными средами, а также компоненты, необходимые для конкурентоспособного рабочего стола на основе X.

Реализации

Референсная (или образцовая) реализация (англ. reference implementation ) от фонда X.Org Foundation, называемая X.Org Server, является канонической реализацией X Window System. Поскольку она распространяется на условиях весьма либеральной лицензии, появились несколько её разновидностей (как свободных, так и проприетарных). Коммерческие поставщики аппаратному обеспечению, обычно сильно модифицируя её и добавляя проприетарные расширения.

Вплоть до 2004 года проект порт X на 386-совместимые персональные компьютеры. К концу 1990-х этот проект стал главным источником технических инноваций в X Window System и де-факто руководил разработкой X. [2] Однако в 2004 году форком XFree86, но со свободной лицензией) стала более распространённой.

Mac OS X. В среде X запущен графический редактор OpenVMS — операционная система компании CDE, известную как DECwindows. В состав операционных систем Mac OS X 10.3 (Panther) и выше от Apple входит XFree86 4.3 и X11R6.6, с более полной интеграцией в Mac OS X .

Cygwin/X выполняется без корневого окна на Microsoft Windows XP. X-приложения (xeyes, xclock, Windows (Дата/Время, Калькулятор).

Microsoft Windows не включает в себя поддержку X, но существуют многочисленные сторонние реализации: как свободные (Cygwin/X,

Когда X Window System выполняется внутри другой оконной системы (например, оконной подсистемы Microsoft Windows или Mac OS), она обычно работает в режиме без корневого окна (англ. rootless ). Это значит, что корневое окно (фон экрана и связанные с ним меню) управляется внешней оконной системой, а не самой X Window System. При этом внешняя оконная система также управляет геометрией X-окон, создаваемых внутри неё. Однако некоторые серверы (например, Exceed, Xming или Cygwin/X) способны создавать и корневое окно — в этом случае клиенты отображаются в отдельном окне во внешней системе.

X-терминалы

X-терминал — это выделенное аппаратное обеспечение, на котором выполняется X-сервер и которое служит в качестве тонкого клиента. Эта архитектура завоевала популярность при построении недорогих терминальных парков, в которых множество пользователей одновременно используют один большой сервер приложений. Такое применение X Window System хорошо соответствует изначальным намерениям разработчиков из MIT.

X-терминалы могут изучать сеть (в пределах локального широковещательного домена) с использованием протокола англ. X display manager ).

В настоящее время выделенные (аппаратные) X-терминалы не пользуются широкой популярностью: обычно персональный компьютер с X-сервером обеспечивает ту же функциональность при меньшей стоимости.

Расширения

X-сервер состоит из набора расширений, каждое из которых реализует определённые функции: от прорисовки геометрических примитивов до ускорения обработки и вывода на экран трёхмерной графики с использованием возможностей видеоаппаратуры. Почти каждый из этих модулей можно отключить или настроить в конфигурационном файле.

DDC

VESA Display Data Channel (DDC™) — стандарт обмена информацией между монитором и графической платой, позволяющий монитору передавать данные о поддерживаемых разрешениях, частотах развёртки, производителе монитора и т. д. Модуль DDC поддерживает версии 1 и 2 спецификации DDC. В соответствии с полученными данными он устанавливает основные параметры экрана или предупреждает о несоответствии заданных пользователем параметров.

RANDR

X Resize, Rotate and Reflect Extension — расширение X-сервера, реализующее функции масштабирования, поворота и отражения корневого окна. Используется при изменении разрешения, при динамической замене монитора (например, при переключении со встроенного экрана ноутбука на внешний монитор). Рассылает запущенным приложениям предупреждения об изменении конфигурации экрана.

предоставляет функции для совмещения и вывода изображений на экран. Позволяет обрезать изображение, накладывать маску по цветам с использованием альфа-канала, использовать различные фильтры, подготавливать и выводить текстовую информацию, а также отображать основные геометрические фигуры.

Shape

Расширение Shape предназначено для улучшения вида интерфейса пользователя. Среди его возможностей — отбрасывание тени элементами интерфейса для создания иллюзии трёхмерности; окна и кнопки с округлыми краями; возможность создавать различные фигуры, отличные от прямоугольных.

Xinerama позволяет представить множество мониторов как один экран. С его помощью можно выводить согласованное изображение на большие экраны, составленные из многих мониторов. Однако многие из существующих на данный момент оконных менеджеров не поддерживают или не полностью поддерживают спецификации Xinerama и поэтому показывают неадекватное изображение при использовании данного расширения.

Xv

Основная статья: X video

X video extension — расширение, позволяющие ускорить вывод видеофрагментов на экран с использованием возможностей графической платы (а точнее — её драйвера) и уменьшить тем самым нагрузку на центральный процессор. Многие графические платы позволяют выводить видеоизображения в форматах кодирования цвета телевидения SÉCAM, портов (каждый порт может использовать только одно приложение), поддерживаемых форматах кодирования цвета. Всю эту информацию можно просмотреть с помощью утилиты xvinfo .

Ограничения и критика X

В книге «The UNIX-HATERS Handbook» (1994) целая глава [3] посвящена проблемам X в конце 1980-х — начале 1990-х годов. Статья «Why X Is Not Our Ideal Window System» [4] («Почему X не является идеальной оконной системой») (1990) подробно рассматривает проблемы протокола и даёт рекомендации по улучшению.

Видеоаппаратура

Сегодня граница производительности графических компьютерных систем пролегает в области наиболее продвинутых графических функций. Изготовители аппаратного обеспечения, как правило, реализуют эти продвинутые возможности в проприетарных драйверах, причём эти драйверы обычно пишутся в первую очередь для систем Microsoft Windows (как для самых распространённых на потребительском рынке). Драйверы многих старых графических плат подверглись обратной разработке в рамках проектов X.Org Server. Однако некоторые производители рассматривают свои разработки в области высокопроизводительного видео как коммерческую тайну, или же как патентованные изобретения, которые они не хотят раскрывать.

Многие нынешние реализации X управляют видеоаппаратурой напрямую. Неустойчивый X-сервер может сделать дисплей непригодным к использованию даже в тех случаях, когда сама операционная система продолжает нормально функционировать; при этом может потребоваться перезагрузка всей системы. Технология Direct Rendering Infrastructure (DRI) призвана устранить эту проблему.

Функции интерфейса пользователя

X Window System намеренно не включает в себя спецификации интерфейса пользователя, равно как и большей части межпрограммного взаимодействия. По этой причине возникли очень сильно отличающиеся друг от друга интерфейсы, а также приложения, не всегда правильно работающие друг с другом. Существует спецификация взаимодействия клиентов Motif и среда программистам. [5] В настоящее время разработчики обычно добиваются единого стиля в приложениях, ориентируясь на одну конкретную среду рабочего стола или на конкретный инструментарий. Это также позволяет избежать непосредственной работы с ICCCM.

Протокол X не предоставляет никаких средств для работы со звуком. Поддержка звуковой аппаратуры и воспроизведение звуков возлагается на операционную систему. Поскольку пользователям всё чаще необходим звук, эта ситуация привела к появлению различных несовместимых друг с другом звуковых подсистем. В прошлом многие программисты игнорировали сетевые проблемы, и просто использовали локальные звуковые API операционной системы. Первое поколение клиент-серверных звуковых систем включает в себя rplay и Network Audio System. Более современные системы — esound в aRts в

До недавнего времени X Window System не включала в себя хорошего решения для печати содержимого дисплеев. Многие X-клиенты печатают в формате [6] и набирают популярность в инструментариях элементов интерфейса.

Сеть

По состоянию на июнь 2006 года в X Window System нет возможности отключить X-клиент или сеанс от одного сервера и подключить его к другому серверу (как в VNC). Работа над добавлением этой функции в X уже ведётся. Существуют обходные механизмы (просмотрщики VNC :0), которые делают экран текущего X-сервера доступным через VNC.

Пример туннелирования приложения X11 поверх SSH.

Данные, передаваемые по сети между X-сервером и удалёнными X-клиентами, по умолчанию не шифруются. Злоумышленник может при помощи сниффера перехватить и прочитать эти данные. Для предотвращения этого, как правило, X туннелируется поверх

Независимость от аппаратуры и отделение клиентов от серверов влияет на производительность системы. Сетевая прозрачность X требует, чтобы клиенты и сервер работали отдельно друг от друга. В прошлом это существенно снижало производительность отдельностоящей системы — по сравнению с Microsoft Windows и Mac OS, где оконная подсистема внедрена глубоко в саму операционную систему. Для нормальной работы X Window System рекомендовалось от 4 до 8 Мб оперативной памяти — значительно больше (по тем временам), чем для Windows или Mac OS.

Текущие версии Windows и Mac OS X имеют внутреннее разделение графической подсистемы, похожее на клиент-серверное разделение в X, и имеют примерно те же требования к ресурсам, что X с GNOME. Бо́льшая часть накладных расходов в X теперь приходится на задержку при передаче данных по сети между клиентом и сервером. Существует распространённое заблуждение, согласно которому при локальном использовании X Window System её сетевые возможности (ненужные в данном случае) отрицательно сказываются на производительности. На самом деле современные реализации X используют в таком случае локальные сокеты и общую память (напр.

Конкуренты X

В UNIX-подобных операционных системах для вывода графики почти повсеместно используется X Window System. Тем не менее, история знает несколько попыток создания альтернативы или замены X. Среди них: NeWS компании Sun Microsystems, не завоевавшая популярность на рынке; и Display PostScript компании Apple Aqua для Mac OS X .

Производились и попытки решить проблемы X путём полной её замены; в том числе — проекты Berlin/Y Window System . Однако эти проекты не получили практически никакого распространения.

Другие конкуренты пытаются избежать накладных расходов, возникающих в X, путём работы непосредственно с аппаратным обеспечением. Примерами таких проектов являются DirectFB и очень маленький FBUI. Механизм Direct Rendering Infrastructure (попытка создать надёжный ядерный интерфейс к видеобуферу) может сделать эти проекты ненужными.

Есть и другие способы добиться сетевой прозрачности графических служб:

  • VNC ( Virtual Network Computing ) — очень низкоуровневая система, которая пересылает сжатые растровые изображения по сети. Реализация для
  • Citrix MetaFrame — подобный X продукт для Microsoft Windows.
  • Tarantella, Inc. — компания, поставляющая
  • Технология NX NoMachine — узкополосный протокол для удалённых дисплеев.
  • SVG Terminal [7] — протокол для обновления веб-браузере в почти реальном времени.

История

Предшественники

До появления X существовало несколько растровых дисплейных систем. Из 1973) и Star (1981). В Lisa (1983) и 1984). В мире Роба Пайка (1984) и проект Andrew (1982).

X получила своё имя как преемница оконной системы W Window System (в латинском алфавите буква X следует сразу за буквой W). Система W работала под управлением операционной системы V. W использовала сетевой протокол с поддержкой терминальных и графических окон, при этом сервер поддерживал списки дисплеев.

Истоки и ранние разработки

Изначальная идея X Window System возникла в Массачусетском технологическом институте (MIT) в 1984 году в результате сотрудничества Джима Геттиса (из проекта отладки системы Argus. Проект Athena (совместный проект DEC, MIT и университете Карнеги—Меллон велась работа над оконной системой, но для неё не были доступны лицензии, а альтернатив не существовало.

Проект решил эти проблемы путём создания протокола, который поддерживал как локальные приложения, так и вызов удалённых приложений. В середине 1983 года начальный порт W на аппаратного обеспечения.

Шейфлер, Геттис и Рон Ньюмен приступили к работе, и X стала быстро развиваться. В январе 1985 года была выпущена версия 6. Компания DEC, которая в то время готовилась к выпуску своей первой рабочей станции

Во втором квартале 1985 года в X была реализована поддержка цветов для работы под DEC VAXstation-II/GPX . Эта версия стала известна как версия 9. Ранее MIT лицензировал X6 некоторым сторонним группам за плату. Однако теперь было решено распространять X9 и будущие версии свободно — на условиях, которые получили название лицензии MIT. X9 появилась в сентябре 1985 года.

Группа из Браунского университета портировала версию 9 на 1986 году из внешних организаций начали поступать запросы на использование X. Выпуск X10R2 состоялся в январе 1986 года, X10R3 — в феврале. X10R3 стала первой версией, получившей широкое распространение; DEC и Sun, и даже на IBM PC AT. В то же время на выставке Autofact были проведены демонстрации первого коммерческого приложения на основе X (инженерной системы, работающей на персональных компьютерах с X-сервером). Последняя версия X10 — X10R4 — появилась в декабре 1986 года.

Хотя X10 обладала интересной и мощной функциональностью, стало очевидно, что протокол X желательно сделать менее зависимым от аппаратуры до того, как X Window System станет слишком широко распространённой. Однако MIT в одиночку не справился бы со столь крупными изменениями в протоколе. Смоуки Уоллэс из лаборатории DEC WSL и Джим Геттис предложили DEC WSL заняться разработкой X11 и сделать её свободно распространяемой на тех же условиях, что X9 и X10. Этот процесс начался в мае 1986 года; протокол был готов в августе. Альфа-тестирование программного обеспечения началось в феврале 1987 года; бета-тестирование — в мае. Наконец, 15 сентября 1987 года X11 была официально выпущена.

Дизайн протокола X11, которым руководил Шейфлер, широко обсуждался в открытых списках рассылки раннего Интернета. Таким образом, X можно считать одним из первых крупномасштабных проектов по созданию свободного программного обеспечения.

Консорциум X MIT и X Consortium, Inc.

DECwindows OpenVMS 7.3-1

В 1987 году, когда успех X11 стал очевидным, MIT пожелал отказаться от дальнейшего управления проектом X. Однако на собрании девяти поставщиков, состоявшемся в июне 1987 года, поставщики сообщили MIT, что необходима нейтральная сторона, которая предотвращала бы распад X на рынке. В январе 1988 года была сформирована некоммерческая группа под названием Консорциум X MIT ( MIT X Consortium ). Её целью являлось управление дальнейшей разработкой X в нейтральной атмосфере, с учётом как коммерческих, так и образовательных интересов. Директором Консорциума стал Шейфлер. Джим Фултон и Кейт Паккард присоединились в качестве старших разработчиков в январе и марте 1988 года соответственно. При этом Джим работал в основном над шрифтами, оконными менеджерами и утилитами; а Кейт занимался переделыванием сервера. Донна Конверс и Крис Петерсон присоединились позже в том же году; их усилия были сосредоточены в области инструментариев и наборов элементов интерфейса, они работали в тесной связи с Ральфом Свиком из проекта

В 1993 году был сформирован преемник Консорциума X MIT — некоммерческая корпорация X Consortium, Inc. Под её началом 16 мая 1994 года была выпущена версия X11R6. В 1995 году корпорация взяла на себя управление разработкой инструментария CDE для 1996 года, выпустив последнюю версию, X11R6.3, и оставив после себя возрастающее коммерческое влияние в разработке. [8] [9]

The Open Group

В середине 1997 года X Consortium передал руководство проектом X организации The Open Group, образованной в 1996 году в результате слияния Open Software Foundation и X/Open.

The Open Group выпустила X11R6.4 в начале 1998 года. В этой версии было решено отказаться от традиционной либеральной лицензии, поскольку The Open Group желала обеспечить финансовую поддержку разработки X. [10] Новые условия не позволяли многим проектам (например, форк со стороны XFree86 [11] The Open Group сменила условия распространения X11R6.4 обратно на традиционную лицензию в сентябре 1998 года. [12] Последним выпуском под руководством The Open Group стал X11R6.4 patch 3.

X.Org и XFree86

Проект 1992 году из сервера X386 для IBM PC-совместимых компьютеров. X386 был написан Томасом Роэллом и Марком Снитили, пожертвован Консорциуму X MIT компанией Snitily Graphics Consulting Services (SGCS) и включён в состав X11R5 в 1991 году. Со временем XFree86 превратился из просто отдельно взятого порта X в ведущую и самую популярную реализацию системы и стал де-факто руководить разработкой X. [13]

В мае 1999 года The Open Group основала [14] ; технические инновации происходили в основном в рамках проекта XFree86. [15] В 1999 году команда XFree86 вошла в состав X.Org в качестве почётного члена [16] , чему способствовали различные компании-производители аппаратного обеспечения [17] , заинтересованные в использовании XFree86 вместе с GNU/Linux и в его статусе как наиболее популярной версии X.

Вплоть до 2003 года, пока популярность GNU/Linux (и, как следствие, распространённость X) возрастала, X.Org бездействовала [18] , и основная разработка происходила в XFree86. Проект XFree86 страдал от слишком закрытой модели разработки: программисты не могли получить доступ на запись в патчей. [19] В марте 2003 года организация XFree86 исключила Кейта Паккарда, который присоединился к XFree86 после распада Консорциума X MIT; сделано это было в весьма недружелюбной обстановке. [20] [21] [22]

X.Org и XFree86 начали обсуждать реорганизацию, дабы обеспечить полноценную разработку X. [23] [24] [25] Джим Геттис настаивал на переходе к открытой модели разработки по крайней мере с 2000 года. [9] Геттис, Паккард и другие начали подробно обсуждать изменения, которые требовалось внести для перехода к эффективной открытой разработке X.

Наконец, в феврале 2004 года проект XFree86 выпустил версию 4.4 под более ограниченной лицензией: в неё был добавлен пункт, аналогичный рекламному пункту (англ. advertising clause ) оригинальной лицензии BSD. Многие проекты, полагавшиеся на X, посчитали такую лицензию неприемлемой. FSF и GNU GPL. [26] Другие группы (например, форка.

Фонд X.Org Foundation

Основная статья: X.Org Foundation

В начале 2004 года представители freedesktop.org основали фонд X.Org Foundation. The Open Group передала ему управление доменным именем x.org . Это стало коренным изменением в разработке X. В то время как распорядители X с 1988 года (включая предыдущую X.Org) были организациями поставщиков, X.Org Foundation был основан самими разработчиками программного обеспечения, и в нём использовалась открытая модель разработки, опирающаяся на вклад извне. Было открыто членство для частных лиц, а корпоративное членство представлено в виде спонсорства. В настоящее время фонд X.Org Foundation поддерживается несколькими крупными корпорациями, такими, как Sun Microsystems.

Фонд выпустил X11R6.7 — X.Org Server — в апреле 2004 года. Эта версия была основана на лицензией), с добавленными изменениями X11R6.6. Благодаря внедрению открытой модели разработки и сохранению совместимости с GNU GPL проект привлёк многих бывших разработчиков XFree86. [26]

X11R6.8 вышла в сентябре 2004 года. В неё были включены значительные нововведения, в том числе предварительная поддержка прозрачных окон и других сложных визуальных эффектов, экранных луп и миниатюр, а также средства для интеграции с трёхмерными дисплейными системами (такими, как проект Looking Glass от Sun и проект Croquet). Политику внешнего вида предоставляют сторонние приложения, называемые композитными менеджерами (англ. composite managers ).

Дальнейшие разработки

21 декабря 2005 года фонд выпустил [27] X11R6.9 — монолитное дерево исходного кода для устаревших систем, и X11R7.0 — тот же исходный код, разбитый на независимые модули, которые могут поддерживаться в рамках отдельных проектов. [28] Версия X11R7.1 была выпущена 22 мая 2006 года, примерно через четыре месяца после 7.0, и включает в себя существенные улучшения. [29]

Планируется, что в будущем X-сервер будет получать доступ к видеоаппаратуре исключительно посредством Direct Rendering Infrastructure (DRI) на тех комбинациях аппаратного обеспечения и операционных систем, которые поддерживают такой доступ. Инфраструктура DRI впервые появилась в [30] Многие операционные системы начали добавлять соответствующую поддержку в ядро. Работа в этой области продолжается.

Наименование

Компьютерные специалисты зачастую сокращают полное название «X Window System» до «X11» или просто «X». Термин «X Windows» (на манер «Microsoft Windows») официально осуждается и считается неверным, хотя широко используется с самого начала истории X, в том числе и намеренно для литературного эффекта (например, в книге «The UNIX-HATERS Handbook»).

История выпусков

Версия Дата выпуска Основные изменения
X1 июнь 1984 Впервые используется название «X». Фундаментальные изменения, отличающие продукт от W.
X6 январь 1985 Первая версия, лицензированная нескольким внешним компаниям.
X9 сентябрь 1985 Поддержка цветов. Первый выпуск на условиях лицензии MIT.
X10 конец 1985 DOS) и другие.
X10R2 январь 1986
X10R3 февраль 1986 Первый выпуск за пределы MIT. uwm становится стандартным оконным менеджером.
X10R4 декабрь 1986 Последняя версия X10.
X11 15 сентября 1987 Первый выпуск нынешнего протокола.
X11R2 февраль 1988 Первый выпуск под начальством Консорциума X MIT. [31]
X11R3 25 октября 1988 XDM.
X11R4 22 декабря 1989 twm становится стандартным оконным менеджером; улучшения в приложениях; расширение Shape; новые шрифты.
X11R5 5 сентября 1991 PEX; Xcms (управление цветом); сервер шрифтов; X386; Расширение Xvideo.
X11R6 16 мая 1994 XFree86.
X11R6.1 14 марта 1996 Расширение X Double Buffer; расширение X keyboard; расширение X Record.
X11R6.2
X11R6.3 (Broadway)
23 декабря 1996 Функциональность WWW; LBX. Последний выпуск под руководством X Consortium. X11R6.2 — это обозначение подмножества X11R6.3, в котором единственными отличиями от R6.1 являются Xprint и реализация в [32]
X11R6.4 31 марта 1998 [33]
X11R6.5 Внутренний выпуск

X11R6.5.1 20 августа 2000
X11R6.6 4 апреля 2001 Исправления багов; изменения в XFree86.
X11R6.7.0 6 апреля 2004 Первый выпуск от фонда X.Org Foundation, включающий XFree86 4.4RC2. Полный комплект для конечного пользователя. Удаление XIE, PEX и libxml2. [34]
X11R6.8.0 8 сентября 2004 Прозрачность окон; XDamage; Distributed Multihead X; XFixes; Composite; XEvIE.
X11R6.8.1 17 сентября 2004 Устранение уязвимости в libxpm.
X11R6.8.2 10 февраля 2005 Устранение багов, обновления драйверов.
X11R6.9
X11R7.0
21 декабря 2005 EXA, значительный рефакторинг кода. [35] Из одного набора исходных кодов получились модульная версия 7.0 и монолитная версия 6.9.
X11R7.1 22 мая 2006 Улучшения EXA; интеграция Kdrive; ОС и платформ. [36]
‘X11R7.2’ 15 февраля 2007 Удаление LBX. [37]
X11R7.3 6 сентября 2007 Xorg server 1.4 — see Server14Branch for more details. Highlights:

RandR 1.2: RandR 1.2 offers output hotplug, as well as on-the-fly output reconfiguration and mode switching. Input hotplug: Input hotplug allows hotplugging of input devices, and also adds enhanced support for touchscreens and tablets, through either HAL or D-Bus. KDrive: Numerous enhancements have been made to the KDrive codebase, including better support for multiple input devices. DTrace: When running on OpenSolaris, DTrace support is available in the X server, allowing detailed accounting of operations inside the server. EXA: A great deal of work has been done on the EXA framework to make it more usable. New applications: xbacklight New drivers: xf86-video-glide, xf86-video-vermilion New man pages for API’s: libXinerama, libXcomposite, XKB functions in libX11, Xtest functions in libXtst Support for font catalogue directories in font path xdm: Xft support added. [38]

Примечания

  1. ↑Licenses (англ.) . X.Org Foundation (март 2004). Проверено 29 июня 2006.
  2. ↑Джим Геттис.Письмо в форум XFree86. Проверено 4 января 2007.
  3. ↑Дон Хопкинс.The X-Windows Disaster (англ.) . The UNIX-HATERS Handbook. Проверено 29 июня 2006.
  4. ↑Ханя Жаевска, Марк Менес, Джоэл МакКормакWhy X Is Not Our Ideal Window System // Software — Practice & Experience. — 1990. — Т. 20. — № S2.
  5. ↑http://lists.debian.org/debian-user/1996/11/msg00637.html
  6. ↑Xprint Frequently Asked Questions (англ.) . Проверено 29 июня 2006.
  7. ↑http://networkimprov.net/airwrx/awscene.html
  8. ↑mako.Financing Volunteer Free Software Projects (англ.) (15 июня 2005). Проверено 29 июня 2006.
  9. ↑ 12Джим Геттис.Lessons Learned about Open Source (англ.) (2000). Проверено 29 июня 2006.
  10. ↑Shaleh.xstate (англ.) (2 апреля 1998). Проверено 29 июня 2006.
  11. ↑Мэттью Арнисон.The means to an X for Linux: an interview with David Dawes from XFree86.org (англ.) (июнь 1999). Проверено 29 июня 2006.
  12. ↑Кристофер Браун.X11R6.4 Sample Implementation Changes and Concerns (англ.) . Проверено 29 июня 2006.
  13. ↑http://www.xfree86.org/pipermail/forum/2004-February/003945.html
  14. ↑Роберт Митчелл.Q&A: The X Factor (англ.) . ComputerWorld (4 февраля 2002). Проверено 29 июня 2006.
  15. ↑Кейт Паккард.The Evolution of the X Server Architecture (англ.) (1999). Проверено 29 июня 2006.
  16. ↑http://xfree86.org/pipermail/forum/2003-March/000418.html
  17. ↑XFree86 joins X.Org as Honorary Member (англ.) . Slashdot (1 декабря 1999). Проверено 29 июня 2006.
  18. ↑http://xfree86.org/pipermail/forum/2003-April/003127.html
  19. ↑mharris.Diary for mharris (англ.) (9 января 2003). Проверено 29 июня 2006.
  20. ↑http://www.xfree86.org/pipermail/forum/2003-March/001997.html
  21. ↑http://www.xfree86.org/pipermail/forum/2003-March/002165.html
  22. ↑http://www.xfree86.org/pipermail/forum/2003-April/003016.html
  23. ↑http://www.xfree86.org/pipermail/forum/2003-March/000554.html
  24. ↑http://www.xfree86.org/pipermail/forum/2003-March/002415.html
  25. ↑http://xfree86.org/pipermail/forum/2003-April/003144.html
  26. ↑ 12Дэвид Уилер.The Cautionary Tale of XFree86 (англ.) . Make Your Open Source Software GPL-Compatible. Or Else (16 февраля 2005). Проверено 29 июня 2006.
  27. ↑X11R6.9 and X11R7.0 Officially Released (англ.) (21 декабря 2005). Проверено 29 июня 2006.
  28. ↑Пол Андерсон, Алан Куперсмит, Эгберт Эйк, Адам Джексон, Кевин Мартин, Кейт Паккард.Modularization Proposal (англ.) (2005). Проверено 29 июня 2006.
  29. ↑Proposed Changes for X11R7.1 (англ.) . Проверено 29 июня 2006.
  30. ↑Кейт Паккард.Getting X Off The Hardware (англ.) (2004). Проверено 29 июня 2006.
  31. ↑The X Window User HOWTO: Getting Started (англ.) . Проверено 29 июня 2006.
  32. ↑XFree86 and X11R6.3 (англ.) . Release Notes for XFree86 3.3.6. XFree86 Project (31 декабря 1999). Проверено 29 июня 2006.
  33. ↑X Press Release — X11R6.4 (англ.) . The Open Group (31 марта 1998). Проверено 29 июня 2006.
  34. ↑X.Org Foundation releases X Window System X11R6.7 (англ.) . LWN (7 апреля 2004). Проверено 29 июня 2006.
  35. ↑ChangesSince68 (англ.) . X.Org Wiki. Проверено 29 июня 2006.
  36. ↑Release Notes for X11R7.1 (англ.) . X.Org Foundation (22 марта 2006). Проверено 29 июня 2006.
  37. ↑ChangesForX11R72 (англ.) . X.Org Wiki. Проверено 15 февраля 2007.
  38. ↑7.3 Release notes (англ.) . X.Org Foundation. Проверено 13 декабря 2007.
  39. ↑X.Org Foundation Releases X7.4

См. также

  • Графический интерфейс пользователя
  • Оконная система
  • Xgl
  • VirtualGL
  • Y Window System
  • Программы UNIX-подобных операционных систем
  • Sax2

Ссылки

  • X.Org Foundation (англ.) — официальный веб-сайт.
  • X Window System в DMOZ
  • Window Managers for X (англ.) — веб-сайт, посвящённый различным оконным менеджерам X.
  • DsY (англ.) — развитие проекта Y Window System.
  • Jon Smirl.The State of Linux Graphics (англ.) (30 августа 2005). Проверено 24 ноября 2007.
  • Джон Смирл.Состояние графики Линукс (рус.) . Проверено 24 ноября 2007.
  • Christopher Browne.16. On the Thesis that X is Big/Bloated/Obsolete and Should Be Replaced (англ.) . Christopher Browne’s Web Pages → VI. Operating System-Centric Computing → The X Window System (2005). Проверено 16 февраля 2009.
  • [Геттис, ДжимOpen Source Desktop Technology Road Map (англ.) (9 декабря 2003). Проверено 29 июня 2006.
  • Оскар Бойкин.X Marks the Spot: Looking back at X11 Developments of Past Year (англ.) . OSNews (25 февраля 2004). Проверено 29 июня 2006.
  • Майк Пакетт.Why Apple didn’t use X for the window system (англ.) . Apple Computer (19 августа 2003). Проверено 29 июня 2006.
  • Writing a Graphics Device Driver and DDX for the DIGITAL UNIX X Server (англ.) . DEC (1997). Проверено 29 июня 2006.
  • Кентон Ли.Technical X Window System and Motif WWW Sites (англ.) . Проверено 29 июня 2006.
  • Демонстрационная реализация от фонда X.Org (англ.)
  • Apple — Mac OS X — X11 (англ.) — Mac OS X.
  • Win32-x11 — X-сервер под Windows-системы, основанный на GDI/DirectX.
  • LibW11 — реализация Xlib под Windows-системы, использующая вызовы Win32 API.

Литература

  • Линда Муи, Эрик Пирс. X Window System Volume 8: X Window System Administrator’s Guide for X11 Release 4 and Release 5. — 3rd ed. — O’Reilly, 1993. — ISBN 0-937175-83-8
  • Роберт Шейфлер, Джеймс Геттис. X Window System: Core and extension protocols: X version 11, releases 6 and 6.1. — Digital Press, 1996. — ISBN 1-55558-148-X

Основной протокол • Выделение • Менеджер окон • Менеджер сессий • Дисплейный менеджер • Инструментарий • Авторизация • Встроенные средства • Список цветов

Графическое • Клавиатурное • • X video • Контурное • GLX • Важные реализации

Сетевые соединения 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
  1. Подключение необходимо запускать с ключом -X , который активирует переадресацию X11. На практике, однако из-за X11 SECURITY extension это часто не работает. В таких случаях используют -Y для подключения с доверительной переадресацией X11.
  2. Убедитесь, что на удаленном сервере установлен пакет xauth , который создаст файл ~/.Xauthority y. Если все нормально, то файл уже создан и проверка показывает на наличие MAGIC COOKIE.
|admin@redeye:[~]> xauth list host/unix:0 MIT-MAGIC-COOKIE-1 00000000000000111111111111111111
  1. Имеет смысл в качестве проверки иксов выполнить xclock прежде, чем запускать JAVA installer, или мастер настроек некоей корпоративной CRM, или ERP системы. Если показалось окно xclock, то соединение с X-сервером работает как надо.

Рис. 5 Собственно xclock, значит удаленные иксы настроены и работают.

  1. Если после логина по 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

Использование 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

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

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