Введение в POSIX'ивизм

Иксы: принципы организации


Что же представляют собой Иксы? Одно из определений (заимствованное из статьи Андрея Зубинского гласит, что это - не зависящая от платформы растровая графическая оконная система, обеспечивающая прозрачное использование ее ресурсов с помощью сетевых соединений. Определение верное, но вызывающее больше вопросов, чем дающее ответов. Которые мы и попробуем наметить.

Независимость от платформы, пожалуй, в объяснениях не нуждается - как я уже говорил, Иксы функционируют на любом "железе" и поверх любой операционки. Единственное требование - способность видеосистемы данной платформы хоть как-то воспроизводить графику. Причем - графику растровую - растровый характер Иксов определяется тем, что они работают только с устройствами вывода, обеспечивающими попиксельное отображение информации, а не символьное, как текстовая консоль, и не векторное (впрочем, векторных видеосистем я никогда не видел, хотя говорят - есть такие). Оконная же она потому, что имеет более высокий, нежели пиксель, уровень абстракции - "окно" (window), лежащий в основе всех интерфейсных элементов: и собственно окон (в понимании Windows), и кнопок, и ниспадающих меню, и строк ввода и даже обрамления вокруг окон.

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

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

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

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

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


Общее количество X-дисплеев для 32- разрядных компьютеров составит 232, нумеруемых с 0.

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



Между окнами возможен обмен данными через буферы памяти - в отличие от консольного режима (и, добавлю, в отличие от Windows), Иксах таких буферов задействовано несколько. Один из них - обычный экранный буфер, подобный консольному: информация в него помещается при выделении мышью или стрелками клавиатуры, и вставляется нажатием средней кнопки мыши. Остальные буферы памяти требуют принудительного копирования в них выделенного фрагмента - например, привычной по Windows комбинацией клавиш Control+C или Control+X, после чего вставляется также каким-либо специальным способом (например, через Control+V). Однако это уже зависит от реализации в конкретных программах (хотя все больше приложений поддерживает "подоконные" сочетания "горячих клавиш"). К сожалению, способов обмена данными между X-дисплеем и текстовыми консолями не существует (по крайней мере, я никаких указаний на этот счет не нашел)

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

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



Важно, что сам по себе X-сервер (вместе с Xlib) ни коим образом не способен управлять элементами пользовательского интерфейса - даже собственными окнами, которые он воспроизводит. Забегая вперед, замечу: чтобы получить представление о возможностях чистых Иксов (точнее, отсутствии таковых), можно для пробы запустить голимый X-сервер. Делается это командой (из текстовой консоли)

$ X

каковая представляет собой символическую ссылку на исполняемый файл X-сервера - /usr/X11R6/bin/XFree86 или /usr/X11R6/bin/Xorg (для соответствующих реализаций). После чего можно наблюдать за перемещением крестообразного курсора по серо-решетчатому фону - и ничего более. Правда, есть еще и возможность прервать X-сеанс - комбинацией клавиш Alt+Control+BackSpace; к слову сказать, это универсальный способ выхода из графического режима, к которому приходится прибегать, если штатные средства выхода почему-либо не работают.

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

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

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


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

Таким образом, чтобы в полной мере воспользоваться возможностями, предоставляемыми Иксами совместно с базовой ОС, потребуется еще одна программа, которая осуществляет управление окнами - их открытием, закрытием, представлением на экране, масштабированием, перемещением, фокусировкой и так далее. Почему она и называется - менеджер окон. И которая уже и являет графический интерфейс пользователя (GUI - Graphic User Interface) в полном смысле слова: вид всех управляющих элементов (рамок окон и их заголовков, полос прокрутки, меню, кнопок и пиктограмм определяется именно оконным менеджером.

В комплект Иксов штатно входит оконный менеджер под названием twm. Это весьма архаичная программа с ограниченными возможностями. А вообще менеджеров окон существует бессчетное множество, и специальный разговор о них впереди. Здесь они упомянуты лишь потому, что без них, в сущности, невозможно не только практическое использование Иксов, но даже и иллюстрация их возможностей или проверка правильности настройки.

Кроме этого, в комплект Иксов входит еще множество клиентских программ - утилит и приложений. Одни из них (xvidtune, xfontsel) широко используются в настроечных целях, другие (например, текстовый редактор xedit) давно вытеснены из обихода более совершенными аналогами и сохраняются в качестве реликтов.

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


Ибо понятно, что за такой универсализм приходится расплачиваться - в первую очередь потерей производительности и требовательностью к ресурсам, в первую очередь к памяти. Ибо хотя сам по себе X-сервер - программа достаточно неприхотливая и готова довольствоваться 16 Мбайт суммарной (физической и виртуальной) памяти, уже самый простой оконный менеджер с несколькими пользовательскими приложениями эти требования как минимум удваивает или утраивает. И при этом быстродействие их, в сравнении с Windows-аналогами, отнюдь не поражает воображения.

Мощные интегрированные среды, такие, как KDE, и сложные комплексные приложения, типа OpenOffice, Mozilla, GIMP и так далее, начинают более-менее шевелиться при объемах физической памяти от 256 Мбайт. Правда, с увеличение объема памяти сверх этого и быстродействие "тяжелых" приложений возрастает, достигая оптимума при 512 Мбайт (правда, по современным масштабам это не кажется чем-то из ряда вон выходящим).

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

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

И тем не менее Иксы использовались, используются и будут использоваться во всех POSIX-системах еще долгое время (возможно, вечно). По двум причинам. Во-первых, как сказал бы товарищ Сталин, другой графической системы у нас, POSIX'ивистов, нет.А во-вторых, многочисленные недостатки Иксов компенсируются полной изоляцией графической среды от базовой ОС и ее системного окружения, с одной стороны, и клиентских программ от X-сервера - с другой. В результате чего ошибки исполнении пользовательских приложений крайне редко приводят к краху самих Иксов и практически никогда - всей операционной системы. И потому Иксы в сочетании с операционками POSIX-семейства применяются и будут применяться везде, где критичной оказывается бессбойная работа системы. А это - все машины производственного назначения, не так ли?


Содержание раздела