stringtranslate.com

Протоколы и архитектура X Window System

Логотип X Window System

В вычислительной технике X Window System (обычно: X11 или X) — это сетевая прозрачная оконная система для растровых дисплеев. В этой статье подробно описываются протоколы и техническая структура X11.

Модель клиент-сервер и прозрачность сети

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

X использует модель клиент-сервер . Программа X-сервера запускается на компьютере с графическим дисплеем и взаимодействует с различными клиентскими программами . X-сервер действует как посредник между пользователем и клиентскими программами, принимая запросы на TCP-порт 6000 плюс номер дисплея [1] для графического вывода (окна) от клиентских программ и отображая их пользователю (дисплею), а также получая пользовательский ввод (клавиатура, мышь) и передавая его клиентским программам.

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

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

Принципы проектирования

Боб Шейфлер и Джим Геттис изложили ранние принципы X следующим образом (перечислены в Scheifler/Gettys 1996):

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

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

Основной протокол

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

После установления соединения клиент и сервер обмениваются по каналу четырьмя различными типами пакетов:

  1. Запрос: клиент запрашивает информацию у сервера или просит его выполнить действие.
  2. Ответ: сервер отвечает на запрос. Не все запросы генерируют ответы.
  3. Событие: сервер отправляет клиенту событие, например, ввод с клавиатуры или мыши, перемещение, изменение размера или отображение окна.
  4. Ошибка: сервер отправляет пакет с ошибкой, если запрос недействителен. Поскольку запросы ставятся в очередь, пакеты с ошибками, сгенерированные запросом, могут не отправляться немедленно.

X-сервер предоставляет набор базовых услуг. Клиентские программы реализуют более сложные функции, взаимодействуя с сервером.

Окна

Возможное размещение некоторых окон: 1 — корневое окно, которое покрывает весь экран; 2 и 3 — окна верхнего уровня; 4 и 5 — дочерние окна 2. Части окна, находящиеся за пределами его родителя, не видны.

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

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

Идентификаторы

X-сервер хранит все данные об окнах, шрифтах и ​​т. д. Клиент знает идентификаторы этих объектов — целые числа, которые он может использовать в качестве имен для них при взаимодействии с сервером. Например, если клиент хочет создать окно, он запрашивает у сервера его создание и (в случае успеха) получает в ответ идентификатор, который сервер связывает с вновь созданным окном. Идентификатор может быть позже использован клиентом для запроса, например, строки, которая должна быть отрисована в окне.

Идентификаторы уникальны для сервера, а не только для клиента; например, нет двух окон с одинаковым идентификатором, даже если они созданы двумя разными клиентами. Клиент может получить доступ к любому объекту, указав его идентификатор, даже если другой клиент создал этот объект.

Атрибуты и свойства

Каждое окно имеет предопределенный набор атрибутов и набор свойств, которые хранятся на X-сервере и доступны клиентам через соответствующие запросы. Атрибуты — это данные об окне, такие как его размер, положение, цвет фона и т. д. Свойства — это фрагменты данных, прикрепленные к окну. В отличие от атрибутов, свойства не имеют значения на уровне протокола ядра X Window. Клиент может хранить произвольные данные в свойстве окна.

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

Свойства в основном используются для межклиентского взаимодействия. Например, свойство named WM_NAMEхранит имя окна; оконные менеджеры обычно считывают это свойство и отображают имя окна в верхней его части.

Программа xpropможет отображать свойства окна. В частности, xprop -rootпоказывает свойства корневого окна, включающие в себя X-ресурсы (параметры программ).

События

События — это пакеты, отправляемые сервером клиенту для сообщения о том, что произошло что-то, что может заинтересовать клиента. Клиент может запросить сервер отправить событие другому клиенту; это используется для связи между клиентами. Например, когда клиент запрашивает текст, который в данный момент выбран, событие отправляется клиенту, который в данный момент обрабатывает окно, содержащее выбор.

Содержимое окна может быть «уничтожено» в некоторых условиях (например, если окно закрыто). Всякий раз, когда область уничтоженного содержимого становится видимой, сервер генерирует событие, Exposeчтобы уведомить клиента о том, что часть окна должна быть отрисована.

