X Window System - это оконная система применяемая в мире Unix. (Из-за большой
лени я буду просто писать X, вместо X Window System ;). Главная идея в X что
что экран, клавиатура и мышь управляются т.н. X сервером, в то время как задачи которые
запускает пользователь должны соединяться с X сервером и просить его либо
отрисовать окно, либо сообщить положение мыши и т.д. Такие хадачи называются
X клиентами. Общение между X сервером и клиентами происходит по т.н. X
протоколу с помощью socket'ов. Таким образом, я могу сидя у себя дома
просматривать карту погоды рассчитываемую в реальном времени каким-нибудь
Cray в Америке, который может вообще не иметь графического экрана.
Все команды на отрисовку будут передаваться с Cray'я на мою станцию по TCP/IP
и будут выполнены моим X сервером, реально отрисовывающим изображение на
экране моего монитора. И наоборот - нажатие клавиши, или перемещение мыши
создаст сообщение, которое будет передано X клиенту (то есть прикладной
задаче).
Естественно, когда X сервер и X клиент работают на одной машине, то они
используют разные ухищрения, например shared memory для ускорения работы.
И еще один важный момент - система X window - не имеет каких-либо
спецификаций/соглашений по интерфейсу пользователя. Абсолютно никаких! Это
бало сделано нарочно, в целях стандартизации. X сервер управляет только
отображением/скрытием окон, отображением курсора мыши, обспечивает генерацию
сообщений для клиентов о нажатии клавиш и/или перемещении мыши с все.
Для написания клиентов используется библиотека под названием Xlib (X
libraray). Эта библиотека нижнего уровня реализующая интерфейс X протокола к языку C.
Xlib является основой всех программ для X. Конечно, никто не ограничивает
написание программ только языком C. X protocol является открытой
впецификацией и имеются библиотеки подобные Xlib и для других языков,
например fortran, pascal и даже java. Но они крайне редко используются.
Xlib
Xlib позволяет производить отрисовку в окнах примитовов типа линий,
окружностей, текстовых строк, работу со шрифтами. Xlib не имеет примитивов
для отрисовки кнопок или других элементов интерфейса. Этим занимаются так
называемые toolkit'ы.
Спецификации ГИП
В Unix на все есть стандарты и на ГИП тоже. На данный момент имеются следующие
стандарты:
- Motif - это промышленный стандарт на ГИП в UNIX, поддерживается
всеми поставщиками коммерчиских UNIX систем. CDE и Netsacpe являются ярким
примером программ написаных с использованием Motif. Имеется на всех системах,
является коммерческим. Похож на Windows95, хотя вернее будет сказать что
Windows95 похож на Motif. Так как Motif гораздо старше.
- OpenLook - это ГИП используемый по умолчанию в Solaris до версии 2.6.
Мне он нравится больше. Но к сожалению больше не развивается. Sun,
забросил дальнейшее развитие OpenLook, хотя и отдал в свободное
использование исходные тексты XView.
Toolkits
Дальнейшим уровнем в X являются тулкиты. Тулкит это библиотека позволяющая
создавать элементы ГИП (в едином стиле), а так же обеспечивает обратную связь с этими
элементами. На данный момент, используются несколько тулкитов:
- Motif -
- XView - наиболее часто используемая библиотека для написания программ
в стиле OpenLook.
- OLIT (OpenLook Instriscts Toolkit) - библиотека монстр - API программирования соответсвует Motif, а внешний вид -
OpenLook. Не знаю, использовал ли ее кто-нибудь вообще ;-).
- GTK - The GIMP Toolkit - библиотека ГИП использованная при создании
GIMP'а.
- Qt - Библиотека ГИП для программирования на C++. Разработана фирмой
Troll Tech. Является коммерческой.
Desktops
Я не могу придумпть хороший и короткий перевод понятию Desktop, так что
принимайте это как есть. Desktop это среда в которой работает простой
пользователь. Desktop подразумевает наличие программ типа диспетчера
файлов, текстового редактора, всяческих мулечек и фенечек, которые в
принципе не нужны, но очень милы сердцу простого пользователя. ;-) Причем
написанные в едином стиле, с использованием какого либо одного toolkit'а.
Лично мне абсолютно не нужны эти десктопы. Я использую какой либо
диспетчер окон и виртуальными экранами. И несколько терминалов в которых
и работают нужные мне программы.
Итак на данный момент имеются следующие Desktop'ы:
- CDE - Поставляется с Solaris, HP-UX, и по моему AIX. Так же имеются
коммерческие версии для Linux. В HP-UX раньше была подобная штука под
названием HP VUE (Visual User Environment). CDE является продолжением этой
идеи. Основной Toolkit - Motif.
- OpenWindows - Destktop устанавливаемый по умолчанию в версиях
Solaris до 2.6, в 2.6 оставлен для консервативных пользователей ;-) Не знаю
останется ли он в 2.7. Основной Toolkit - XView (OpenLook).
- GNOME - Активно развиваемый Desktop, догоняет KDE. Распространяется под GPL. Red
Hat делает на него ставку. Основной Toolkit - GTK.
- KDE - Так же GPL Desktop разрабатываемый группой свободных
разработчиков. На данный момент более стабилен и имеет больше приложений чем
GNOME. Главный его недостаток, что библиотека ГИП на которой он
основан коммерческая. Основной Toolkit - Qt.
Выводы
Итак, давайте определимся с терминами
- X сервер - программа работающая на компьютере или X-терминале
имеющем графический монитор, клавиатуру и мышь. То есть на рабочем месте
пользователя.
- X клиент - приложение запускаемое пользователем. Х клиент
соединятся с Х сервером. Обычно запускается на той же машине что и Х сервер,
но может быть запущено на любом компьютере в мире, при наличии связи с
ним и Х сервером по TCP/IP.
- X терминал - Специальный компьютер выполняющий всего лишь
одну программу - X сервер. X терминал имеет графический экран, клавиатуру,
мышь, сетевую карту, ПЗУ где прошит код X сервера и ОЗУ для работы последнего
- Toolkit - библиотека ГИП выдержанная в едином стиле. Как
внешне, так и со стороны API программирования.
Eugene Bobin