Опубликован: 01.07.2008 | Доступ: свободный | Студентов: 2194 / 331 | Оценка: 3.78 / 3.77 | Длительность: 11:57:00
Лекция 2:

Какие Unix'ы бывают в природе?

< Лекция 1 || Лекция 2: 123 || Лекция 3 >

Основная идея X Window

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

Итак, повторим.

X-сервер. Программа, которая написана специально под конкретное физическое устройство (имеется в виду - монитор, графконтроллер, мышь и клавиатура), умеет на нем рисовать, и умеет понимать команды рисования по протоколу X Window System.

X-клиент. Прикладная программа, обеспечивающая графический интерфейс с пользователем. Команды для рисования на экране передает X серверу по протоколу X Window System.

X-терминал. Ящик (монитор, графконтроллер, мышь, клавиатура, ну и, естественно, процессор и оперативная память), на котором запущена программа X-сервер. X-терминалом может служить самая обыкновенная графическая Unix-рабочая станция, на которой X сервер выполняется, как одна из многих прикладных задач. Специализированный X-terminal - ящик, на котором запускается только X сервер, и ничего кроме. Можно использовать PC под MS-DOSом, на котором запущена DOSовская программа, реализующая X сервер.

Xlib - библиотека C-ишных функций, реализующих протокол X Window System. С помощью этой библиотеки можно писать графические программы - X-клиенты.

Что мы с этого имеем.

Мы получаем универсальный GAPI - (Graphical Application Programming Interface) - средство программирования графических приложений. Пользовательские графические программы при этом полностью отвязаны от железа, от конкретного графконтроллера. О железе пусть беспокоится X-сервер.

Протокол X Window умеет "ездить" по сети: например по TCP/IP, или по DEC-net. Поэтому Xсервер может крутиться на одной машине, а X-клиент - на другой. То есть, картинка рисуется на одной машине, а программа, которая ее обеспечивает - крутится на другой.

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

Чего нам это стоит

Понятно чего - ресурсов. X Window очень любит ресурсы - память, процессор, диск; он способен их есть в неограниченных количествах. А еще ведь надо программировать (к счастью, не всем). Кто видел, как выглядят программы для 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 Window. Склеен из двух слов - Window и Gadget (приспособление), является графическим объектом с привязанными к нему свойствами и реакциями на действия пользователя. Примеры widgetow: "кнопка", "менюшка", "окошко с текстом", "линейка прокрутки",...

Известны следующие toolkit'ы:

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

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

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

В борьбе BSD и Unix V победил, как известно, System V, а в войне круглых и квадратных кнопок выиграл Motif.

Конфигурирование X Window

В Linux используется X11 в реализации XFree86. Чтобы его сконфигурировать, выполните команду xf86config

Запуск X Window

На некоторых машинах он сам запускается. А также иногда удается запустить его вручную командами: startx и/или openwin

Solaris:

  1. Установите переменные окружения:
    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
  2. Запустите X Window командой
    openwin

"Нормальные" Unix'ы:

  1. Установите переменные окружения:
    PATH=/usr/bin/X11:$PATH
    XAPPLERESDIR=/usr/lib/X11/app-defaults
  2. Запустите X Window командой
    startx

"Ненормальные" Unix'ы (Unixware).

Когда регистрируете пользователя, ответьте Yes на вопрос "Хотите графический DeskTop". Тогда после login'а X Window будет запускаться автоматически. Если вы прозевали, и ответили No, то никаким осмысленным способом запустить X Window для себя вам не удастся.

Настройки пользовательского окружения X Window

При наличии пользовательских настроечных файлов, лежащих в домашнем каталоге пользователя, используются они. Если их нет, используются стандартные, общественные, обычно лежащие в каталоге /usr/lib/X11 или /usr/openwin/lib

Персональные и общественные пользовательские настройки хранятся в файлах:

$HOME/.Xdefaults
 $HOME/.OWdefaults
 /usr/lib/X11/Xdefaults
 /usr/openwin/lib/Xdefaults
 /usr/openwin/lib/app-defaults/*

После любых исправлений файл с ресурсами необходимо перезачитать:"

xrdb -merge .Xdefaults

Окружение (desktop) - т.е. программы, которые стартуют автоматически при запуске X Window находится в файлах:

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
< Лекция 1 || Лекция 2: 123 || Лекция 3 >