Другие события могут служить для уведомления клиентов о вводе данных с клавиатуры или мыши, о создании новых окон и т. д.

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

Цветовые режимы

То, как X Window System обрабатывает цвета, иногда может сбивать пользователей с толку, и исторически поддерживалось несколько различных режимов. Большинство современных приложений используют полный цвет (24-битный цвет, 8 бит для каждого из красного, зеленого и синего), но старые или специализированные приложения могут требовать другой цветовой режим. Многие коммерческие специализированные приложения используют PseudoColor.

Протокол X11 фактически использует одно 32-битное целое число без знака — называемое пиксельным значением — для представления одного цвета в большинстве графических операций. При передаче интенсивности основных цветов для каждого компонента цвета используется 16-битное целое число. Существуют следующие представления цветов; не все из них могут поддерживаться на определенном устройстве.

Xlib и другие клиентские библиотеки

Большинство клиентских программ взаимодействуют с сервером через клиентскую библиотеку Xlib . Помимо Xlib, библиотека XCB работает более тесно с протоколом X. В частности, большинство клиентов используют такие библиотеки, как Xaw , Motif , GTK+ или Qt , которые в свою очередь используют Xlib для взаимодействия с сервером. Qt перешел с Xlib на XCB с выпуском 5.0, но клиентские программы были почти полностью не затронуты этим изменением.

Межклиентское общение

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

Inter -Client Communication Conventions Manual определяет протокол для обмена данными через выборки и взаимодействия приложений с оконным менеджером. Некоторые посчитали эту спецификацию сложной и запутанной; [3] [4] согласованность внешнего вида и поведения приложения и коммуникации обычно решается путем программирования для заданной среды рабочего стола.

Протокол Inter-Client Exchange (ICE) определяет структуру для построения протоколов взаимодействия между клиентами, чтобы программисты могли построить определенный протокол поверх него. В частности, протокол X Session Management (XSMP) — это протокол на основе ICE, который управляет взаимодействием между приложениями с менеджером сеансов , который является программой, которая заботится о сохранении состояния рабочего стола в конце интерактивного сеанса и восстановлении его при повторном запуске другого сеанса с тем же пользователем.

Спецификации freedesktop включают в себя новые соглашения, в том числе соглашение о перетаскивании Xdnd (используется для передачи данных путем их выбора и перетаскивания в другое окно) и соглашение о встроенных приложениях Xembed (в котором подробно описывается, как приложение может работать в подокне другого приложения).

Выделения, буферы вырезания и перетаскивание

Механизмы выделения, буферов вырезания и перетаскивания в системе X Window позволяют пользователю переносить данные из одного окна в другое. Выделения и буфер вырезания используются (обычно), когда пользователь выделяет текст или другие данные в окне и вставляет их в другое окно. Перетаскивание используется, когда пользователь выделяет что-то в окне, затем щелкает по выделенному и перетаскивает его в другое окно.

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

Пользователи могут передавать между клиентами данные различных типов: обычно это текст, но также это может быть пиксельная карта, число, список объектов и т. д.

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

Оконный менеджер

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

Менеджер окон отвечает за определение положения окон, размещение декоративной рамки вокруг них, обработку значков, обработку щелчков мыши за пределами окон (на «фоне»), обработку определенных нажатий клавиш и т. д.

С точки зрения X-сервера, оконный менеджер работает как клиент, как и любой другой клиент. Начальное положение и декоративные рамки вокруг окон обрабатываются оконным менеджером с помощью следующих запросов:

  1. приложение может попросить сервер не удовлетворять запросы на отображение (показ) подокон данного окна, а вместо этого отправить событие;
  2. приложение может запросить изменение родителя окна.

Менеджер окон использует первый запрос для перехвата любого запроса на отображение окон верхнего уровня (потомков корневого окна). Всякий раз, когда другое приложение запрашивает отображение окна верхнего уровня, сервер не делает этого, а вместо этого отправляет событие менеджеру окон. Большинство менеджеров окон переподчиняют окно: они создают большее окно верхнего уровня (называемое окном фрейма) и переподчиняют исходное окно как его дочернее. Графически это соответствует размещению исходного окна внутри окна фрейма. Пространство окна фрейма, которое не занято исходным окном, используется для декоративной рамки вокруг окна («границы» и «заголовка»).

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

