X11 linux что это

Обновлено: 06.07.2024

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 через те же каналы.

Для Fink скомпилированы многие менеджеры окон - см. текущий список.

1.9 Что такое Quartz/Aqua, Gnome и KDE?

Это виды среды рабочего стола, в числе многих других. Их цель - обеспечение дополнительных границ для приложений, чтобы их вид и поведение были визуально последовательными. Пример:

графический процессор : X11

Границы между графическим процессором, менеджером окон и рабочим столом размыты, т.к. схожая или одинаковая функция может быть реализована одним или несколькими из них. Это одна из причин того, почему отдельный менеджер окон может не работать с отдельной средой рабочего стола.

Многие приложения разработаны для интеграции с отдельным рабочим столом. Чаще всего после инсталляции библиотек среды рабочего стола (и других базовых библиотек) разработанное для данной среды приложение работает с небольшими функциональными потерями или вовсе без них. Примером служит растущий выбор приложений GNOME, которые можно инсталлировать и использовать без применения GNOME. К сожалению, это достижение пока не распространяется на приложения KDE.



Есть две технологии в ИТ, которые казалось должны были исчезнуть на рубеже прошлого века, но их живучесть и удобство раз за разом отодвигает их уход со сцены. Речь идет об 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.

▍ Сетевая структура взаимодействий 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 . Эта процедура пробегает по каждому интерфейсу транспорта, поддерживаемого сервером.


Количество таких интерфейсов определено константой NUMTRANS в файле X11/Xtrans/Xtrans.c.


Таблица Xtransports[] определена в том же самом файле и содержит 10 элементов, таким образом NUMTRANS ≤ 10.


Сами же флаги, которые во время сборки определяют транспортные интерфейсы X сервера, можно найти в xc/config/cf/linux.cf .


Проследив цепочку до системного вызова socket() находим такую последовательность транспортных процедур.


Серверный процесс стартует с вызова функции TRANS(CreateListener) из Xtrans.c . Далее переход в состояние ожидания входящего соединения происходит в такой последовательности.


В файле Xtransmit.h можно обнаружить X_TCP_PORT . Первое клиентское соединение будет использовать порт 6000, второе — 6001 и т․ д․

▍ Взгляд изнутри трафика между клиентом и сервером X

Запустим простейшую иксовую программу Xclock и проверим как все это работает на практике.

Используемый TCP порт напрямую связан с количеством соединений и номером переменной $DISPLAY , если бы использовалось DISPLAY=tcp/192.168.10.10:1.0 , то тогда в последней строке connect() состоялся бы по TCP порту 6001.


Рис. 3 Установка параметров соединения в сессии X11.

Можно также пронаблюдать за процессом с помощью сетевого анализатора, клиентский запрос Initial connection request соответствует вызову xConnClientPrefix . Соответственно Initial connection reply в следующем пакете создан со стороны xConnSetupPrefix и xConnSetup . Для сбора трафика можно запустить Wireshark и слушать локальный интерфейс, либо с помощью следующей команды tcpdump.


Далее, сам файл можно открыть в Wireshark и отфильтровать просмотр по протоколу x11 . Обычно для сбора трафика нужны привилегии root.


Рис. 4 Сетевой след соединения X11 в WireShark.

То же самое и во всех подробностях можно увидеть в tshark в текстовом формате. Так выглядит клиентский запрос X11 в сторону сервера.


Пакет с ответом со стороны X-сервера совсем не так лаконичен, в нем указаны все необходимые детали для форматирования графического вывода на экран.

▍ Удаленное подключение к X-серверу по ssh

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

  1. Подключение необходимо запускать с ключом -X , который активирует переадресацию X11. На практике, однако из-за X11 SECURITY extension это часто не работает. В таких случаях используют -Y для подключения с доверительной переадресацией X11.
  2. Убедитесь, что на удаленном сервере установлен пакет xauth , который создаст файл

  1. Имеет смысл в качестве проверки иксов выполнить xclock прежде, чем запускать JAVA installer, или мастер настроек некоей корпоративной CRM, или ERP системы. Если показалось окно xclock, то соединение с X-сервером работает как надо.


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

  1. Если после логина по ssh была выполнена команда смены пользователя sudo su - для перехода в root, то тогда необходимо выставить переменную DISPLAY. Этого не надо делать, если используется изначальный пользователь и сеанс shell.

Я стараюсь по мере возможности тестировать сеанс Wayland при каждом новом релизе KDE Plasma, несмотря на многочисленные улучшения с каждым разом, на версии kde-apps-21.04.3 работать можно лишь на Plasma-X11. В чем бы не состояли преимущества Wayland, до тех пор пока в терминале зависает команда man, хаотично прыгают элементы ниспадающего меню и блуждает внешний монитор, старый и добрый X Window System остается вне конкуренции. Надеюсь так не будет продолжаться долго.


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


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


Для выполнения некоторых задач на компьютере не обойтись без использования удобного графического интерфейса. Такими задачами могут быть работа с графическими редакторами, видеоредакторами, запуск игровых приложений, визуализация, анимация т. д. Для всего этого необходимо программное обеспечение (ПО), ресурсы (аппаратные, программные), спецификации (протоколы взаимодействия), которые реализуют пользователям полноценный графический интерфейс (GUI).

