Для  начала  немного истории и общих мест. Представим, что
нам  нужно  написать  программу,  которая  будет   работать   в
графическом  режиме.  Нам  потребуется:  опрашивать клавиатуру,
снимать события и координаты мыши, рисовать на экране, ...  Как
это  делалось  на  MS-DOSе?  Очень  просто.  Пишем одну большую
программу, в ней -  все:  и  логика,  и  обработка  событий,  и
слежение  за  перемещениями  мыши, ну, а когда требуется что-то
нарисовать, мы даем команду на запись в порты EGA  контроллера,
рисуем пиксел... Через год появляется контроллер VGA, еще через
год SVGA 800x600, 16 цветов, вслед за ним  UVGA  1024x768,  256
цветов, затем XGA 1280x1024, 16Мб цветов...



     Имеем  две  независимых  программы. Одна умеет рисовать на
графическом мониторе, и вообще, обслуживать все это железо. Она
называется  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 &



Можно  писать  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.



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



     На  некоторых  машинах  он сам запускается. А также иногда
удается запустить его вручную командами: 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 Windows командой

   startx

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

     Когда  регистрируете  пользователя, ответьте Yes на вопрос
"Хотите графический DeskTop". Тогда  после  login'а  X  Windows
будет  запускаться автоматически. Если вы прозевали, и ответили
No, то никаким осмысленным способом  запустить  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/*

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

     xrdb -merge .Xdefaults

     Окружение  (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


Популярность: 53, Last-modified: Mon, 08 Aug 2005 07:23:58 GmT