.:Публикации:. [www.karlson.ru]

Как работает X Window ?

Кожекин Н.

X Window System -- это переносимая сетевая оконная система, оригинально разработанная в Massachusetts Institute of Technology в Laboratory for Computer Science в 1984 году. А первого января 1994 года все права на дальнейшую разработку системы и стандартов были переданы X Consortium. Система создана для большинства ANSI C и POSIX совместимых систем. X Window предназначена для работы с растовыми дисплеями 2, 4, 8, 16, 24 бита на пиксель. Если вы подыскиваете себе дешевою видеокарту для работы с X, то имейте ввиду, что акселерированные карточки (типа ATI, Mach, ET4000/W32p, S3) ЗАМЕТНО быстрее, чем неакселерированные или частично акселерированные (Cirrus, WD) карточки. Работа X заключается в общении двух программ, так называемого X-Сервера с X-Клиентом через X-протокол. Кроме клиентов идущих на машине совпадающей с сервером, X поддерживает работу клиентов с других машин (в том числе с отличной архитектурой и операционной системой).

X Consortium астаивает на том, чтобы лишь следующие названия применялись для ссылки на эту систему:
X,
X Window System,
X Version 11,
X Window System Version 11,
X11,
и именно так эту систему указывают в описании. Однако не стоит удивляться, если в литературе (даже очень серьезной и профессиональной) вы встретите другие, "неправильные" названия -- но речь идет о том же самом. Часто систему называют чем-то вроде X-Window или XWindow (что, по-видимому, связано с иногда существующим ограничением на несодержание в имени пробела), часто называют X-Windows (кстати очень часто, видимо, с легкой руки фирмы Microsoft) Система, распространяемая на данный момент называется полностью X Window System Version 11 Release 6. Все выпуски до 6 были написаны без использования объектов (что вызывало у компиляторов некие недоумения :"Как же объектная система написана без объектов? ", что решалось программистами из MIT часто встречающейся переменной с именем вида MakeCompilerHappy (содержалась в структурах многих "классов"), пожелание которой казалось отнюдь не лишним. Распространяемый сейчас 6 выпуск (X11R6) переписан на объектно-ориентированный C).

X-Сервер общается с X-Клиентами принимая или получая от них пакеты данных по каналам межпроцессорного обмена. Если X-Сервер и X-Клиент работают на одной машине, то это внутренние каналы машины, иначе -- сетевые каналы. Эта технология называется "управляемость событиями" -- event driver architecture. Событие -- это единица информации, кодирующая происходящие в системе изменения. Так же устроено не только общение X-Клиент -- X-Сервер но и любых X-Клиентов между собой. Регламентация содержания и отправки пакетов производится X-Протоколом (X Window System Protocol). Но, чтобы работать в X Window (даже на профессиональном уровне), совсем не обязательно знать детали содержания X-Протокола -- поставляемая с X библиотека XLib (файл lX11.a, каталог /usr/lib, где -- корень дерева файлов для X), позволяет работать с сервером на высоком уровне. Так же существует библиотека X Toolkit Intinsics -- работа с окнами "на еще более высоком уровне", чем XLib. В связи с этим появляется основное понятие в программирование для X -- widget (композиция слов window -- окно и gadget -- свойство) -- основной объект программирования. Существую так же и более развитые библиотеки -- X View (X window system based Visual/Inegrated Environment for Workstations), для реализации интерфейсов в стиле OpenWindows, и -- OSF/Motif для реализации интерфейсов в стиле Motif же (подробнее о стилях позже). Важно понимать, что XLib не отправляет пакеты сразу, а буферизует их в памяти той машины на которой идет X-Клиент, что связано с тем, что операция пересылки данных для сетей критична (это асинхронный стиль передачи сообщений). Программа может вызвать явно посылку пакета функциями XFlush() или XSync(). Также каждая программа для X имеет опцию -sinchoronous, что указывает X-Серверу работать с этой программой синхронно. Это опция используется при отладке программы, и никогда не должна использоваться с работающим приложением (о других опциях смотри врезку).