Поскольку ОС UNIX / GNU Linux обладают архитектурой, ключевой особенностью которой является сетевое клиент-серверное взаимодействие, то реализация графической системы также построена на схеме «клиент-сервер». Ядром такой системы является протокол, описывающий правила организации и предоставления неким сервером X своих мощностей и вычислительных ресурсов клиентам — пользовательских машин, на которых запускается графическая оболочка, позволяющая работать приложениями в виде окон (Window) с характерными для них органами управления и оформлением. Причём внешний вид и сопутствующие функциональные возможности GUI будут зависеть от соответствующих графических библиотек, установленных на клиентской машине. Всё это в совокупности определяет графическую систему X Window.

В распределённых (достаточно больших) системах на некоторых компьютерах (или даже в подсетях, охватывающих целые отделы организации) было необходимо, в связи со спецификой выполняемых задач, работать с полноценным графическим интерфейсом, например для: инженерной графики в CAD, верстки документов, 3D-графики. Конечно, в дальнейшем вполне закономерно использование графических оболочек для общепользовательских специальных задач стало повсеместным. Однако серверные компьютеры по сей день могут (и, вероятнее всего должны) обходиться без GUI.

Ещё в начале 1980-х годов в Массачусетсском технологическом институте (MIT) в рамках проекта Project Athena была разработана оконная система W (Window), задачей которой было обеспечение полноценного GUI для рабочих станций, занятых соответствующими задачами. Позже преемницей W стала система X – более универсальная и гибкая для интеграции сложных ОС. Её более поздняя версия X Window System 10, которая вышла 1985 году, завоевала довольно широкое распространение. Версия 11 этой ОС или просто X11 так и вовсе благодаря своим довольно открытым условиям лицензии стала самым популярным решением в области GUI поскольку благодаря своим продуманной архитектуре и потенциалу активно переносилась на другие платформы. Появлялось всё больше реализаций протокола XDM и как следствие — новых реализаций системы X11.

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

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


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

Как уже было отмечено, гибкость, масштабируемость, а также открытость системы X Window породила множество реализаций не только её самой (и её протокола), но ничуть не меньшее число графических сред. Долгое время (да и по сей день) оригинальная графическая оболочка на «чистом X11» с собственной библиотекой интерфейсных элементов была незавершённой, т. к. изначально не подразумевалось её повсеместное использование. Однако, с другой стороны клиент-серверная архитектура X Window, а также её независимость от низкоуровневой реализации GUI на стороне клиента «развязывали» руки разработчикам ПО, которые очень часто стремились снабдить свои приложения оригинальным внешним видом, разрабатывая и поставляя вместе с ПО также собственные библиотеки элементов GUI. При этом развитие как самой системы X Window, так графических сред и библиотек элементов интерфейса происходит независимо друг от друга усилиями разных разработчиков.

Именно поэтому сейчас можно наблюдать такое количество всевозможных графических окружений для UNIX/GNU Linux. Некоторые из них (KDE, GNOME, XFCE) по качеству дизайна, удобства использования, функционалу и быстродействию настолько хороши, что люди, впервые увидевшие и поработавшие в этих средах устанавливают и используют их в качестве основных.


В статьях, новостях и обсуждениях, связанных с Linux, вы часто встретите термин сервер отображения, Xorg, Wayland и т. д.

В этой статье я расскажу о серверах отображения в Linux.

Что такое дисплей-сервер в Linux?

Сервер отображения обеспечивает основу для графической среды, так что вы можете использовать мышь и клавиатуру для взаимодействия с приложениями.

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

Не путайте сервер дисплея с окружением рабочего стола. В окружении рабочего стола под ним используется дисплейный сервер.

Звучит знакомо, но не совсем понятно? Позволь мне объяснить.

Отображение протоколов связи с сервером в Linux

В Linux доступны три протокола отображения: X11, Wayland и Mir. Я дам вам краткое описание этих серверов отображения.

X Архитектура 1

Wayland

Согласно его веб-сайту, Wayland «задумана как более простая замена X, более простая в разработке и обслуживании».

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

Многие приложения с графическим интерфейсом и их фреймворки зависят от X-сервера. Эти приложения не работали должным образом на Wayland.

Это заставило Ubuntu оставаться на X в качестве сервера отображения по умолчанию. Он по-прежнему предоставляет возможность использовать Wayland, но больше не используется по умолчанию.

Подавляющее большинство дистрибутивов даже сегодня по умолчанию используют сервер отображения X.

Архитектура сервера отображения Wayland

Сервер отображения Mir поставляется с собственным протоколом сервера отображения Mir, который отличается от протокола, используемого в X11 и Wayland. Он был разработан Canonical в рамках разработки Unity и должен был стать предпочтительным сервером отображения для Ubuntu .

С 2017 года он был заменен сервером отображения Wayland для настольных версий Ubuntu, хотя разработка Mir продолжалась для приложений Интернета вещей (IoT).

Почему мы все еще используем Xorg?

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

По этой причине многие программы могут не работать при использовании Wayland. Эксперимент Ubuntu по переключению на Wayland по умолчанию подтвердил это.

Вывод

Надеюсь, вы немного лучше понимаете концепцию сервера отображения в Linux. Я старался не вдаваться в технические детали, но мне не удалось полностью их избежать.

Читайте также: