Графическая оболочка X-Windows System

Основная идея X Windows
Итак, повторим
Что мы с этого имеем
Чего нам это стоит
Как это запускается
Библиотеки, Motif, и война круглых и квадратных кнопок
Конфигурирование X Windows
Запуск X Windows
Настройки пользовательского окружения X Windows
Настройки window-manager’a
Для начала немного истории и общих мест. Представим, что нам нужно написать программу, которая будет работать в графическом режиме. Нам потребуется опрашивать клавиатуру, снимать события и координаты мыши, рисовать на экране, … Как это делалось на MS-DOSе? Очень просто. Пишем одну большую программу, в ней — все и логика, и обработка событий, и слежение за перемещениями мыши, ну, а когда требуется что-то нарисовать, мы даем команду на запись в порты EGA контроллера, рисуем пиксель… Через год появляется контроллер VGA, еще через год SVGA 800×600, 16 цветов, вслед за ним UVGA 1024×768, 256 цветов, затем XGA 1280×1024, 16Мб цветов…
Основная идея X Windows.
Имеем две независимых программы. Одна умеет рисовать на графическом мониторе, и вообще, обслуживать все это железо. Она называется X-сервер. Вторая программа — называем ее клиент X Windows, рисовать физически не умеет. Зато она знает, что именно надо рисовать, и умеет командовать. Команды типа нарисовать прямоугольник», «провести линию», «открыть окно», «вывести символ в заданном фонте», «опросить координаты мыши», и т.п. передаются X-серверу, а тот их исполняет — рисует. Формат и спецификации этих команд опубликованы, стандартизованы, и широко известны. Все вместе они называются «Протокол X Windows».
Итак, повторим.
X-сервер. Программа, которая написана специально под конкретное физическое устройство (имеется в виду — монитор, графконтроллер, мышь и клавиатура), умеет на нем рисовать, и умеет понимать команды рисования по протоколу X Windows System.
X-клиент. Прикладная программа, обеспечивающая графический интерфейс с пользователем. Команды для рисования на экране передает X серверу по протоколу X Windows System.
X-терминал. Ящик (монитор, графконтроллер, мышь, клавиатура, ну и, естественно, процессор и оперативная память), на котором запущена программа X-сервер. X-терминалом может служить самая обыкновенная графическая Unix-рабочая станция, на которой X сервер выполняется, как одна из многих прикладных задач. Специализированный X-terminal — ящик, на котором запускается только X сервер, и ничего кроме. Можно использовать PC под MS-DOSом, на котором запущена DOSовская программа, реализующая X сервер.
Xlib — библиотека C-ишных функций, реализующих протокол X Windows System. С помощью этой библиотеки можно писать графические программы — X-клиенты.
Что мы с этого имеем.
Мы получаем универсальный GAPI — (Graphical Application Programming Interface) — средство программирования графических приложений. Пользовательские графические программы при этом полностью отвязаны от железа, от конкретного графконтроллера. О железе пусть беспокоится X-сервер.
Протокол X Windows умеет «ездить» по сети например по TCP/IP, или по DEC-net. Поэтому Xсервер может крутиться на одной машине, а X-клиент — на другой. То есть, картинка рисуется на одной машине, а программа, которая ее обеспечивает — крутится на другой.
X-сервер способен обслуживать сразу много клиентов, причем всех — одновременно. На нашем графическом экране может быть открыто сразу много окон — каждое окно порождается его собственным X клиентом. Клиенты эти могут быть запущены и на нашей машине (к которой подключена графическая подсистема), и на удаленных машинах, соединенных с нами по сети.
Чего нам это стоит.
Понятно чего. Ресурсов. X Windows очень любит ресурсы — память, процессор, диск. Способен съесть их в неограниченных количествах. А еще ведь надо программировать. (К счастью, не всем надо). Кто видел, как выглядят программы для MS Windows или Mac, может представить себе внешний вид исходных текстов X-овой программы.
Как это запускается.
Пусть в нашей сети есть машина с графической подсистемой и X сервером, и сетевой адрес этой машины pcat107.foms.msk.ruна pcat107 нужно выполнить команду
xhost + # разрешить X-овым программам с ЛЮБОЙ машины
# рисовать на экране машины pcat107
Запускаем на нашем компьютере X-овую программу, так, чтобы ее окошко рисовалось на мониторе pcat107. Для этого на нашем компьютере нужно выполнить команду
xterm -display pcat107 0.0 &
Библиотеки, Motif, и война круглых и квадратных кнопок.
Можно писать X-овые программы, используя библиотеку Xlib. Многие так и пишут, хотя это весьма тяжело — уж больно невысок уровень Xlib’а. В помощь программистам было создано несколько toolkit’ов — библиотек более высокого уровня, в которых реализованы различные widget’ы. Widget — непереводимый термин X Windows. Склеен из двух слов — Window и Gadget (приспособление), является графическим объектом с привязанными к нему свойствами и реакциями на действия пользователя. Примеры widgetow «кнопка», «менюшка», «окошко с текстом», «линейка прокрутки»,…
Известны следующие toolkit’ы

