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

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

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

Система X Window System была разработана в Массачусетском технологическом институте (MIT) в 1984 году. По состоянию на февраль 2016 года последней является версия протокола X11R7.7, которая появилась в июне 2012 года. Проект X возглавляет фонд X.Org Foundation. Образцовая реализация () системы свободно доступна на условиях лицензии MIT и подобных ей лицензий.

X Window System часто называют X11 или просто X.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Microsoft Windows не включает в себя поддержку X, но существуют многочисленные сторонние реализации: как свободные (Cygwin/X, Xming, X-Deep/32, WeirdMind, WeirdX), так и проприетарные (Xmanager, WiredX, Exceed, X-Win32). Обычно они используются для управления удалёнными X-клиентами.

Для устаревшей операционной системы DOS также существует реализация X-сервера, DesqView/X, даже в настоящее время позволяющая создавать довольно простые тонкие клиенты.

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

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

X-терминалы могут изучать сеть (в пределах локального широковещательного домена) с использованием протокола XDMCP, составляя при этом список узлов сети, с которых они могут запускать клиенты. На изначальном узле должен выполняться дисплейный менеджер X ().

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

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

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

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

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

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

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

Xv