Кроме использования стандартных кнопок окна, иногда некоторые рекомендации оконному менеджеру полезно задавать до загрузки приложения, что можно сделать из командной строки, используя стандартные опции.
-display <дисплей>.
Эта опция специфицирует X-Сервер для использования приложением. Имя дисплея -- это строка вида hostname:displaynumber.screennumber, где hostname определяет имя машины к которой дисплей подключен физически, displaynumber определяет номер дисплея (иногда на больших серверах бывает их несколько, тогда они нумеруются по порядку с нуля) и screennumber определяет номер экрана (пронумерованы с 0).
-geometry <ШИРИНАxВЫСОТАxСДВИГ_XxСДВИГ_Y>.
Параметры этой опции числа, представляющие размер в пикселях. Причем ШИРИНА и ВЫСОТА или СДВИГ_X и СДВИГ_Y задаются в паре. Причем сдвиги по оси координат (прямоугольная декартова с вершиной в левом верхнем углу) задаются по следующей схеме:
x0x0 -- левый верхний угол экрана,
-0x0 -- верхний правый угол экрана,
-0-0 -- правый нижний угол экрана,
x0-0 -- нижний левый угол экрана.
-bg, -background <цвет>
Эта и последующие две опции работают от аргумента цвет. X Window поддерживает абстрактные цветовые имена, как red или blue. База данных для цветов описана в файле /lib/X11/rgb.txt. Так же цвета можно задавать синтаксисом rgb://, где в скобках <> стоят целые шестнадцатиричные цифры, или rgbi://, где в скобках стоят числа с плавающей точкой, что задает интенсивность цветов. Так же существую и другие способы задания цвета, но они используются редко. Эта опция задает цвет фона для приложения.
-bd, -bodercolor <цвет>
Эта опция задает цвет рамки окна приложения.
-fg, -foreground <цвет>
Эта опция задает цвет рисуемого в окне приложения.
-bw, -boderwidth <размер>
Эта опция задает размер в пикселях для ширины рамки окна приложения.
-fn, -font <имя шрифта>
Эта опция задает шрифт для приложения. Имя шрифта -- это очень длинная строка вида:
-adobe-courier-medium-r-normal--10-100-75-75-m-60-iso8859-1,
части которой могут быть заменены символом *. Чтобы посмотреть шрифты по шаблону можно использовать программу xlsfonts.
-iconc
Эта опция указывает на то, что при запуске приложение должно быть немедленно иконизировано.
-name <строка>
Эта опция определяет имя приложения, а соответственно и ресурсы для него.
-rv, -reverse
Эта опция указывает приложению поменять местами цвета фона и рисования.
ёrv Эта опция указывает не менять цвета.
-selectionTimeout <интервал в миллисекундах>
Эта опция указывает на интервал, через который два сообщающихся приложения должны отвечать на вопрос третьего.
-sinchoronous
Эта опция указывает на переход в синхронный режим.
-title <строка>
Эта опция задает заголовок окна приложения.
-xnllnguage <язык[территория][.кодовая таблица]>
Эта опция задает язык, территорию и кодовую таблицу, если ресурсы приложения поддерживают многоязычность.
-xrm <строка ресурсов>
Эта опция задает любые ресурсы (подробнее о ресурсах ниже).

У X-Сервера существуют два стиля работы:
1. xdm (X Display Manager) --
этот стиль работы предполагает то, что вы всегда хотите иметь X на своем дисплее. В таком случае X будут запускаться вместе с UNIX при загрузке компьютера. Первоначально появится окошко с приглашением login, куда вы как обычно должны ввести имя вашего пользователя и пароль. Появится и еще один процесс -- console log, но для вас скорее всего в его окне нет ничего интересного : оно создается лишь для того, чтобы при ошибках загрузки было куда отображать сообщения. После входа в систему запуск дальнейших приложений (тех которые вы собираетесь запускать автоматически) определяется файлом .xsession в вашей домашней директории (shell script). Этот стиль работы X по традиции используется лишь на достаточно мощных станциях, если же X работают на вашем компьютере медленно, то нет смысла запускать их всегда, разумнее лишь когда требуется -- это стиль xinit.
2. xinit --
в этом стиле вы запускаете X Window из командной строки сразу на своего пользователя. Вы можете легко закончить работу с X и вернуться в текстовый режим. Обычно системный администратор предусматривает несколько команд для запуска системы из командной строки (для разных оконных менеджеров обычно разное), спросите его!