Xaw
— Anthena Widgets. Очень черно-белый, очень плоский, весьма небогатый. Зато — бесплатный. Посмотрите, как выглядят программы xterm, xedit, xman. Они сделаны на Xaw.

xview
— Набор библиотек и объектов, использованных в реализации набора пользовательских утилит Sun-овской версии X Windows — «Open Windows». Весьма симпатично. Круглые кнопки, «шприцы-иголки» (замечательная вещь!), очень хорошо продуманный интерфейс пользователя, в том числе активно используемая трех-кнопочная мышь. Исходные тексты библиотек xview открыты, предоставляются бесплатно. Однако набор DeskSet — 15 пользовательских утилит входящих в OpenWindows, сделанный на библиотеке xview, SunSoft готов предоставить только за плату. В бинарном виде — весьма дешево ($100). В исходных текстах — весьма дорого ($200K)

Motif
— Библиотека поставляются организацией OSF за не совсем маленькую плату. Исходные тексты библиотек недоступны, либо чрезмерно дороги. Кнопки — квадратные, да и вообще Motif’овские приложения до безобразия напоминают MS Windows (что, IMHO, является серьезным преступлением)

В борьбе BSD и Unix V победил, как известно, System V, а в войне круглых и квадратных кнопок выиграл Motif.
Конфигурирование X Windows
В Linux используется X11 в реализации XFree86. Чтобы его сконфигурировать, выполните команду xf86config
Запуск X Windows.
На некоторых машинах он сам запускается. А также иногда удается запустить его вручную командами startx и/или openwin
Solaris
Установите переменные окружения
OPENWINHOME=/usr/openwin export OPENWINHOME
LD_LIBRARY_PATH=/usr/openwin/lib export LD_LIBRARY_PATH
PATH=/usr/openwin/bin $PATH export PATH
XAPPLERESDIR=/usr/openwin/lib/app-defaults export XAPPLERESDIR
Запустите X Windows командой
openwin
«Нормальные» Unix’ы
Установите переменные окружения
PATH=/usr/bin/X11 $PATH
XAPPLERESDIR=/usr/lib/X11/app-defaults
Запустите X Windows командой
startx
«Ненормальные» Unix’ы (Unixware).
Когда регистрируете пользователя, ответьте Yes на вопрос «Хотите графический DeskTop». Тогда после login’а X Windows будет запускаться автоматически. Если вы прозевали, и ответили No, то никаким осмысленным способом запустить X Windows для себя вам не удастся.
Настройки пользовательского окружения X Windows
При наличии пользовательских настроечных файлов, лежащих в домашнем каталоге пользователя, используются они. Если их нет, используются стандартные, общественные, обычно лежащие в каталоге /usr/lib/X11 или /usr/openwin/lib
Персональные и общественные пользовательские настройки хранятся в файлах
$HOME/.Xdefaults
$HOME/.OWdefaults
/usr/lib/X11/Xdefaults
/usr/openwin/lib/Xdefaults
/usr/openwin/lib/app-defaults/*
Окружение (desktop) — т.е. программы, которые стартуют автоматически при запуске X Windows находится в файлах
Solaris
$HOME/.openwin-init
/usr/openwin/lib/openwin-init
«Нормальнные» X windows
$HOME/.xinitrc
/usr/lib/X11/xinit/xinitrc
Настройки window-manager’a — т.е. — поведение окон, менюшки пользователя, раскладка команд на клавиши мышки, …
Solaris
$HOME/.openwin-menu
$HOME/.openwin-menu-*
/usr/openwin/lib/openwin-menu
/usr/openwin/lib/openwin-menu-*
Linux
$HOME/.fvwmrc
/usr/lib/X11/fvwm/system.fvwmrc
«