Опубликован: 22.06.2005 | Уровень: для всех | Доступ: платный | ВУЗ: Компания IBM
Лекция 16:

Графический интерфейс (X11)

XFree86 и XOrg

Наиболее распространенная версия реализации X11R6 называется XFree86. Эта графическая подсистема изначально проектировалась как реализация X11R5 для машин архитектуры i386 – самых распространенных на сегодня персональных компьютеров. Главная особенность этой архитектуры – бесчисленное многообразие устройств графического вывода (видеокарт) и непрестанное нарушение их разработчиками всех мыслимых стандартов. Поэтому главной задачей создателей XFree86 было устроить гибкую структуру компоновки и настройки X-сервера в соответствии с подвернувшимся под руку устройством графического вывода, а заодно и ввода, потому что клавиатур, мышей и заменяющих их устройств на свете тоже немало. Сегодня XFree86 существует для многих архитектур и многих операционных систем.

В последние годы параллельно с XFree86 развивается основанная на тех же исходных текстах X Window System графическая подсистема XOrg. До недавнего времени по спектру поддерживаемого оборудования, архитектур и функциональности XOrg мало чем отличалась от XFree86, и сейчас они тоже примерно эквивалентны с точки зрения пользователя. Однако направления развития этих двух проектов, состав их разработчиков и лицензионная политика несхожи. В ближайшем будущем вполне вероятно, что Xorg обгонит XFree86 и по возможностям, и по частоте использования.

Конфигурация X-сервера

Чтобы приспособить графическую подсистему (в любой реализации) к имеющемуся оборудованию, требуется организовать соответствующий профиль. профиль графической подсистемы находится в каталоге /etc/X11, основной конфигурационный файл XFree86 называется XF86Config-4 5Цифра 4 появилась в названии этого файла c выходом версии 4.0 XFree86 – в этот момент изменился синтаксис конфигурационного файла по сравнению с предыдущими версиями. При этом часть старого оборудования не поддерживается четвертой версией XFree86, поэтому для такого оборудования приходится использовать более ранние версии, для которых конфигурационный файл сохраняет старое название – XF86Config . – именно его считывает при запуске X-сервер. Конфигурационный файл XOrg называется xorg.conf, а при его отсутствии используется файл XF86Config.

Мы рассмотрим конфигурацию графической подсистемы на примере XFree86. Файл XF86Config-4 структурирован: состоит из нескольких обязательных разделов, которые могут следовать в любом порядке. В раздел объединяется часть профиля, связанная с одной из сторон деятельности X-сервера. Каждый раздел имеет такую структуру:

Section "НазваниеРаздела"
КлючевоеСлово "Параметры"
. . .
EndSection
Пример 16.3. Структура раздела XF86Config

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

Files         Пути к файлам с ресурсами, необходимыми X-серверу
ServerFlags   Общие параметры X-сервера
Module        Расширения, которые следует загрузить
InputDevice   Описание устройств ввода
Device        Описание устройства вывода (видеокарты)
Monitor       Описание монитора
Modes         Описание видеорежимов
Screen        Описание экрана (связывает монитор и видеокарту)
ServerLayout  Конфигурация сервера
Пример 16.4. Разделы XF86Config

Почти каждый из перечисленных разделов может присутствовать в конфигурационном файле в нескольких экземплярах, например, может быть несколько разделов ( InputDevice ), описывающих разные устройства ввода (разные мыши и клавиатуры). Однако эти разделы не равноправны, а образуют иерархическую структуру, самым главным (корневым) элементом которой является конфигурация сервера ( ServerLayout ). В этом разделе указывается, какие именно из описанных в файле устройств ввода (разделы InputDevice, как минимум два – для клавиатуры и мыши) и вывода ( Screen, который связывает в единое устройство вывода монитор и видеокарту, ссылаясь на их описания в соответствующих разделах) будут задействованы при работе X-сервера. В каждом разделе присутствует строка "Identifier "идентификатор"". Именно эта строка используется для выбора нужного из однотипных устройств в разделе "ServerLayout". Например, на машине, где работает Мефодий, общая конфигурация сервера выглядит так:

Section "ServerLayout"
          Identifier  "layout1"
          Screen      "screen1"
          InputDevice "Mouse1" "CorePointer"
          InputDevice "Keyboard1" "CoreKeyboard"
EndSection
Пример 16.5. Раздел ServerLayout конфигурационного файла XF86Config

Соответственно, при запуске сервера будут использованы тот раздел Screen, в котором содержится запись "Identifier "screen1"", мышь "Mouse1" и клавиатура "Keyboard1".

Чтобы разобраться в подробностях каждого раздела, требуются определенные знания о работе и характеристиках устройств ввода и вывода, поэтому здесь мы не будем приводить конкретные примеры. Подробно о формате XF86Config можно прочитать в соответствующем руководстве XF86Config(5). Для многих пользователей будет достаточно профиля графической подсистемы, созданного одним из существующих мастеров, самый известный из которых – xf86config. Во многих дистрибутивах имеются собственные полуавтоматические утилиты настройки X11. С их помощью можно создать более или менее подходящий профиль, не вникая в тонкости, нередко – непосредственно при установке системы. Во всяком случае, у пользователя всегда остается возможность корректировать профиль вручную, отредактировав конфигурационный файл. Простой конфигурационный файл можно получить, запустив X-сервер с ключом - configure из-под суперпользователя. При этом в текущем каталоге будет создан файл XF86Config.new, в котором X-сервер сохранит результаты автоматического определения внешних устройств.

Модули и расширения

Требование гибкости привело к тому, что в реализации XFree86 и XOrg графическая подсистема стала совсем уже похожа на операционную систему. Сам X-сервер играет роль ядра. Запускаясь, сервер подгружает драйверы – специальные компоненты, работающие с выбранной видеокартой, и модули – компоненты, расширяющие функциональные возможности сервера (в конфигурационном файле XF86Config необходимые модули перечисляются в разделе Modules ). Есть весьма нужные расширения, вроде glx (высокоуровневые функции трехмерной графики) или freetype (поддержка шрифтов TrueType), а есть экзотические, которые иногда могут понадобиться, например, RECORD, позволяющее записывать, а после – "проигрывать" все происходящие с сервером события.

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

Аягоз Имансакипова
Аягоз Имансакипова
Тимур Булатов
Тимур Булатов

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