Так же важно понимать, что X не содержит оконного менеджера внутри себя -- это отдельная программа. Таких программ бывает весьма много и они притом весьма разные. За это систему X Window называют графическим хамелеоном : одни и те же приложения могут в ней выглядеть по разному. Базовый менеджер окон ( window manager) -- twm. Он позволяет делать базовые действия с окнами -- стандартные функции (иконизировать, максимизировать, закрыть, сдвинуть, изменить размеры). Он (а также почти все другие) поддерживает два типа окон: InputOutput (для ввода и вывода, используются большинством приложений) и InputOnly (только для ввода, используются крайне редко). Вызов меню и запуск производятся левой кнопкой мыши. Базовою систему программирования представляют набор библиотек XLib -- основные функции и Xt (X Toolkit Intrinsics) -- управление окнами на уровне виджетов. Более "продвинут" стиль openwindows -- стиль Solaris. В нем все действия производятся правой кнопкой мыши. Этот стиль удобен в смысле интерфейса, но программировать для него не удобно (поставляемая с ним система разработчика XView крайне мало удобна и недружественна, так что кроме Sun -- оригинального разработчика системы -- практически никто программного обеспечения в этом стиле не разрабатывает. Более того почти все рабочие станции (кроме Sun) содержащие коммерческий Unix этот менеджер не содержат (хотя реализации его распространяются свободно почти для любой системы, так что проблем с его использованием не должно возникнуть). Наиболее продвинутой системой является OSF/Motif (чисто коммерческая система не имеющая пока свободных реализаций, зато в большинстве коммерческих Unix стоит именно она). Ее оконный менеджер mwm (Motif Window Manager) чем-то напоминает Windows-95 (хотя наоборот, Motif сделали раньше), зато система программирования для него очень удобна и супер популярна -- практически все программное обеспечение для X разрабатываемое где-либо кроме Sun пишется на Motif. Библиотек программирования Motif построена как удобное дополнение множества виджетов Xt. Действия в нем производятся опять левой кнопкой мыши ...

Первая программа с которой вы должна познакомится войдя в X -- это xterm -- эмулятор родного терминала в окне. Для передачи менеджеру пожеланий относительно своих окон клиенты могут использовать два способа : а) механизм рекомендаций (hints)
б) механизм свойств.
В связи с этим возникает и понятие о ресурсах программы. Ресурсы программы содержат информацию о ваших требованиях к ее работе. Для высказывания их надо заполнить файл ресурсов вашего приложения. Его будет использовать специальный клиент xrm -- X Resourse Manager. Запомните синтаксис файла ресурсов, если вы будете работать с X вам придется использовать его не один раз (смотри врезку).

Здесь формально описан синтаксис файла ресурсов. Слова просто обозначают названия, слова в кавычках "" -- слова синтаксиса. Фигурные скобки {} означают на возможность повторения своих элементов (в том числе ноль раз), квадратные скобки означают, что элемент может либо присутствовать, либо отсутствовать. Знак = означает 'по определению'. Знак | означает 'либо'.

СтрокаРесурсов = Комментарий | ВключениеФайла | СпецификацияРесурса | ПустаяСтрока
Комментарий = "!" {любой символ кроме null и newline}
ВключениеФайла = "#" ПРОБЕЛ "include" ПРОБЕЛ ИмяФайла ПРОБЕЛ
ИмяФайла = 'любое имя файла, присутствующего в системе'
СпецификацияРесурса = ПРОБЕЛ ИмяРесурса ПРОБЕЛ ":" ПРОБЕЛ Значение
ИмяРесурса = [СпецСимвол] {компонент СпецСимвол} КомпонентИмя
СпецСимвол = "." | "*"
ПРОБЕЛ = { " "<пробел> | "	"<горизонтальная табуляция> }
компонент = "?" | КомпонентИмя
КомпонентИмя = Символ {Символ}
Символ = "a"-"z" | "A"-"Z" | "0"-"9" | "_" | "-"
Значение = {'любые символы кроме null и newline'}

Имя файла ресурсов задается переменной XENVIRONMENT (по умолчанию $HOME/.Xdefaults). Сам набор ресурсов очень велик, их все вы можете найти в стандартном описании.

Удачной вам работы с X Window System Version 11 !

...домик на крыше...,поиск,гостевая книга,cv. Be free, use Linux!