Графическая оболочка X-Windows System.
В начале немного истории . Представим, что нам нужно написать программу, которая будет работать в графическом режиме. Нам потребуется: опрашивать клавиатуру, снимать события и координаты мыши, рисовать на экране.
Как это делалось на 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:
Установите переменные окружения:
2.OPENWINHOME=/usr/openwin export OPENWINHOME3. LD_LIBRARY_PATH=/usr/openwin/lib export LD_LIBRARY_PATH4. PATH=/usr/openwin/bin:$PATH export PATH5. XAPPLERESDIR=/usr/openwin/lib/app-defaults export XAPPLERESDIRЗапустите X Windows командой openwin
«Нормальные» Unix’ы:
Установите переменные окружения:
2.PATH=/usr/bin/X11:$PATH3. 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