Графика в открытых системах
АрхивДо середины девяностых существовали отдельно компьютерная графика и отдельно - настольные игры в компьютерную графику. Я очень радовался, когда к первому отечественному персональному компьютеру ДВК удалось подключить чудо техники под названием ЦДР (до сих пор не знаю, как это расшифровывается), позволяющее отображать на экране телевизора несколько тысяч пикселов в четырех цветах, хотя иногда захаживал в Лабораторию Компьютерной Графики с векторными устройствами и X-терминалами, и даже что-то рисовал на плоттере.
Закон Мура тем временем делал свое (в данном случае не черное, а многоцветное) дело, и, кажется, в 1994 году я первый раз запустил на «четверке» ту самую систему, которую наблюдал пятью годами раньше на X-терминалах и графических станциях, стоивших каких-то немыслимых (что по тем временам, что сегодня) денег.
Игры в самодельную графику с проприетарным софтом, конечно, продолжаются и сегодня, но в целом мир воссоединился, и особой нужды в таких играх, в общем-то, давно нет. Хотя - такова диалектика - именно эти игры (включая игры в буквальном смысле) породили спрос на дешевые устройства (прежде всего, графические акселераторы), которые и делают настоящую компьютерную графику доступной пользователю массовой x86-техники, даже дешевые «персоналки» - сопоставимыми с X-терминалами. А самые «фронтирные» из них успешно соперничают и с профессиональными графическими рабочими станциями начального и среднего уровня.
X Window System - один из самых больших и успешных проектов в истории компьютерной техники - берет свое начало в 1984 году, когда разработчики двух систем компьютерной графики, претендующих на универсальность, - проект Athena (MIT) и W Windowing (Стэнфорд) - решили объединить свои усилия. С тех пор практически каждая компания, серьезно занимающаяся графикой, посчитала своим долгом внести какие-либо разработки в систему, формальным «хозяином» которой в 1987 году стал вновь созданный X Consortium (ныне X Open Group).
С тех пор X прошел через одиннадцать основных релизов и множество версий, самой свежей из которых является X11R6 v 5.1.
Дальнейшее изложение относится к свободно распространяемой реализации X для x86, которая называется FreeX86, поддерживается одноименным партнерством и реализует на сегодня версию 4.0 текущего релиза. XFree86 - самая популярная реализация X, она поставляется в составе подавляющего большинства открытых систем для x86-совместимых компьютеров, поддерживает беспрецедентно широкий спектр оборудования и, благодаря открытости исходников и пользовательской аудитории в десятки миллионов человек, достаточно «вылизана», по крайней мере, насколько это возможно для такого разнообразия «железа».
Большинство нижесказанного, впрочем, справедливо для любой реализации X на любом оборудовании и под любой ОС, список которых можно найти на www.X.org.
Цветной сэндвич
То, что пользователю, сидящему за монитором, представляется сплошной графической операционной средой, реализовано как многослойный сэндвич технологий, изображенный (в очень упрощенном виде) на рис. 1.
Непосредственно с «железом» (видеосистемой, устройствами ввода и динамиком) работает X-сервер. Эта программа захватывает оборудование и предоставляет его возможности другим программам как ресурсы (собственно, именно поэтому она и называется сервером) по особому протоколу, который так и называется, X-протокол. Перечисленное оборудование в совокупности называется X-терминалом. (Аппаратным) X-терминалом называется и специализированный компьютер, на котором исполняется исключительно X-сервер.
Здесь сразу видно отличие X Windows System от большинства самодельных систем графики, используемых в проприетарных системах: взаимодействие X-сервера с его многочисленной клиентурой происходит по специфицированному протоколу, который может туннелироваться через TCP/IP, и, соответственно, клиенты и сервер могут исполняться на разных узлах Сети. (Более того, взаимодействие X-сервера с оборудованием терминала также туннелируется, поэтому при желании X-терминал можно собрать из дисплея в Йокогаме, клавиатуры в Сиднее и мыши в ЦОС ФСБ России.)
Еще одним ресурсом, который предоставляет X-сервер, являются шрифты. Оперировать шрифтами он может самостоятельно либо с помощью другой программы, которая называется сервер шрифтов X и обеспечивает их масштабирование.
Настройка X-сервера и сервера шрифтов - первая сложность, с которой обычно сталкиваются пользователи открытых систем для x86-машин, и это неудивительно, учитывая огромное разнообразие существующего для них оборудования (и национальные особенности ситуации с кодовыми таблицами в России). К счастью, программы установки современных дистрибутивов все увереннее распознают даже самые экзотические его комбинации, и большинство пользователей, установив систему, получают в свое распоряжение готовую графическую среду.
Мы поступим иначе - будем разбираться с ней по слоям.
X голышом
Рис. 2 - порнографический (это не детская порнография - ведь X в этом году исполнилось 16), на нем изображена «голая» система X Window - то, с чем большинство пользователей никогда не сталкивается. Запустить ее обычно можно так: X.
Мы видим традиционный серый экран с не менее традиционным курсором в виде буквы X. Используя мышь или другое координатное устройство, курсор можно перемещать по экрану. На нажатие кнопок мыши и клавиш никакой видимой реакции не следует. И невидимой тоже - сервер готов передавать эти сигналы своим клиентам, а клиенты пока не запущены. Хотя на самом деле некоторые комбинации клавиш X перехватывает и обрабатывает. Это Zap (Control-Alt-Backspace) - завершение работы сервера (если эта возможность не запрещена при конфигурации), Zoom (Control-Alt-+/-) - «горячее» переключение доступных видеорежимов, и Control-Alt в сочетании с функциональной клавишей - освобождение оборудования и передача его на время соответствующей виртуальной консоли (если механизм виртуальных консолей поддерживается ОС).
Воспользуемся последней возможностью, перейдем на консоль и запустим первое клиентское приложение: программу xterm (рис. 3). Экран X обрел более пристойный вид: на нем появилось окно, а в окне можно видеть интерфейс клиентского приложения. В данном случае интерфейс текстовый, а приложение - эмулятор терминала, на котором запущена диалоговая оболочка системы по умолчанию. С эмулятором можно делать все то же, что и с обычным терминалом: издавать команды, получать результат и запускать другие программы. Если программы текстовые (строчные или оконные), исполняться они будут в том же окне, а если графические (как и сам xterm) - в отдельных окнах.
Запустим программу xclock (рис. 4). При ее запуске мы использовали несколько опций, задающих геометрию (местоположение и размер) порождаемого окна, цвет его фона и шрифта по умолчанию, толщину и цвет рамки. Эти (и некоторые другие) опции типичны для программ, построенных на основе графической библиотеки X Toolkit. Значения опций могут быть перекрыты самим запускающимся приложением, кроме опции геометрии. Дело в том, что окно выделяется клиентскому приложению при запуске, и все доступные ему ресурсы этим окном и ограничены - это свойство X-протокола. И какую толстую рамку мы бы ни задали, дергать за нее бесполезно: окно не изменит размер и не подвинется.
Запустив несколько экземпляров того же xterm (и почитав документацию), можно обнаружить, что и «голышом» X умеет не так мало. Например, оперирует буфером обмена текстом между приложениями и предоставляет текстовым приложениям такой ресурс, как полосу прокрутки (забавная полоска, скроллировать текст с помощью которой вверх или вниз можно, щелкая по ней разными кнопками мыши, - это наследие проекта Athena).
Есть ли польза от системы, работающей с фиксированными окнами? Да, если вспомнить, что «универсальный десктоп» - не единственная сфера применения компьютера. Можно запустить при загрузке X и Netscape на весь экран и получить гипермедийный киоск по цене PC. А можно посадить за тот же Netscape оператора, который будет через него весь день «рулить» базу данных.
Но наша сегодняшняя тема - «стол», поэтому пойдем дальше. Итак, основная работа X-сервера - создавать окна и предоставлять клиентским приложениям возможности работы в них. Для того чтобы работать с окнами, нужна другая программа, которая так и называется - менеджер окон (window manager).
Окноводы
Как же менеджер окон преодолевает указанное ограничение X-протокола? Никак - просто выделенным ему окном является весь экран. (На самом деле, менеджер окон - не единственная программа, способная работать с «корневым» окном; например, входящая в комплект поставки xsetroot позволяет установить цвет фона или поместить на него рисунок.)
Менеджеров окон существует превеликое множество - под любой набор задач, которые может решать графическая многооконная система. Их так много, что выбрать какой-нибудь в качестве «типичного представителя семейства» затруднительно. Поэтому выберем один из самых развитых - Enlightenment.
«Просвещение» создано Карстеном Хайцлером и Джеффом Харрисоном (Carsten Haitzler, Geoff Harrison), и его текущая версия - 0.16.5. До недавнего времени Enlightenment был «штатным» менеджером окон в среде GNOME (см. следующую статью), лишь недавно уступив это место менее функциональной, но более шустрой «Рыбе-пиле» (Sawfish). Он продолжает оставаться GNOME-совместимым, и многие пользователи этого популярного десктоп-менеджера предпочитают его, хотя и без GNOME у Enlightenment поклонников хватает.
Запустим «Просвещение» (рис. 5). Как резко изменилась картина!
Первое, что мы видим, - это появившиеся вокруг окна нашего xterm «виджеты» - строка заголовка с кнопками и рамка. Все правильно - окно теперь можно перемещать по экрану, ухватив за заголовок, масштабировать, взяв за бок или за угол, максимизировать, минимизировать или закрыть, нажав соответствующую кнопку. Спрашивается, что еще можно делать с окном?
Вопрос не праздный. Нажав на левую кнопку в заголовке, получаем неожиданно разнообразное меню (меню - это тоже «виджет») таких действий (рис. 6). Оказывается, его можно еще уничтожить (Annihilate), поднять/опустить (Raise/Lower), оттенить/растенить (Shade/Unshade), приклеить/отклеить (Stick/Unstick) и выполнить еще массу действий, для которых потребовались отдельные подменю! Набор этих действий зависит от конкретного менеджера окон (и Enlightenment - один из самых богатых возможностями), а то, какие из них выведены в строку заголовка отдельными кнопками, - вообще от его настройки.
Собственно, управление окнами - основная функция оконного менеджера, и на этом его функциональность может и заканчиваться. Однако большинство из них выполняют по крайней мере еще одну функцию.
Вы уже обратили внимание на то, что при запуске «Просвещения» на экране появилось еще одно окно. Это так называемый пейджер (pager), на рис. 8 он изображен крупным планом. На пейджере представлена миниатюрная копия экрана, обновляющаяся в режиме реального времени, причем, если подвести курсор к изображению отдельного окна, оно увеличивается и рядом высвечивается название приложения, запущенного в нем. Но почему экран занимает только четверть окна пейджера? Потому что оконный менеджер позволяет оперировать «виртуальным столом», по размеру превышающим физический экран, а пейджер - одно из средств перемещения физического экрана по рабочему столу. Enlightenment позволяет создавать до 64 экранов на рабочем столе. Отличительная особенность этого менеджера - в том, что он позволяет заводить одновременно более одного (точнее, до 32) рабочих столов, что в итоге дает 2048 экранов.
Еще один важный компонент Enlightenment мы не увидели сразу: это меню настройки самого менеджера, которое можно «достать», щелкнув правой кнопкой мыши на фоне экрана (рис. 7). Порывшись в настройках, можно обнаружить, что вышесказанное о способах оперирования с этим менеджером весьма условно, потому что поменять можно буквально все, от декора «виджетов» до количества и функций элементов оформления окон и их реакции на различные действия.
Лишь один пример: сколько способов визуализировать перемещение окна вы знаете? Я до сих пор знал три, а разработчики «Просвещения» придумали целых шесть, включая фантастический «полупрозрачный».
Настройки и расширения Enlightenment можно объединять в «темы» (themes) и обмениваться ими.
Собственно, на этом функции оконного менеджера как такового и заканчиваются, а дальше Enlightenment вторгается во владения другого класса программ - менеджеров рабочего стола…
Столоначальники
…Что демонстрирует отсутствие резкой границы между ними. Существует два подхода к тому, чтобы достроить оконную систему до полнофункциональной среды. Первый - добавить в «графический сэндвич» еще один слой - менеджер рабочего стола, - работающий «поверх» оконного менеджера и «паразитирующий» на функциональности последнего. Этим путем идут команды разработчиков GNOME и KDE, которым посвящены следующие две статьи темы.
Другой путь - «дотянуть» до полнофункциональной среды функциональность самого оконного менеджера, и им идет Enlightenment, не менее интересный AfterStep (который не влез в сегодняшнюю тему) и ряд других проектов.
Что нам не хватает до полнофункциональной среды? Менеджера программ, утилит и приложений. Так вот, в «Просвещении» есть и такая функциональность. На рис. 9 показано меню (точнее, иерархия меню и подменю), появляющееся при щелчке на фоне левой кнопкой.
Комментировать здесь особо нечего: пункты меню позволяют запустить множество различных приложений, причем, кроме независимо разработанных, и целую пачку «апплетов», поставляемых вместе с Enlightenment.
Альтернативный способ запуска - через «панель» - встроен в некоторые темы «Просвещения». На рис. 10 и 11 представлена изящная выдвижная панель темы Arctic и монументальная конструкция из темы nIx.
Откуда что берется
Резонный вопрос: а откуда берутся такие ресурсы, как «виджеты» с их декором и способом поведения? Конечно, менеджер окон может содержать их в себе. Но такой подход не очень характерен для открытых систем, одним из принципов разработки которых является компонентность. Большинство развитых оконных менеджеров, менеджеров рабочего стола и «заточенных» под них приложений можно сгруппировать по библиотекам (toolkits), с опорой на которые они разработаны (возвращаемся к рис. 1). Сегодняшняя тема подготовлена в пользовательской, а не разработческой перспективе, поэтому в ней лишь упомянуты, но не описаны подробно, две библиотеки - Qt и GTK+, используемые средами K и GNOME соответственно.
[i37422]