Менеджер окон также обрабатывает значки и связанные с ними визуальные элементы графического пользовательского интерфейса. Значки не существуют на уровне протокола ядра X Window. Они реализуются менеджером окон. Например, всякий раз, когда окно должно быть «иконифицировано», менеджер окон FVWM отменяет сопоставление окна и создает окно для имени значка и, возможно, другое окно для изображения значка. Поэтому значение и обработка значков полностью определяются менеджером окон: некоторые менеджеры окон, такие как wm2, вообще не реализуют значки.

Менеджер сеанса

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

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

X Window System включает в себя менеджер сеансов по умолчанию, называемый xsm. Разработчики написали другие менеджеры сеансов для определенных настольных систем. Основные примеры включают ksmserver, xfce4-session, и gnome-sessionдля KDE , Xfce и GNOME соответственно.

X-дисплейный менеджер

Программа, известная как X display manager, показывает графическое приглашение на вход в систему в X Window System. В более общем смысле, display manager запускает один или несколько X-серверов на локальном компьютере или принимает входящие соединения с X-серверов, работающих на удаленных компьютерах. Локальные серверы запускаются display manager, который затем подключается к ним, чтобы предоставить пользователю экран входа в систему. Удаленные серверы запускаются независимо от display manager и подключаются к нему. В этой ситуации display manager работает как графический telnet- сервер: X-сервер может подключиться к display manager, который запускает сеанс; приложения, которые используют этот сеанс, работают на том же компьютере display manager, но имеют вход и выход на компьютере, где работает X-сервер (это может быть компьютер перед пользователем или удаленный компьютер).

X Window System поставляется с XDM в качестве базового поставляемого менеджера дисплеев. Другие менеджеры дисплеев включают GDM ( GNOME ), KDM / SDDM ( KDE ), WDM (использующий набор виджетов WINGs, используемый в Window Maker ) и entry (использующий архитектуру, используемую в Enlightenment v.17).

Элементы пользовательского интерфейса

Ранние наборы инструментов виджетов для X включали Xaw ( Athena Widget Set, 1983), OLIT ( OPEN LOOK Intrinsics Toolkit, 1988), XView (1988), Motif (1980-е) и Tk . OLIT и XView функционируют как базовые наборы инструментов для устаревшей среды рабочего стола OpenWindows компании Sun.

Motif предоставляет базовый набор инструментов для Common Desktop Environment (CDE), среды рабочего стола, используемой в коммерческих системах Unix, таких как Solaris , AIX и HP-UX . (Solaris 10 включает в себя как CDE, так и GNOME , причем последняя является предпочтительной средой рабочего стола по состоянию на 2010 год .)

Разработанные в последнее время наборы инструментов включают Qt (1991- , используется KDE ), GTK+ (1997- , используется GNOME), wxWidgets (1992- ), FLTK (1998- ), FOX (1997- ) и fpGUI (2005- по настоящее время).

Расширения

Шейфлер и Геттис разработали X-сервер как простой, но расширяемый. Таким образом, большая часть функциональности теперь находится в расширениях протокола.

На уровне протокола каждому расширению могут быть назначены новые типы пакетов запроса/события/ошибки. Клиентские приложения получают доступ к функциям расширения через библиотеки расширений. Добавление расширений в текущие реализации X-сервера, как сообщается, затруднено из-за отсутствия модульности в конструкции сервера. [5] Долгосрочной целью проекта XCB является автоматизация генерации как клиентской, так и серверной сторон расширений из описаний XML-протокола.

В следующей таблице представлен частичный каталог разработанных расширений, отсортированных примерно по давности внедрения:

Устаревшие расширения

Смотрите также

