До середины девяностых существовали отдельно компьютерная графика и отдельно — настольные игры в компьютерную графику. Читатели, помнящие историю отечественной школьной информатизации, возможно, сталкивались с чудом техники под названием «цифровой дисплей растровый» (ЦДР), которое удавалось подключить к первому отечественному персональному компьютеру ДВК, чтобы отображать на экране телевизора несколько тысяч пикселов в четырех цветах. В то время в лабораториях компьютерной графики некоторых вузов можно было встретить графические рабочие станции с векторными устройствами и X-терминалами, и даже плоттерами.
К середине девяностых на компьютере с процессором Intel 486 уже запускалась та самая система, которую пятью годами раньше наблюдать можно было лишь на X-терминалах и графических станциях, стоивших каких-то немыслимых (что по тем временам, что сегодня) денег.
Игры в самодельную графику, конечно, продолжаются и сегодня, но в целом мир воссоединился, и особой нужды в таких играх давно нет. Хотя — такова диалектика массовых рынков — именно эти игры (включая игры в буквальном смысле) породили спрос на дешевые устройства (прежде всего, графические акселераторы), которые и делают настоящую компьютерную графику доступной пользователю массовой x86- и PowerPC-техники, даже устаревшие «персоналки» — сопоставимыми с X-терминалами, а более новые и мощные — соперниками и с профессиональных графических рабочих станций начального и среднего уровня.
Оконная система икс (от англ. X window system, далее — X) — один из самых больших и успешных проектов в истории компьютерной техники — восходит к 1984 г., когда разработчики двух систем компьютерной графики, претендующих на универсальность — проектов Athena (Массачусетский технологический институт) и W Windowing (Стэнфордский университет) — решили объединить свои усилия. С тех пор практически каждая компания, серьезно занимающаяся графикой, считала своим долгом внести какие-либо разработки в систему, формальным «хозяином» которой в 1987 г. стал вновь созданный X Consortium (ныне Open Group, www.X.org).
С тех пор X прошла через одиннадцать основных релизов и множество версий.
Дальнейшее изложение ориентировано на свободную реализацию X, которая называется XFree86, поддерживается одноименным партнерством (www.xfree86.org) и воплощает на сегодня версию 4.2 текущего релиза. XFree86 — самая популярная реализация X, она поставляется в составе подавляющего большинства открытых систем (как свободных, так и несвободных) для x86-совместимых компьютеров, поддерживает беспрецедентно широкий спектр оборудования и, благодаря доступности исходных текстов и пользовательской аудитории в десятки миллионов человек, весьма устойчива и хорошо оттестирована, по крайней мере, насколько это возможно для такого разнообразия поддерживаемого оборудования. Несмотря на то, что исторически цифры «86» в названии пакета относятся к соответствующему семейству процессоров от Intel, современные версии XFree86 реализованы для большинства других популярных процессоров. XFree86 доступен и для некоторых альтернативных архитектур ОС, включая Microsoft Windows NT.
Большинство из того, о чем будет говориться в последующих разделах, справедливо для любой реализации X на любом оборудовании и под любой ОС, список которых можно найти на www.X.org.
То, что пользователю, сидящему за монитором, представляется сплошной графической операционной средой, реализовано как многослойный бутерброд технологий.
Непосредственно с оборудованием (видеосистемой, устройствами ввода и динамиком) работает X-сервер. Эта программа захватывает оборудование и предоставляет его возможности другим программам как ресурсы (собственно, именно поэтому она и называется сервером) по особому протоколу, который так и называется, X-протокол. Перечисленное оборудование в совокупности называется X-терминалом (аппаратным X-терминалом называется и специализированный компьютер, на котором исполняется исключительно X-сервер).
Здесь сразу видно отличие X от большинства самодельных систем графики, используемых в альтернативных системах: взаимодействие X-сервера с многочисленными программи-клиентами происходит по специфицированному протоколу, который может туннелироваться через TCP/IP и, соответственно, клиенты и сервер могут исполняться на разных узлах Сети. Это означает, что одни и те же программы могут эксплуатироваться в разных топологиях, включая совокупность автономных рабочих станций (персональных компьютеров), совокупность рабочих станций без данных или бездисковых рабочих станций (локальная сеть), многопользовательскую систему с X-терминалами (или какую-либо смешанную топологию).
Еще одним ресурсом, который предоставляет X-сервер, являются шрифты. Оперировать шрифтами он может самостоятельно, либо с помощью другой программы, которая обеспечивает масштабирование шрифтов — фонт-сервера (от англ. font — шрифт).
Большинство пользователей, установив систему, получают в свое распоряжение готовую графическую среду. Попробуем разобраться в ее устройстве «по слоям».
На рис. 2.1 показана «чистая» оконная система X — когда запущен только X-сервер и никаких приложений — то, с чем большинство пользователей никогда не сталкивается. Запустить ее обычно можно, подав команду: X &.
Мы видим традиционный серый экран с не менее традиционным курсором в виде буквы «x». Используя мышь или другое координатное устройство, курсор можно перемещать по экрану. На нажатие кнопок мыши и клавиш никакой видимой реакции не следует. И невидимой тоже — сервер готов передавать эти сигналы своим клиентам, а клиенты пока не запущены. Хотя на самом деле некоторые комбинации клавиш X перехватывает и обрабатывает. Это Zap (Ctrl-Alt-Backspace) — завершение работы сервера (если эта возможность не запрещена при конфигурации), Zoom (Ctrl-Alt-+ и Ctrl-Alt--) — «горячее» переключение доступных видеорежимов. В некоторых ОС (Например, ГНУ/Линукс) Ctrl-Alt в сочетании с функциональной клавишей освобождает оборудование и передает его на время соответствующей виртуальной консоли — запущенной в неграфическом режиме (обычно, vga-режиме) программе, позволяющей пользователю зарегистрироваться в системе и получить доступ к командной строке оболочки.
Воспользуемся последней возможностью, перейдем на консоль и запустим первое клиентское приложение: программу xterm (рис. 2.2). На экране X появилось окно, а в окне можно видеть интерфейс клиентского приложения. В данном случае интерфейс текстовый, а приложение представляет собой эмулятор терминала, на котором запущена диалоговая оболочка системы по умолчанию. С эмулятором можно делать все то же, что и с обычным терминалом: издавать команды, получать результат и запускать другие программы. Если программы текстовые (строчные или оконные), исполняться они будут в том же окне, а если графические (как и сам xterm) — в отдельных окнах.
Запустим программу xclock (рис. 2.3). При ее запуске мы использовали несколько параметров, задающих геометрию (местоположение и размер) вновь порождаемого окна, цвет его фона и шрифта по умолчанию, толщину и цвет рамки. Эти (и некоторые другие) параметры типичны для программ, построенных на основе графической библиотеки X Toolkit. Значения параметров, заданные при вызове программы, могут быть перекрыты самим запускающимся приложением, кроме опции геометрии. Дело в том, что окно выделяется клиентскому приложению при запуске, и все доступные ему ресурсы этим окном и ограничены — это свойство X-протокола. Переместить окно или изменить его размер средствами «чистой» X невозможно.
Запустив несколько экземпляров того же xterm (и почитав документацию) можно обнаружить, что и «чистая» X умеет не так мало. Например, оперирует буфером обмена текстом между приложениями и предоставляет текстовым приложениям такой ресурс, как полосу прокрутки (полоса сбоку окна, при помощи которой можно листать текст вверх или вниз, щелкая по ней левой и правой кнопками мыши соответственно, — это наследие проекта Athena).
Итак, ключевой компонент графической платформы — X-сервер:
захватывает оборудование;
создает по запросу других программ (которые в этой терминологии называются X-клиентами) окна;
предоставляет другим программам возможность работы в окнах, т. е. вывода информации в эти окна и обработки сигналов от устройств ввода (клавиатуры и мыши или другого координатного устройства), когда окно, назначенное программе, является активным. Предоставление ресурсов возможно в том числе и через сеть, когда клиент и сервер работают на разных компьютерах (узлах).
В среде, образуемой X-сервером, окно, выделяемое клиенту, является фиксированным: его геометрия (местоположение на экране и размер) задается при запуске клиента и сохраняется в течение всего сеанса работы с этим клиентом. Есть ли польза от системы, работающей с фиксированными окнами? да, это вполне соответствует цели создания специализированных систем с графическим интерфейсом пользователя. Примером такой системы может служить терминал, позволяющий получать справки о расписании поездов и стоимости проезда, установленный на вокзале. Однако этих возможностей совершенно недостаточно для универсального «настольного» применения компьютера.
При универсальном применении компьютера характерна поочередная работа с различными программами (иногда достаточно большим их количеством), причем пользователь может отрываться, допустим, от редактирования текста, чтобы поработать с иллюстрацией при помощи другой программы, прочитать почту или заглянуть на интернет-страницу, затем возвращаться к редактированию текста и т. д. Эти возможности обеспечивает другая программа — менеджер окон, представляющая собой следующий «слой» в графической среде пользователя.
Для одновременной и поочерёдной работы с разными программами, требуется возможность управлять окнами (с помощью клавиатуры или мыши), т. е. возможность изменять «на лету» их геометрию (положение и размеры), а также (обычно не относимое к геометрии) положение в воображаемой «стопке» окон — от этого зависит, какое из окон будет «верхним» (видимым полностью), если окна перекрывают друг друга на плоскости экрана.
Управление окнами и составляет основную функцию оконного менеджера (устоявшийся англоязычный термин window manager, относящийся к этому классу программ, мы будем передавать далее словосочетанием-калькой «оконный менеджер», которое, впрочем, не представляется особенно удачным, так же, как и встречающиеся в литературе «менеджер окон», «администратор окон» и «диспетчер окон»).
Технически ограничение на изменение геометрии однажды выделенного X-сервером окна преодолевается оконным менеджером за счёт того, что ему в качестве окна выделяется весь экран. Окно во весь экран может быть названо корневым, по аналогии с корневым каталогом в файловой системе. На самом деле, менеджер окон — не единственная программа, способная работать с корневым окном; например, входящая в комплект поставки xsetroot позволяет установить цвет фона или поместить на него рисунок.
Прикладным программам, таким образом, выделяются далее уже не окна собственно X, а окна оконного менеджера. Изменение положения окна в подавляющем большинстве случаев ничего не требует от программы-клиента, однако желательно, чтобы программа была достаточно «сообразительной», чтобы изменить свое поведение при изменении размеров выделенного ей окна «на лету». Это справедливо для большинства, но не для всех программ (в частности, этого «не умеют» многие старые программы и некоторые компьютерные игры).
В свою очередь, и оконный менеджер может быть достаточно «умен», чтобы понять, что программа не реагирует на изменение геометрии окна, и запретить пользователю изменять размеры окна для данной программы (чтобы он не оказался в ситуации, когда ему видна лишь часть области вывода программы или наоборот, часть окна прикладной программы пуста). Однако такое решение может привести к весьма дискомфортным ситуациям (например, если при запуске программы ее окно оказывается больше экрана)[10].
Менеджеров окон существует превеликое множество — под любой набор задач, которые может решать графическая многооконная система. Их настолько много, что выбрать какой-нибудь в качестве «типичного представителя семейства» затруднительно. Поэтому выберем один из самых развитых — Enlightenment.
«Просвещение» (англ. enlightenment, www.Enlightenment.org) создано Карстеном Хайцлером и Джеффом Харрисоном (Carsten Haitzler, Geoff Harrison) и его текущая версия — 0.16.5. До 2000 г. он был основным менеджером окон в популярной среде GNOME, затем уступив это место менее функциональной, но более быстрой «Рыбе-пиле» (Sawfish). Он продолжает оставаться GNOME-совместимым, и многие пользователи этого популярного оконного менеджера предпочитают его, хотя и без GNOME у Enlightenment поклонников хватает.
Запустим Enlightenment (рис. 2.4), набрав в командной строке xterm enlightenment &. Первое, что мы видим — это появившиеся вокруг окна нашего xterm элементы оформления: рамка и строка заголовка с кнопками. Окно теперь можно перемещать по экрану, «ухватив» за заголовок, масштабировать (изменять размер), «взяв» за бок или за угол, максимизировать, минимизировать или закрыть, нажав соответствующую кнопку. Спрашивается, что еще можно делать с окном?
Вопрос не праздный. Нажав на левую кнопку в заголовке, получаем неожиданно разнообразное меню таких действий (рис. 2.5). Оказывается, его можно еще уничтожить (Annihilate), поднять/опустить (Raise/Lower), оттенить/растенить (Shade/Unshade) приклеить/отклеить (Stick/Unstick) и выполнить еще массу действий, для которых потребовались отдельные меню. Набор этих действий зависит от конкретного менеджера окон (и Enlightenment — один из самых богатых возможностями), а то, какие из них выведены в строку заголовка отдельными кнопками — от того, как он настроен (пользователем или по умолчанию).
Базовая (а также расширенная) функциональность оконных менеджеров доступна пользователю прежде всего за счет введения в интерфейс так называемых виджетов (от англ. widgets, сокращение от window gadgets, «оконные приспособления»). Виджеты — это рамки, кнопки, меню и пр., которые служат «органами управления» окна. Технически (в терминах оконной системы X) виджеты представляют собой отдельные окна, примыкающие к окну прикладной программы и, как правило, перемещающиеся вместе с ним.
Обрамление окна обычно составляют следующие элементы:
При «буксировке» рамки мышью окно изменяет свой размер. Иногда для изменения размера окна предназначены только выделенные «уголки» рамки, представляющие собой отдельные виджеты.
Часто совпадает с одной из (обычно, верхней) сторон рамки. В полосе заголовка может содержаться название программы или запустившая программу команда, а также другая информация, специфичная для окна. При «буксировке» полосы заголовка перемещается все окно. Со «щелчками» различными кнопками мыши на полосе заголовка также могут быть связаны различные действия по управлению окнами.
Часто вынесенные на полосу заголовка или в другое место рамки кнопки позволяют выполнить с ним такие действия, как закрытие (часто сопровождающееся выходом из программы, открывшей окно), максимизация (разворачивание окна на весь экран), минимизация/сворачивание, вызов меню управления окном, которое может содержать весьма обширный репертуар других действий.
Детали реализации обрамления окна могут быть весьма различными в зависимости от конкретного оконного менеджера и его настроек.
Откуда берутся такие ресурсы, как виджет, их декор и способ поведения? Конечно, менеджер окон может содержать их в себе. Но такой подход не очень характерен для открытых систем, одним из принципов разработки которых является компонентность. Поэтому виджеты и их функции обычно объединяются в стандартные библиотеки (toolkits), которые могут быть использованы множеством различных программ. Большинство развитых менеджеров окон, менеджеров рабочего стола и разработанных специально для них приложений можно сгруппировать по библиотекам виджетов, с опорой на которые они разработаны.
С точки зрения пользователя виджеты, составляющие обрамление окна, часто воспринимаются как его часть. Однако не следует забывать, что внутри окна (содержимым которого управляет уже прикладная программа, а не менеджер окон) зачастую тоже есть свои виджеты: кнопки, полосы прокрутки, переключатели, меню и т. п. В общем случае, используемые оконным менеджером и прикладной программой библиотеки виджетов могут и не совпадать.
Собственно, управление окнами — основная функция оконного менеджера, и на этом его функциональность может и заканчиваться. Однако большинство из них выполняют по крайней мере еще одну функцию.
Вы уже обратили внимание на то, что при запуске Enlightenment на экране появилось еще одно окно. Это так называемый пейджер (pager), на рис. 2.7 он изображен крупным планом. На пейджере представлена миниатюрная копия экрана, обновляющаяся в режиме реального времени, причем, если подвести курсор к изображению отдельного окна, оно увеличивается и рядом высвечивается название приложения, запущенного в нем. Но почему экран занимает только четверть окна пейджера? Потому что оконный менеджер позволяет оперировать «виртуальным» столом (от англ. virtual desktop, также рабочим столом), по размеру превышающим физический экран, а пейджер — одно из средств перемещения физического экрана по рабочему столу. Enlightenment позволяет создавать до 64 экранов на рабочем столе.
Менеджер окон, который помимо управления окнами обладает рядом дополнительных функций, может использоваться в качестве операционной графической среды пользователя, предоставляющей полный спектр возможностей для параллельной работы с несколькими задачами. Наиболее часто такими дополнительными функциями являются следующие:
Работа на экране, «захламленном» десятком различных окон, может быть дискомфортной, и крайне полезна возможность свернуть (минимизировать) окно со временно неиспользуемой программой. Для того, чтобы средствами графической среды можно было окно затем развернуть, оно и в свернутом состоянии должно каким-то образом отображаться. Существует несколько относительно распространенных способов отображения свернутых окон. Например, «на столе» может оставаться полоса заголовка свернутого окна, по щелчку на которой оно вновь разворачивается. Свернутым окнам могут соответствовать пиктограммы (иконки, значки) на поверхности рабочего стола или в специально отведенном для этого окне (панели управления). Свернутые окна могут отображаться как пункты общего или специального меню (см. ниже).
Практика показывает, что для многих продвинутых пользователей, которые осваивают открытые системы, уже имея опыт работы в характерных для ПК альтернативных системах, именно возможность работать на нескольких рабочих столах оказывается решающим плюсом оконной системы X. Действительно, переключение между виртуальными рабочими столами позволяет организовать комфортную работу со множеством программ даже на мониторах с относительно низким разрешением (1024х728, 800х600) и физическими размерами (17, 15-дюймовыми). В иных условиях комфортность работы существенно снизилась бы, или настоятельной необходимостью стало бы приобретение более крупного и емкого монитора (что зачастую влечет за собой необходимость смены графической карты и прочих недешевых мероприятий). Все современные оконные менеджеры поддерживают виртуальные рабочие столы, правда называются они везде по-разному: столы, рабочие области или экраны. До предела (чтобы не сказать, до абсурда) эта функциональность развита в оконном менеджере Enlightenment, который позволяет организовать до 64 экранов на рабочем столе, при этом рабочих столов также может быть более одного (точнее, до 32). Трудно представить, зачем может понадобиться две тысячи с лишним отдельных экранов (как правило, четырех экранов хватает с избытком для любых практических задач), однако возможности приема демонстрируются этим в полный рост.
Возможность быстрого запуска предуготовленных команд обычно ассоциируется с общим меню (главным меню), вызываемым щелчком мыши на особом виджете, не связанном с прикладными окнами, или в свободной от прикладных окон области экрана.
Поведение — реакция отдельных виджетов на операции с ними, модель фокусировки (способ переключения активного в данный момент окна, с которым связан ввод с клавиатуры и мыши) и т. п. Поведение и внешний вид оформления окон, а также наличие на экране общих виджетов, не связанных с конкретными прикладными окнами, обои (цвет фона или изображение в корневом окне) и т. п. могут варьировать в очень широких пределах. Иногда возможности такой настройки считают некими «архитектурными излишествами», однако более взвешенной является точка зрения, согласно которой в хорошем визуальном дизайне (так же, как и в хорошей архитектуре) ничто не является излишеством. В частности, в школе программы эксплуатируются на широком спектре оборудования с весьма разными характеристиками и разного качества, причем используются они широким кругом людей с различными психофизическими особенностями, как в пределах нормы, так и связанных со здоровьем, и игнорировать возможности настройки нельзя даже уже исходя из гигиенических соображений.
Пример возможностей настройки менеджера окон дает тот же Enlightenment. Его меню настройки можно увидеть, щелкнув правой кнопкой мыши на фоне экрана (рис. 2.8). Исследовав возможности настройки, можно обнаружить, что сказанное выше о способах работы с этим менеджером окон весьма условно, потому что поменять можно буквально все, от декора виджетов до количества и функций элементов оформления окон и их реакции на различные действия.
Лишь один пример: сколько способов визуализировать перемещение окна вы знаете? Разработчики Enlightenment придумали целых шесть, включая фантастический «полупрозрачный». Настройки и расширения Enlightenment можно объединять в темы (англ. themes) и обмениваться ими.
Выше при характеристике тех или иных (предположительно, общих) характеристик оконных менеджеров чаще обычного употреблялись слова «обычно», «как правило», «может» и т. п. Это связано с чрезвычайным разнообразием решений на базе распространенных оконных менеджеров. Ниже самые распространенные из них характеризуются более подробно и определенно.
BlackBox — один из самых компактных и быстродействующих оконных менеджеров. Он позволяет эффективно организовать работу на рабочем столе, не «захламляя» его ненужными ссылками и не расходуя экранное пространство на отображение громоздких элементов оформления.
Наряду с базовой функциональностью, BlackBox предоставляет (факультативно) панель, содержащую кнопки переключения между рабочими столами (по умолчанию их четыре) и заголовки открытых окон. Общее меню вызывается щелчком правой кнопкой мыши на свободном от окон месте рабочего стола. Меню (или любое из вложенных в него меню) щелчком по заголовку может быть превращено в окно, остающееся на экране до явного его закрытия щелчком на соответствующей кнопке.
По умолчанию на полосе заголовка каждого окна присутствуют кнопки сворачивания (сворачивание можно выполнить также двойным щелчком на самом заголовке), максимизации и закрытия окна. Свернутое окно присутствует на экране в виде полосы заголовка, развернуть его можно повторным двойным щелчком на полосе заголовка или из меню
(рабочие области), доступного по щелчку средней кнопкой мыши на свободном от окон месте рабочего стола. Это же меню позволяет перейти на другой стол, добавить или удалить стол из рабочего пространства.BlackBox поддерживает различные модели фокусировки ввода. Фокусировка по щелчку мыши (от англ. click to focus) позволяет реализовать стиль работы, привычный для пользователей KDE или Microsoft Windows: окно становится активным (принимающим текущий ввод с клавиатуры и от мыши) после щелчка на нем. Активное окно автоматически становится верхним (видимым полностью, даже если оно частично перекрывается с другими окнами). Небрежная фокусировка (от англ. sloppy focus) предполагает активизацию окна при попадании на него курсора мыши (окно при этом не «всплывает» автоматически наверх).
Наряду с панелью и конвертируемыми в дополнительные окна-панели меню, BlackBox реализует еще один автономный виджет — так называемую щель (англ. slit). Щель располагается на краю видимого экрана и может содержать маленькие (без обрамлений) окна специализированных программ (их существует около десяти), индицирующих какие-либо состояния среды или позволяющих быстро выполнить часто исполняемые действия.
На основе BlackBox созданы два более развитых оконных менеджера — OpenBox и более популярный FluxBox.
Внешний вид BlackBox, FluxBox и OpenBox легко настраивается с помощью механизма тем рабочих столов.
WindowMaker (WM) — это свободная реализация (в рамках проекта GNUStep) концепций NextSTEP — первой получившей более или менее широкую известность универсальной графической среды пользователя. За недоступностью оригинальной NextSTEP для современных платформ, познакомиться с WM полезно и поучительно вне зависимости от того, собираетесь ли вы с ним работать. Это позволит увидеть исходную точку развития графических сред и оценить продуктивность (или непродуктивность) того, с чем эти идеи стали ассоциироваться со временем.
Основным автономным виджетом WM, как и NextSTEP, является пирс прикладных программ, представленный при запуске пиктограммой со скрепкой. При запуске любой корректной (с точки зрения WM), а также некоторых некорректных программ, кроме ее окна на экране появляется ее пиктограмма. Если «пришвартовать» эту пиктограмму к пирсу, она там и останется, позволяя запускать эту программу вновь и вновь простым щелчком по ней — это разработанный для NextSTEP интегрирующий интерфейс.
WM позволяет работать с несколькими рабочими столами (переключение по умолчанию при помощи клавиш Alt-n или через меню, доступное по щелчку правой кнопкой мыши на свободном месте рабочего стола). WM очень гибко настраивается, как в отношении внешнего вида, так и в отношении поведения, причем большая часть настроек доступна из программы Wprefs.app, запускаемой по щелчку на пиктограмме с изображением ступеньки.
IceWM — простой оконный менеджер, его очень часто выбирают пользователи, переходящие с Microsoft Windows или OS/2, поскольку он достаточно точно повторяет основные черты привычной для них графической рабочей среды.
Из автономных виджетов прежде всего стоит отметить панель с кнопкой, вызывающей главное меню (подобно тому, как это делает кнопка в Microsoft Windows, GNOME или KDE). С помощью панели можно также управлять текущим сеансом и настраивать IceWM. Впрочем, основное меню также доступно и по щелчку правой кнопкой мыши на свободном месте рабочего стола, что более привычно для пользователей WindowMaker, Sawfish, BlackBox или Enlightenment.
Панель также содержит список запущенных программ (включая те, окна которых минимизированы), на нее можно вывести и мини-терминал, позволяющий оперировать командной строкой. Для выполнения любого действия может быть назначена специальная клавиатурная комбинация.
IceWM также позволяет работать с множеством рабочих столов (рабочих мест), которые нумеруются или именуются пользователем.
Существует два подхода к тому, как можно достроить оконную систему до полнофункциональной среды, позволяющей пользователю решать все (или почти все) его практические задачи. Во-первых, можно расширить функциональность менеджера окон, добавив в него недостающие возможности. Чего не хватает в оконном менеджере до полнофункциональной среды? Возможности запускать программы и утилиты. Достигается это обычно при помощи организации специального меню. С примером этого подхода мы уже познакомились в предыдущем разделе: этим путем пошли разработчики Enlightenment и ряд других проектов. Во-вторых, можно добавить в «графический бутерброд» еще один слой — менеджер рабочего стола — работающий «поверх» менеджера окон и использующий функциональность последнего. Этим путем идут команды разработчиков GNOME и KDE.
С точки зрения пользователя нет четкой границы между менеджерами окон с расширенной функциональностью и менеджерами рабочего стола, работающими «поверх» менеджера окон, поскольку они обеспечивают одну и ту же функциональность и нередко даже графически организованы сходным образом. Оба варианта предоставляют пользователю возможность работать в графической среде (desktop environment).
Запуск графической среды (точнее, «бутерброда» из оконной среды X, оконного менеджера и менеджера рабочего стола) в открытой операционной системе можно сравнить с запуском Microsoft Windows в MS-DOS[11].
Однако, сходство заканчивается, не успев начаться. MS-DOS — это однозадачная и однопользовательская система, и запущенная оболочка захватывает все ее ресурсы. Из-за неполноценности ОС оболочке приходится брать на себя несвойственные ей функции (например, имитацию многозадачности), с которой она справляется плохо (например, «зависание» одной программы вполне может привести к неработоспособности всей системы).
При запуске графической среды под полноценной ОС, она, с точки зрения последней, представляет группу обычных процессов, управление которыми производится общесистемными средствами. Точно так же, общесистемными средствами производится и управление процессами, запускаемыми «из-под» этой графической среды. Более того, поскольку платформой для запуска конкретной среды является изначально сетевая среда X, прикладная программа даже может запускаться на другом компьютере.
Среда отнюдь не монополизирует использование компьютера; параллельно с ее работой продолжает исполняться множество служебных системных процессов; с других терминалов (если система многотерминальная) могут запускаться другие программы или даже другие графические среды (или дополнительные экземпляры той же среды).
Интегрированная графическая среда предполагает не только единство оформления, но и трактовку объектов в рабочем пространстве (окон, файлов, пунктов меню и т. п.) как физических объектов, которые можно перемещать, выбрасыать в «корзину» и т. д. Однако сколько-нибудь последовательной теории интегрированных графических сред не существует. Изучая отдельные среды в динамике их развития, можно, тем не менее, выделить несколько общих черт.
Они опираются на определенный интерфейс разработчика (API), состоящий из библиотек, доступных также разработчикам прикладных программ (будь то MS Windows API для Microsoft Windows, Motif для CDE, Qt для KDE или GTK+ для GNOME);
Они реализуют элементы объектной метафоры: файлы, процессы (их потоки ввода-вывода) изображаются как отдельные объекты, на них можно фокусироваться и выполнять с ними различные действия, их состояния и изменения этих состояний также могут визуализироваться или озвучиваться. Целостная объектная метафора своей реализации не нашла (и, видимо, последовательно объектная среда была бы крайне неудобной в использовании).
Они реализуют единообразные элементы управления (виджеты), зачастую не только в оформлении отдельных окон, но и в их содержимом.
Они содержат те или иные элементы управления, не привязанные к отдельным окнам прикладных программ (общие меню, панели управления, поверхность стола и т. п.).
Они позволяют согласованно изменять свойства интерфейса образующих среду программ (менеджера окон, менеджера рабочего стола, приложений, разработанных специально для данной среды).
Они реализуют буфер обмена, позволяющий передавать типизованные данные от программы программе (оконная система X содержит буфер, позволяющий передавать данные лишь простого текстового типа).
Они реализуют возможность «перетаскивания» при помощи мыши (drag'n'drop) объектов или данных между окнами одной программы или разных программ.
Однородность опыта при работе в интегрированных средах и связанная с нею привычность (иногда ошибочно называемая «интуитивностью», хотя она не имеет отношения к философскому и психологическому понятиям интуиции) позволяют при освоении нового инструмента-программы сосредоточиться на ее прикладной логике, не задумываясь и специально не фокусируя внимания на приемах работы, общих для всех инструментов. Это позволяет новому пользователю гораздо быстрее осваивать прикладные программы (делает более «крутой» пресловутую кривую обучения)[12].
Как ни парадоксально, основной недостаток работы в интегрированной среде является оборотной стороной основного достоинства: жестко закрепленные навыки мешают при выходе за ее пределы. Конечному пользователю, ограниченному опытом работы в одной среде, недостает «стереоскопичности» видения, глубины понимания; элементы эргономической логики могут напрямую ассоциироваться с определенными визуальными элементами и «жестами», с помощью которых подаются команды.
Общеизвестны сложности, с которыми сталкиваются люди, несколько лет пользовавшиеся Mac OS или Microsoft Windows при необходимости поработать в другой (пусть даже и весьма схожей) среде. Подобная ригидность опыта может формироваться и при работе в любой из свободных сред, хотя, как правило, пользователь в них не ограничен прикладными программами, специально разработанными для данной среды и делящими с ней наборы элементов интерфейса. В отличие от сред, специфических для ПК, опыт пользователя открытых систем изначально более разнообразен.
Поэтому крайне полезным представляется знакомство учащихся с разными средами уже на начальном этапе освоения графических интерфейсов. Это не обязательно должны быть разные интегрированные среды, но само представление о том, что один и тот же результат может достигаться с помощью разных интерфейсных средств, должно быть передано обязательно. В общем случае это возможно и в рамках одной интегрированной среды из числа рассматриваемых ниже — и KDE, и GNOME в высшей степени гибки в отношении настройки внешнего вида и поведения. Эта гибкость также весьма полезна для обеспечения доступности и максимально достижимого комфорта учащимся с физиологическими особенностями и физическими недостатками (дальтонизмом, слабым зрением, ограниченной подвижностью или расстроенной координацией движений и т. п.).
На сегодня существуют и развиваются две свободные интегрированные графические среды общего назначения: KDE и GNOME. Они входят в поставку большинства стандартных (открытых) ОС, как свободных, так и несвободных. Хотя GNOME на полгода моложе KDE, мы начнем обсуждение именно с GNOME.
Само название КДЕ (KDE, K Desktop Environment — «Графическая среда К») — явная пародия на CDE (Common Desktop Environment — «Общая настольная среда»). CDE была последней попыткой отрасли стандартизовать графическую среду на несвободной основе, предпринятой в конце девяностых годов. Буква «K» в KDE ничего не означает.
Несмотря на явно игривый тон, начинающийся с названия среды и продолжающийся в названии компонентов, KDE — очень серьезный проект. В KDE любят играть со словами; например, универсальный браузер, входящий в среду, называется Konqueror (от англ. conqueror — «завоеватель», «покоритель»), терминал — Konsole (от console — «консоль»), а система помощи — вообще Kandalf (от имени Гэндальфа, мага из фантазийных произведений Дж. Р. Р. Толкиена).
Если единообразие и однородность графической среды считать достоинством, то KDE — несомненный лидер среди всех (как свободных, так и несвободных) интегрированных графических сред. Основное видимое средство интеграции — это универсальный браузер Konqueror. Функция Konqueror близка к той, которую приобрел Microsoft Windows Explorer в Microsoft Windows — он совмещает функции гипермедийного браузера WWW и браузера локальных ресурсов.
Разработчики KDE пошли даже дальше своих коллег из Microsoft и определили ряд дополнительных протоколов, что позволило, в частности, просматривать с помощью браузера в единообразном формате все разнообразие справочной информации, представленное в сегодняшних открытых система (традиционные страницы руководства man, гипертекстовую систему Info из проекта ГНУ, разрозненные файлы документации в текстовом и гипертекстовом формате). В Konqueror интегрирована также возможность предварительного просмотра содержимого большого количества типов файлов.
КДЕ включает также настраиваемую систему панелей и меню и интегрированный центр управления, позволяющий согласованно изменять параметры среды. КДЕ менее гибка в настройке, чем Гном, однако ее гибкости вполне достаточно для решения любых практических задач (в том числе, имитации вида и поведения других сред). КДЕ работает только с собственным оконным менеджером KWin.
В поставку КДЕ входит множество «аксессуаров» и прикладных программ, к тому же рядом с проектом выросла целая группа сопутствующих, ориентированных на те или иные предметные приложения, из которых самым развитым является офисный пакет KOffice.
В то время, как сама оконная система X много лет является фактическим отраслевым стандартом, лежащие «над» нею слои графической среды не стандартизованы.
Какую-либо классификацию графических сред дать затруднительно, однако самым грубым образом их можно разделить на интегрированные и легкие.
Оборотной стороной интегрированности является достаточно высокая их требовательность к ресурсам. Комфортная работа с КДЕ или Гном последних версий начинается при производительности компьютера, примерно эквивалентной производительности 800 МГц процессора Celeron. Отказ от некоторых ресурсоемких свойств (анимация изменений в среде и т. п.) позволяет снизить требования примерно до 500 МГц при объеме оперативной памяти от 128 МБ. Разумеется, эти цифры даже ниже характерных для компьютеров стартового уровня, поставляемых сегодня производителями, однако парк машин, находящихся в эксплутации, как в офисах, так дома и в школе, включает и компьютеры с более низкими характеристиками.
Так, в школе весьма желательно предоставить возможность работы в графической среде на менее мощных машинах. Здесь помогут легкие графические среды, представляющие собой оконные менеджеры с расширенными возможностями.
Описанные выше IceWM, BlackBox и FluxBox (а также чуть более требовательный к ресурсам WindowMaker)[13] позволяют достаточно комфортно работать с графикой на машинах производительностью (в эквиваленте Intel Pentium) примерно от 100 МГц и с памятью от 32 Мб.
Следует оговориться, что отказ от интегрированных графических сред не является панацеей: конкретные прикладные программы могут быть сами по себе достаточно требовательными к ресурсам. Кроме того, если прикладная программа изначально создана с ориентацией на определенную интегрированную среду, она может интенсивно использовать соответствующие библиотеки, даже если запускается в легкой среде. Например, запуск программ из пакета KOffice в легкой среде, на самом деле, дает небольшой выигрыш по сравнению с его запуском из «родной» для него среды КДЕ.
Если необходимо задействовать имеющийся парк «слабой» техники для таких задач, а также, если необходимо сохранять в эксплуатации еще менее производительные машины (например, старшие модели IBM PC-совместимых компьютеров на базе процессоров Intel 486 или AMD 586 или Макинтош на процессорах Motorola 68K), следует подумать об использовании такой техники в режиме графических терминалов или, по крайней мере, варианте запуска наиболее требовательных к ресурсам прикладных программ на сервере.
Следует оговорить также, что ограниченность аппаратных ресурсов не является единственным мотивом применения легких графических сред. Каждая графическая среда, интегрированная или легкая, обладает собственными уникальными особенностями, собственным стилем. Уместность использования каждой конкретной среды в значительной степени зависит от набора задач, решаемых на компьютере конкретным пользователям, и от его личных предпочтений.
[10] Следует отметить, что большинство базовых функций оконных менеджеров при исполнении опирается на поддержку оконной системой X функций двумерной графической акселерации (ускорения), реализованных практически во всех современных графических адаптерах. В отличие от трехмерной акселерации, полезной лишь для достаточно узкого круга приложений (программ трехмерного моделирования, компьютерных игр), двумерная акселерация — действительно универсальна и полезна для графического пользовательского интерфейса. При использовании карты без двумерного ускорения или карты, чья акселераторная функциональность не поддерживается системой X, можно рекомендовать настройку среду таким образом, чтобы исключить ресурсоёмкие функции, например, визуализацию перемещения окна со всем его содержимым, дабы избежать неоправданного роста нагрузки на процессор и драматического падения производительности.
[11] Имеются в виду графические оболочки (Microsoft Windows 1.x, 2.x, 3x, 9x и Me), а не семейство Microsoft Windows NT (сегодняшними версиями которых являются Microsoft Windows 2000, XP и .NET Server).
[12] Разумеется, это сильно идеализированная картина. Иногда прикладная логика диктует некоторые элементы эргономики. Например, интерфейсы большинства систем автоматизированного конструирования и проектирования (CAD, САПР) весьма сходны, вне зависимости от среды, в которой работают эти программы.
[13] Возможностью представить их обзор в компактном виде автор обязан прежде всего своим соавторам Егору Гребневу, Сергею Иванову, Михаилу Шигорину.