Примечания

  1. ^ "Xorg, Сетевые подключения". Страницы руководства X11R7.7. X.Org foundation . Получено 23 декабря 2023 г.
  2. ^ Клиент-серверная модель
    • IBM 1994, стр.2-11
    • Магуоло 2005
    • Манрике 2001
    • Стивенс 1994, стр.430-433
    • Кверсия и О'Рейли, 1993, стр. 13–17.
  3. Хопкинс, Дон (не указан) (май 1994). Гарфинкель, Симсон ; Вайзе, Дэниел; Штрассманн, Стивен (ред.). Справочник ненавистников UNIX (PDF) . Сан-Матео, Калифорния, США: IDG Books . стр. 126 Катастрофа X-Windows. ISBN 978-1-56884-203-5. OCLC  30681401 . Получено 11 июля 2011 г. . ICCCM невероятно плотный, его нужно соблюдать до последней буквы, и он все равно не работает. Соответствие ICCCM — одно из самых сложных испытаний при внедрении X-инструментариев, оконных менеджеров и даже простых приложений. Это настолько сложно, что многие преимущества просто не стоят хлопот по соответствию.
  4. ^ Рэймонд, Эрик С. (30 сентября 2008 г.). «The Unix Hater's Handbook, Reconsidered» (Переосмысление справочника ненавистника Unix). Вооружен и опасен . Получено 11 июля 2011 г. ICCCM примерно так же ужасен, как описывают его авторы [Unix Hater's Handbook], но в наши дни это трудно заметить, поскольку современные инструментальные средства и оконные менеджеры довольно хорошо справляются с сокрытием уродства от приложений.
  5. ^ Gettys, James ; Karlton, Philip L.; McGregor, Scott (10 декабря 1990 г.). "The X Window System, Version 11" (PDF) . Digital Equipment Corporation и Silicon Graphics Computer Systems . стр. 36 . Получено 11 июля 2011 г. . X11 не позволяет считывать всю информацию, которая могла храниться на сервере (например, протокол X11 не позволяет запрашивать состояние GC). Это несколько затрудняет достижение модульности.
  6. ^ "X.org libXi Client library for XInput" . Получено 2010-03-02 . libXi - библиотека для расширения X Input
  7. ^ "XC-MISC Extension" (PDF) . Архивировано из оригинала (PDF) 27 сентября 2011 г. . Получено 2010-08-02 .
  8. ^ "Security Extension Specification" (PDF) . Архивировано из оригинала (PDF) 27 сентября 2011 г. Получено 2010-08-02 .
  9. ^ Отключить запросы XFree86-DGA, за исключением относительного движения мыши, пока Xinput 2 не позволит убить все это. X.Org Wiki - Releases/7.6
  10. ^ Объявление о выпуске abcdef 7.5
  11. ^ Зафиксировать удаление XPrint

Ссылки

  1. Манрике, Даниэль (23 мая 2001 г.). "Архитектура системы X Window: обзор". Обзор архитектуры системы X Window HOWTO . Проект документации Linux . Получено 13 июля 2011 г. .
  2. Магуоло, Филиппо (16 декабря 2005 г.). «Архитектура X-Window». Уроки Linux . Маунт-Киско, штат Нью-Йорк, США: Джон Ф. Мур . Проверено 13 июля 2011 г.
  3. Стивенс, В. Ричард (1994). "30.5 X Window System" (PDF) . TCP/IP Illustrated (PDF) . Серия Addison-Wesley professional computing. Том 1, TheProtocols (1-е изд.). Бостон, Массачусетс, США: Addison-Wesley . 30.5 X Window System. ISBN 978-0-201-63346-7. OCLC  246049781 . Получено 13 июля 2011 г. .
  4. IBM Corporation, Международный центр технической поддержки (июль 1994 г.). "1.2 X Concepts" (PDF) . TCP/IP для MVS, VM, OS/2 и DOS: X Window System Guide (PDF) . IBM Redbooks (второе изд.). Research Triangle Park, NC, USA: IBM . X Concepts . Получено 13 июля 2011 г. .
  5. Quercia, Valerie; O'Reilly, Tim (1993) [1988]. Руководство пользователя X Window System: для X11 версии 5. Полные руководства по X Window System. Том 3. Севастополь, Калифорния, США: O'Reilly & Assoc. ISBN 978-1-56592-014-9. OCLC  682229836. LCC  QA76.76.W56 Q47 . Получено 14 июля 2011 г. . На archive.org имеется издание 1990 года.

Дальнейшее чтение

Внешние ссылки