Графический интерфейс не является неотъемлемой частью Linux
— это просто одна из её компонент, такая же необязательная с
точки зрения архитектуры системы, как, например, программа для
рисования изображений. Но для тех программ, которые используют
графические ресурсы, эта компонента предоставляет возможность
работать с графическими объектами (линиями, прямоугольниками,
цветами), ничего не зная о деталях работы конкретных устройств
графического вывода (видеокарты и монитора). Это похоже на то, как
ядро скрывает от программ детали работы с конкретным
оборудованием, например, жёстким диском, предоставляя им работать
с файлами. Поэтому комплекс программ, предоставляющий доступ к
графическим ресурсам, называют графической подсистемой. В Linux
функции графической подсистемы
выполняет оконная система «Икс».
Графическая подсистема с точки зрения операционной системы представляет собой группу обычных процессов, управление которыми производится общесистемными средствами. Точно так же, общесистемными средствами производится и управление процессами, запускаемыми «из-под» этой графической среды. Графическая подсистема отнюдь не монополизирует использование компьютера; параллельно с её работой продолжает исполняться множество служебных системных процессов; с других терминалов (если система многотерминальная) могут запускаться другие программы или даже другие графические подсистемы.
Оконная система Икс (от англ. X window system, далее — просто X) — один из самых больших и успешных проектов в истории компьютерной техники — восходит к 1984 г., когда разработчики двух систем компьютерной графики, претендующих на универсальность — проектов Athena (Массачусетский технологический институт) и W Windowing (Стэнфордский университет) — решили объединить свои усилия. Подробнее об истории этого проекта можно узнать, например, из статьи в Wikipedia.
Тогда перед ними стояла задача создать систему компьютерной графики, позволяющую совместно использовать самые разные компьютерные платформы. Решением стало создание специального протокола X, который позволял разделить программы-клиенты и сервер, предоставляющий графические ресурсы, отсюда и возможность исполнять программу-клиент на одном компьютере, сервер на другом, а данные между ними передавать по сети.
Проект этот был настолько наукоёмок и настолько полно охватывал
тогдашнюю область задач, связанных с графикой, что серьёзных
альтернатив ему так и не возникло. С тех пор X прошла через одиннадцать основных релизов (отсюда другое название — X11,
представляющее собой название и текущую версию протокола) и
множество версий. И возникновение, и вся история развития X тесно
связаны с ОС UNIX
, а теперь, естественно, и Linux
.
Тем не менее, реализации X доступны и для нескольких
альтернативных архитектур ОС, включая Windows NT.
Существует несколько реализаций X, дальнейшее изложение будет ориентировано на две широко распространённые свободные реализации: XFree86 и XOrg. XFree86 изначально создавалась для семейства процессоров Intel 386, и вплоть до 2004 года была самой популярной реализацией X. XFree86 поддерживает беспрецедентно широкий спектр оборудования (оно и понятно, учитывая существующий «зоопарк» видеокарт и устройств ввода для платформы PC). Благодаря доступности исходных текстов и пользовательской аудитории в десятки миллионов человек, XFree86 весьма устойчива и хорошо оттестирована, по крайней мере, насколько это возможно для такого разнообразия поддерживаемого оборудования.
В последние годы параллельно с XFree86 развивается основанная на тех же исходных текстах X Window System графическая подсистема XOrg. До недавнего времени по спектру поддерживаемого оборудования, архитектур и функциональности XOrg мало чем отличалась от XFree86, и сейчас они тоже примерно эквивалентны с точки зрения пользователя. Однако направление развития этих двух проектов, состав их разработчиков и лицензионная политика несхожи. В ближайшем будущем вполне вероятно, что XOrg обгонит XFree86 и по возможностям, и по частоте использования.
Большинство из того, о чем будет говориться в последующих разделах, справедливо для любой реализации X на любом оборудовании и под любой ОС, список которых можно найти на http://www.X.org.
Большинство пользователей, установив систему, получают в своё распоряжение готовую графическую среду. Однако то, что сидящему за монитором представляется сплошной графической операционной средой, реализовано как многослойный бутерброд технологий. Попробуем разобраться в его устройстве «по слоям».
Непосредственно с оборудованием (видеосистемой, устройствами ввода и динамиком) работает X-сервер. Перечисленное оборудование в совокупности называется X-терминалом (аппаратным X-терминалом называется и специализированный компьютер, на котором исполняется исключительно X-сервер). X-сервер захватывает оборудование и предоставляет возможность выводить на эти устройства и получать от них ввод другим программам — X-клиентам — по особому протоколу, который так и называется, X-протокол.
Здесь сразу видно важное технологическое достоинство X: взаимодействие X-сервера с X-клиентами происходит по специфицированному протоколу, который может туннелироваться через TCP/IP и, соответственно, клиенты и сервер могут исполняться на разных узлах сети. Это означает, что одни и те же программы могут эксплуатироваться в разных топологиях, включая совокупность автономных рабочих станций (персональных компьютеров), совокупность рабочих станций без данных или бездисковых рабочих станций (локальная сеть), многопользовательскую систему с X-терминалами (или какую-либо смешанную топологию).
Ещё одним ресурсом, который предоставляет X-сервер, являются шрифты. Оперировать шрифтами он может самостоятельно, либо с помощью другой программы, которая обеспечивает масштабирование шрифтов — фонт-сервера (от англ. font — шрифт).
На Рисунок 1, «Чистая X» показана «чистая» оконная система X — когда запущен только X-сервер и никаких приложений — то, с чем большинство пользователей никогда не сталкивается. Запустить её обычно можно, подав команду: X &.
Мы видим традиционный серый экран с не менее традиционным курсором
в виде буквы «x». Используя мышь или другое координатное устройство, курсор можно перемещать по экрану. На нажатие кнопок мыши и клавиш никакой видимой реакции не следует. И невидимой тоже — сервер готов передавать эти сигналы своим
клиентам, а клиенты пока не запущены. Хотя на самом деле некоторые
комбинации клавиш X перехватывает и обрабатывает. Это Zap
(Ctrl-Alt-Backspace) —
завершение работы сервера (если эта возможность не запрещена при
конфигурации), Zoom
(Ctrl-Alt-+ и
Ctrl-Alt--) —
«горячее» переключение доступных видеорежимов. В
некоторых ОС (Например, GNU/Linux
)
Ctrl-Alt в сочетании с
функциональной клавишей освобождает оборудование и передаёт его на
время соответствующей виртуальной консоли — запущенной в
неграфическом режиме (обычно, vga-режиме) программе, позволяющей
пользователю зарегистрироваться в системе и получить доступ к
командной строке оболочки.
Воспользуемся последней возможностью, перейдём на консоль и запустим первое клиентское приложение: программу xterm (Рисунок 2, «xterm в среде X»). На экране X появилось окно, а в окне можно видеть интерфейс клиентского приложения. В данном случае интерфейс текстовый, а приложение представляет собой эмулятор терминала, на котором запущена командная оболочка системы по умолчанию. С эмулятором можно делать все то же, что и с обычным терминалом: издавать команды, получать результат и запускать другие программы. Если программы текстовые (строчные или оконные), исполняться они будут в том же окне, а если графические (как и сам xterm) — в отдельных окнах.
Запустим программу xclock (Рисунок 3, «xclock в среде X»). При её запуске мы использовали несколько
параметров, задающих геометрию (местоположение и размер) вновь
порождаемого окна, цвет его фона и шрифта по умолчанию, толщину и
цвет рамки. Эти (и некоторые другие) параметры типичны для
программ, построенных на основе графической библиотеки X Toolkit
. Все значения параметров, заданные при вызове программы, кроме геометрии окна (местоположения на экране и размера), могут быть перекрыты самим запускающимся приложением. Дело в том, что окно выделяется клиентскому приложению при запуске, и все доступные ему ресурсы этим окном и ограничены — это свойство X-протокола.
Переместить окно или изменить его размер средствами
«чистой» X невозможно.
Запустив несколько экземпляров того же xterm (и почитав документацию) можно обнаружить, что и «чистая» X умеет не так мало. Например, оперирует буфером обмена текстом между приложениями и предоставляет текстовым приложениям такой ресурс, как полосу прокрутки (полоса сбоку окна, при помощи которой можно листать текст вверх или вниз, щёлкая по ней левой и правой кнопками мыши соответственно, — это наследие проекта Athena).
Итак, ключевой компонент графической платформы — X-сервер:
захватывает оборудование;
создаёт по запросу других программ (которые в этой терминологии называются X-клиентами) окна;
предоставляет другим программам возможность работы в окнах, т. е. вывода информации в эти окна и обработки сигналов от устройств ввода (клавиатуры и мыши или другого координатного устройства), когда окно, назначенное программе, является активным. Предоставление ресурсов возможно в том числе и через сеть, когда клиент и сервер работают на разных компьютерах (узлах).
В среде, образуемой X-сервером, окно, выделяемое клиенту, является фиксированным: его геометрия задаётся при запуске клиента и сохраняется в течение всего сеанса работы с этим клиентом. Есть ли польза от системы, работающей с фиксированными окнами? Да, это вполне соответствует цели создания специализированных систем с графическим интерфейсом пользователя. Примером такой системы может служить терминал, позволяющий получать справки о расписании поездов и стоимости проезда, установленный на вокзале. Однако этих возможностей совершенно недостаточно для универсального «настольного» применения компьютера.
При универсальном применении компьютера характерна поочерёдная работа с различными программами (иногда достаточно большим их количеством), причём пользователь может отрываться, допустим, от редактирования текста, чтобы поработать с иллюстрацией при помощи другой программы, прочитать почту или заглянуть на интернет-страницу, затем возвращаться к редактированию текста и т. д. Эти возможности обеспечивает другая программа — менеджер окон, представляющая собой следующий «слой» в графической среде пользователя.
Для одновременной и поочерёдной работы с разными программами, требуется возможность управлять окнами (с помощью клавиатуры или мыши), т. е. возможность изменять «на лету» их геометрию (положение и размеры), а также (обычно не относимое к геометрии) положение в воображаемой «стопке» окон — от этого зависит, какое из окон будет «верхним» (видимым полностью), если окна перекрывают друг друга на плоскости экрана.
Управление окнами и составляет основную функцию оконного менеджера. Устоявшийся англоязычный термин window manager, относящийся к этому классу программ, мы будем передавать далее словосочетанием-калькой «оконный менеджер», которое, впрочем, не представляется особенно удачным, так же, как и встречающиеся в литературе «менеджер окон», «администратор окон» и «диспетчер окон».
Технически ограничение на изменение геометрии однажды выделенного X-сервером окна преодолевается оконным менеджером за счёт того, что ему в качестве окна выделяется весь экран. Окно во весь экран может быть названо корневым, по аналогии с корневым каталогом в файловой системе. На самом деле, менеджер окон — не единственная программа, способная работать с корневым окном; например, входящая в комплект поставки X утилита xsetroot позволяет установить цвет фона или поместить на него рисунок.
Прикладным программам, таким образом, выделяются далее уже не окна собственно X, а окна оконного менеджера. Изменение положения окна в подавляющем большинстве случаев ничего не требует от программы-клиента, однако желательно, чтобы программа была достаточно «сообразительной», чтобы изменить своё поведение при изменении размеров выделенного ей окна «на лету». Это справедливо для большинства, но не для всех программ (в частности, этого «не умеют» многие старые программы и некоторые компьютерные игры).
В свою очередь, и оконный менеджер может быть достаточно «умен», чтобы понять, что программа не реагирует на изменение геометрии окна, и запретить пользователю изменять размеры окна для данной программы (чтобы он не оказался в ситуации, когда ему видна лишь часть области вывода программы или наоборот, часть окна прикладной программы пуста). Однако такое решение может привести к весьма дискомфортным ситуациям (например, если при запуске программы её окно оказывается больше экрана)[1].
Менеджеров окон существует превеликое множество — под любой набор задач, которые может решать графическая многооконная система. Их настолько много, что выбрать какой-нибудь в качестве «типичного представителя семейства» затруднительно. Поэтому выберем один из самых развитых — Enlightenment.
«Просвещение» (англ. enlightenment) создано Карстеном Хайцлером и Джеффом Харрисоном (Carsten Haitzler, Geoff Harrison). До 2000 г. он был основным менеджером окон в популярной среде GNOME, затем уступив это место менее функциональной, но более быстрой «Рыбе-пиле» (Sawfish). Он продолжает оставаться GNOME-совместимым, и многие пользователи этой популярной среды предпочитают его, хотя и без GNOME у Enlightenment поклонников хватает.
Запустим Enlightenment (Рисунок 4, «Оконный менеджер Enlightenment»), набрав в командной строке xterm enlightenment &. Первое, что мы видим — это появившиеся вокруг окна нашего xterm элементы оформления: рамка и строка заголовка с кнопками. Окно теперь можно перемещать по экрану, «ухватив» за заголовок, масштабировать (изменять размер), «взяв» за бок или за угол, максимизировать, минимизировать или закрыть, нажав соответствующую кнопку. Спрашивается, что ещё можно делать с окном?
Вопрос не праздный. Нажав на левую кнопку в заголовке, получаем неожиданно разнообразное меню таких действий (Рисунок 5, «Оконное меню Enlightenment»). Оказывается, его можно ещё уничтожить (Annihilate), поднять/опустить (Raise/Lower), скрутить/раскрутить (Shade/Unshade) приклеить/отклеить (Stick/Unstick) и выполнить ещё массу действий, для которых потребовались отдельные меню. Набор этих действий зависит от конкретного менеджера окон (и Enlightenment — один из самых богатых возможностями), а то, какие из них выведены в строку заголовка отдельными кнопками, — от того, как он настроен (пользователем или по умолчанию).
Базовая (а также расширенная) функциональность оконных менеджеров доступна пользователю прежде всего за счёт введения в интерфейс так называемых виджетов (от англ. widgets, сокращение от window gadgets, «оконные приспособления»). Виджеты — это рамки, кнопки, меню и пр., которые служат «органами управления» окна. Технически (в терминах оконной системы X) виджеты представляют собой отдельные окна, примыкающие к окну прикладной программы и, как правило, перемещающиеся вместе с ним.
Обрамление окна обычно составляют следующие элементы:
При «буксировке» рамки мышью окно изменяет свой размер. Иногда для изменения размера окна предназначены только выделенные «уголки» рамки, представляющие собой отдельные виджеты.
Часто совпадает с одной из (обычно, верхней) сторон рамки. В полосе заголовка может содержаться название программы или запустившая программу команда, а также другая информация, специфичная для окна. При «буксировке» полосы заголовка перемещается все окно. Со «щелчками» различными кнопками мыши на полосе заголовка также могут быть связаны различные действия по управлению окнами.
Часто вынесенные на полосу заголовка или в другое место рамки кнопки позволяют выполнить с ним такие действия, как закрытие (часто сопровождающееся выходом из программы, открывшей окно), максимизация (разворачивание окна на весь экран), минимизация/сворачивание, вызов меню управления окном, которое может содержать весьма обширный репертуар других действий.
Детали реализации обрамления окна могут быть весьма различными в зависимости от конкретного оконного менеджера и его настроек.
Откуда берутся такие ресурсы, как виджеты, их декор и способ поведения? Конечно, менеджер окон может содержать их в себе. Но такой подход не очень характерен для открытых систем, одним из принципов разработки которых является компонентность. Поэтому виджеты и их функции обычно объединяются в стандартные библиотеки (toolkits), которые могут быть использованы множеством различных программ. Большинство развитых менеджеров окон, менеджеров рабочего стола и разработанных специально для них приложений можно сгруппировать по библиотекам виджетов, с опорой на которые они разработаны.
С точки зрения пользователя виджеты, составляющие обрамление окна, часто воспринимаются как его часть. Однако не следует забывать, что внутри окна (содержимым которого управляет уже прикладная программа, а не менеджер окон) зачастую тоже есть свои виджеты: кнопки, полосы прокрутки, переключатели, меню и т. п. В общем случае, используемые оконным менеджером и прикладной программой библиотеки виджетов могут и не совпадать.
Собственно, управление окнами — основная функция оконного менеджера, и на этом его функциональность может и заканчиваться. Однако большинство из них выполняют по крайней мере ещё одну функцию.
Вы уже обратили внимание на то, что при запуске Enlightenment на экране появилось ещё одно окно. Это так называемый пейджер (pager), на Рисунок 7, «Пейджер» он изображён крупным планом. На пейджере представлена миниатюрная копия экрана, обновляющаяся в режиме реального времени, причём, если подвести курсор к изображению отдельного окна, оно увеличивается и рядом высвечивается название приложения, запущенного в нем. Но почему экран занимает только четверть окна пейджера? Потому что оконный менеджер позволяет оперировать «виртуальным» столом (от англ. virtual desktop, также рабочим столом), по размеру превышающим физический экран, а пейджер — одно из средств перемещения физического экрана по рабочему столу. Enlightenment позволяет создавать до 64 экранов на рабочем столе.
Менеджер окон, который помимо управления окнами обладает рядом дополнительных функций, может использоваться в качестве операционной графической среды пользователя, предоставляющей полный спектр возможностей для параллельной работы с несколькими задачами. Наиболее часто такими дополнительными функциями являются следующие:
Работа на экране, «захламлённом» десятком различных окон, может быть дискомфортной, и крайне полезна возможность свернуть (минимизировать) окно со временно неиспользуемой программой. Для того, чтобы средствами графической среды можно было окно затем развернуть, оно и в свёрнутом состоянии должно каким-то образом отображаться. Существует несколько относительно распространённых способов отображения свёрнутых окон. Например, «на столе» может оставаться полоса заголовка свёрнутого окна, по щелчку на которой оно вновь разворачивается. Свёрнутым окнам могут соответствовать пиктограммы (иконки, значки) на поверхности рабочего стола или в специально отведённом для этого окне (панели управления). Свёрнутые окна могут отображаться как пункты общего или специального меню (см. ниже).
Практика показывает, что для многих продвинутых пользователей, которые осваивают открытые системы, уже имея опыт работы в характерных для ПК альтернативных системах, именно возможность работать на нескольких рабочих столах оказывается решающим плюсом оконной системы X. Действительно, переключение между виртуальными рабочими столами позволяет организовать комфортную работу со множеством программ даже на мониторах с относительно низким разрешением (1024х728, 800х600) и физическими размерами (17, 15-дюймовыми). В иных условиях комфортность работы существенно снизилась бы, или настоятельной необходимостью стало бы приобретение более крупного и ёмкого монитора (что зачастую влечёт за собой необходимость смены графической карты и прочих недешёвых мероприятий). Все современные оконные менеджеры поддерживают виртуальные рабочие столы, правда называются они везде по-разному: столы, рабочие области или экраны. До предела (чтобы не сказать, до абсурда) эта функциональность развита в оконном менеджере Enlightenment, который позволяет организовать до 64 экранов на рабочем столе, при этом рабочих столов также может быть более одного (точнее, до 32). Трудно представить, зачем может понадобиться две тысячи с лишним отдельных экранов (как правило, четырёх экранов хватает с избытком для любых практических задач), однако возможности приёма демонстрируются этим в полный рост.
Возможность быстрого запуска предуготовленных команд обычно ассоциируется с общим меню (главным меню), вызываемым щелчком мыши на особом виджете, не связанном с прикладными окнами, или в свободной от прикладных окон области экрана.
Поведение — реакция отдельных виджетов на операции с ними, модель фокусировки (способ переключения активного в данный момент окна, с которым связан ввод с клавиатуры и мыши) и т. п. Поведение и внешний вид оформления окон, а также наличие на экране общих виджетов, не связанных с конкретными прикладными окнами, обои (цвет фона или изображение в корневом окне) и т. п. могут варьировать в очень широких пределах. Иногда возможности такой настройки считают некими «архитектурными излишествами», однако более взвешенной является точка зрения, согласно которой в хорошем визуальном дизайне (так же, как и в хорошей архитектуре) ничто не является излишеством.
Пример возможностей настройки менеджера окон даёт тот же Enlightenment. Его меню настройки можно увидеть, щёлкнув правой кнопкой мыши на фоне экрана (Рисунок 8, «Меню настройки Enlightenment»). Исследовав возможности настройки, можно обнаружить, что сказанное выше о способах работы с этим менеджером окон весьма условно, потому что поменять можно буквально все, от декора виджетов до количества и функций элементов оформления окон и их реакции на различные действия.
Лишь один пример: сколько способов визуализировать перемещение окна вы знаете? Разработчики Enlightenment придумали целых шесть, включая фантастический «полупрозрачный». Настройки и расширения Enlightenment можно объединять в темы (англ. themes) и обмениваться ими.
Выше речь шла о таких свойствах Enlightenment, которые предположительно являются общими для всех оконных менеджеров. Но при этом чаще обычного употреблялись слова «обычно», «как правило», «может» и т. п. Это связано с чрезвычайным разнообразием решений на базе распространённых оконных менеджеров. Ниже более подробно и определённо речь пойдёт ещё о нескольких оконных менеджерах.
BlackBox — один из самых компактных и быстродействующих оконных менеджеров. Он позволяет эффективно организовать работу на рабочем столе, не «захламляя» его ненужными ссылками и не расходуя экранное пространство на отображение громоздких элементов оформления.
Наряду с базовой функциональностью, BlackBox предоставляет (факультативно) панель, содержащую кнопки переключения между рабочими столами (по умолчанию их четыре) и заголовки открытых окон. Общее меню вызывается щелчком правой кнопкой мыши на свободном от окон месте рабочего стола. Меню (или любое из вложенных в него меню) щелчком по заголовку может быть превращено в окно, остающееся на экране до явного его закрытия щелчком на соответствующей кнопке.
По умолчанию на полосе заголовка каждого окна присутствуют кнопки сворачивания (сворачивание можно выполнить также двойным щелчком на самом заголовке), максимизации и закрытия окна. Свёрнутое окно присутствует на экране в виде полосы заголовка, развернуть его можно повторным двойным щелчком на полосе заголовка или из меню
(рабочие области), доступного по щелчку средней кнопкой мыши на свободном от окон месте рабочего стола. Это же меню позволяет перейти на другой стол, добавить или удалить стол из рабочего пространства.BlackBox поддерживает различные модели фокусировки ввода. Фокусировка по щелчку мыши (от англ. click to focus) позволяет реализовать стиль работы, привычный для пользователей KDE: окно становится активным (принимающим текущий ввод с клавиатуры и от мыши) после щелчка на нем. Активное окно автоматически становится верхним (видимым полностью, даже если оно частично перекрывается с другими окнами). Небрежная фокусировка (от англ. sloppy focus) предполагает активизацию окна при попадании на него курсора мыши (окно при этом не «всплывает» автоматически наверх).
Наряду с панелью и конвертируемыми в дополнительные окна-панели меню, BlackBox реализует ещё один автономный виджет — так называемую щель (англ. slit). Щель располагается на краю видимого экрана и может содержать маленькие (без обрамления) окна специализированных программ (их существует около десяти), индицирующих какие-либо состояния среды или позволяющих быстро выполнить часто исполняемые действия.
На основе BlackBox созданы два более развитых оконных менеджера — OpenBox и более популярный FluxBox.
Внешний вид BlackBox, FluxBox и OpenBox легко настраивается с помощью механизма тем рабочих столов.
WindowMaker (WM) — это свободная реализация (в рамках проекта GNUStep) концепций NextSTEP — первой получившей более или менее широкую известность универсальной графической среды пользователя. За недоступностью оригинальной NextSTEP для современных платформ, познакомиться с WM полезно и поучительно вне зависимости от того, собираетесь ли вы с ним работать. Это позволит увидеть исходную точку развития графических сред и оценить продуктивность (или непродуктивность) того, с чем эти идеи стали ассоциироваться со временем.
Основным автономным виджетом WM, как и NextSTEP, является пирс прикладных программ, представленный при запуске пиктограммой со скрепкой. При запуске любой корректной (с точки зрения WM), а также некоторых некорректных программ, кроме её окна на экране появляется её пиктограмма. Если «пришвартовать» эту пиктограмму к пирсу, она там и останется, позволяя запускать эту программу вновь и вновь простым щелчком по ней — это разработанный для NextSTEP интегрирующий интерфейс.
WM позволяет работать с несколькими рабочими столами (переключение по умолчанию при помощи клавиш Alt-n или через меню, доступное по щелчку правой кнопкой мыши на свободном месте рабочего стола). WM очень гибко настраивается, как в отношении внешнего вида, так и в отношении поведения, причём большая часть настроек доступна из специальной графической утилиты, запускаемой по щелчку на пиктограмме с изображением ступеньки.
IceWM — простой оконный менеджер, его очень часто выбирают
пользователи, переходящие с Microsoft Windows
или OS/2
, поскольку он достаточно
точно повторяет основные черты привычной для них графической
рабочей среды.
Из автономных виджетов прежде всего стоит отметить панель с
кнопкой, вызывающей главное меню (подобно тому, как это делает
кнопка в Microsoft Windows
, GNOME или KDE). С помощью панели можно
также управлять текущим сеансом и настраивать IceWM. Впрочем,
основное меню также доступно и по щелчку правой кнопкой мыши
на свободном месте рабочего стола, что более
привычно для пользователей WindowMaker, Sawfish,
BlackBox или Enlightenment.
Панель также содержит список запущенных программ (включая те, окна которых минимизированы), на неё можно вывести и мини-терминал, позволяющий оперировать командной строкой. Для выполнения любого действия может быть назначена специальная клавиатурная комбинация.
IceWM также позволяет работать с множеством рабочих столов (рабочих мест), которые нумеруются или именуются пользователем.
Существует два подхода к тому, как можно достроить оконную систему до полнофункциональной среды, позволяющей пользователю решать все (или почти все) его практические задачи. Во-первых, можно расширить функциональность менеджера окон, добавив в него недостающие возможности. Чего не хватает в оконном менеджере до полнофункциональной среды? Возможности запускать программы и утилиты. Достигается это обычно при помощи организации специального меню. С примером этого подхода мы уже познакомились в предыдущем разделе: этим путём пошли разработчики Enlightenment и ряд других проектов. Во-вторых, можно добавить в «графический бутерброд» ещё один слой — менеджер рабочего стола — работающий «поверх» менеджера окон и использующий функциональность последнего. Этим путам идут команды разработчиков GNOME и KDE, и для пользователей этих графических сред «бутерброд» становится уже трёхслойным: оконная среда X, оконный менеджер и менеджер рабочего стола.
С точки зрения пользователя нет чёткой границы между менеджерами окон с расширенной функциональностью и менеджерами рабочего стола, работающими «поверх» менеджера окон, поскольку они обеспечивают одну и ту же функциональность и нередко даже графически организованы сходным образом. Оба варианта предоставляют пользователю возможность работать в графической среде (desktop environment).
Интегрированная графическая среда предполагает не только единство оформления, но и трактовку объектов в рабочем пространстве (окон, файлов, пунктов меню и т. п.) как физических объектов, которые можно перемещать, выбрасывать в «корзину» и т. д. Однако сколько-нибудь последовательной теории интегрированных графических сред не существует. Изучая отдельные среды в динамике их развития, можно, тем не менее, выделить несколько общих черт.
Они опираются на определённый интерфейс разработчика
(API), состоящий из библиотек, доступных также разработчикам
прикладных программ (будь то MS Windows API для Microsoft Windows
,
Motif
для
CDE, Qt
для KDE
или GTK+
для GNOME);
Они реализуют элементы объектной метафоры: файлы, процессы (их потоки ввода-вывода) изображаются как отдельные объекты, на них можно фокусироваться и выполнять с ними различные действия, их состояния и изменения этих состояний также могут визуализироваться или озвучиваться. Целостная объектная метафора своей реализации не нашла (и, видимо, последовательно объектная среда была бы крайне неудобной в использовании).
Они реализуют единообразные элементы управления (виджеты), зачастую не только в оформлении отдельных окон, но и в их содержимом.
Они содержат те или иные элементы управления, не привязанные к отдельным окнам прикладных программ (общие меню, панели управления, поверхность стола и т. п.).
Они позволяют согласованно изменять свойства интерфейса образующих среду программ (менеджера окон, менеджера рабочего стола, приложений, разработанных специально для данной среды).
Они реализуют буфер обмена, позволяющий передавать типизованные данные от программы программе (оконная система X содержит буфер, позволяющий передавать данные лишь простого текстового типа).
Они реализуют возможность «перетаскивания» при помощи мыши (drag'n'drop) объектов или данных между окнами одной программы или разных программ.
Однородность опыта при работе в интегрированных средах и связанная с нею привычность (иногда ошибочно называемая «интуитивностью», хотя она не имеет отношения к философскому и психологическому понятиям интуиции) позволяют при освоении нового инструмента-программы сосредоточиться на её прикладной логике, не задумываясь и специально не фокусируя внимания на приёмах работы, общих для всех инструментов. Это позволяет новому пользователю гораздо быстрее осваивать прикладные программы (делает более «крутой» пресловутую кривую обучения)[2].
Как ни парадоксально, основной недостаток работы в интегрированной среде является оборотной стороной основного достоинства: жёстко закреплённые навыки мешают при выходе за её пределы. Конечному пользователю, ограниченному опытом работы в одной среде, недостаёт «стереоскопичности» видения, глубины понимания; элементы эргономической логики могут напрямую ассоциироваться с определёнными визуальными элементами и «жестами», с помощью которых подаются команды.
Общеизвестны сложности, с которыми сталкиваются люди, долгое время работавшие в одной графической среде, при необходимости поработать в другой (пусть даже и весьма схожей). Для преодоления таких сложностей крайне полезным представляется знакомство с разными средами уже на начальном этапе освоения графических интерфейсов. Это не обязательно должны быть разные интегрированные среды, но само представление о том, что один и тот же результат может достигаться с помощью разных интерфейсных средств весьма важно. В общем случае это возможно и в рамках одной интегрированной среды из числа рассматриваемых ниже — и KDE, и GNOME в высшей степени гибки в отношении настройки внешнего вида и поведения.
На сегодня существуют и развиваются две свободные интегрированные графические среды общего назначения: KDE и GNOME. Они входят в поставку большинства стандартных (открытых) ОС, как свободных, так и несвободных. Хотя GNOME на полгода моложе KDE, мы начнём обсуждение именно с GNOME.
GNOME (GNOME, GNU Network Object Model Environment — «Среда ГНУ, основанная на модели сетевых объектов», но также и «Образцовая среда для сетевых объектов ГНУ») — один из самых амбициозных и масштабных проектов в программистском сообществе.
Кроме реализации функционально полной графической среды (возможно, уместнее говорить о сенсуальных средах, учитывая то, что звук стал их полноправной частью), GNOME претендует на то, чтобы полностью реализовать спецификации промышленной платформы сетевого взаимодействия CORBA и полностью абстрагировать слой менеджера рабочего стола (или графической среды) от низлежащего слоя управления окнами (менеджера окон).
GNOME поддерживает ряд оконных менеджеров, среди которых: Sawfish (оконный менеджер по умолчанию), Enlightenment, IceWM, WindowMaker, AfterStep и FVWM2, совместимые с GNOME, впрочем, в разной степени.
Сегодняшняя версия GNOME — полноценная интегрированная среда, включающая реализацию повседневно необходимых функций и позволяющая использовать сторонние решения для реализации функциональности, которая в ней отсутствует.
GNOME использует один из самых развитых интерфейсных пакетов
GTK+
, реализованный
для разных платформ. Над ним надстраивается
масса компонентов и библиотек, обеспечивающих сетевую
функциональность, интерфейсы к различным языкам программирования,
работу со звуком через механизмы ОС и пр.
Сам GNOME стремится
оставаться мобильным и доступным во всех открытых системах. Он
стабильно работает в GNU/Linux
, BSD
, AIX
и Solaris
; последнее обстоятельство
способствовало поддержке разработки GNOME, которую оказывает Sun Microsystems
через созданный в 2001 г. году «Фонд
GNOME», среди учредителей которого также крупнейшие
поставщики свободных ОС.
С пользовательской точки зрения GNOME предстаёт как набор базовых компонентов интерфейса и аплетов, утилит и прикладных программ. К базовым компонентам относятся менеджер файлов и поверхности стола Наутилус (Nautilus), панели управления и меню GNOME Panel и центр управления (Gnome Control Center).
Менеджер файлов Nautilus позволяет отображать содержимое файлов и каталогов в окнах и выполнять над файлами обычные действия (удаление, переименование, копирование и перемещение и т. п.), а также осуществлять предварительный просмотр многих типов данных. Nautilus эффектен, но работа с ним не более эффективна, чем с прочими броузерами файлов, включаемыми обычно в графические среды (менеджер файлов CDE или Windows Explorer).
Помимо отображения содержимого каталогов в окнах, Nautilus также может отображать один из каталогов на поверхности рабочего стола: размещённые на нем иконки как бы приклеены к монитору, и при смене текущего экрана остаются на том же месте относительно наблюдателя (так же, кстати, ведут себя и открытые окна, если их «приклеить»).
Поддерживается широкий спектр операций переноса мышью (drag'n'drop), причём «перетаскивать» можно не только объекты (файлы, пункты меню и т. п.), но и некоторые их свойства: так, можно «взять цвет» в окне выбора цвета и перенести его на панель, которая воспримет его. Есть даже операции, позволяющие назначить один объект свойством другого: например, если на панель «перетащить» не цвет, а файл с картинкой, последняя станет её фоном. Переносить файлы между окнами Nautilus, на рабочий стол и панели можно практически без ограничений.
Уже упомянутые панели являются, наряду с менеджером файлов, важнейшей составной частью интерфейса GNOME. Панелей может быть неограниченное количество. Панель может быть двух типов: панель-меню (menu panel) и объектная панель (object panel). Первая из них содержит пункты меню и может содержать пиктограммы, а вторая — только пиктограммы. Последняя может быть краевой (edge), выровненной (aligned), скользящей (sliding) или плавающей (floating), но это скорее свойство панели (которое можно менять «на ходу»), определяющее особенности её поведения, чем тип.
Внешний вид и поведение панелей является в высшей степени конфигурируемым. Пользователь может задавать как глобальные предпочтения (анимация движения панелей, отображение панельных объектов и пр.), так и индивидуальные предпочтения для каждой из них (её тип и положение на экране, ширина, возможность автосокрытия и принудительной минимизации, цвет и фоновое изображение и т. п.). Разумеется, пользователь может наполнять панели теми объектами, которые ему нужны.
На панелях могут присутствовать объекты пяти типов:
Аплет (applet, «приложеньице») — интересный тип панельного объекта, демонстрирующий то, что он не обязан быть представлен статической картинкой. Это программа, места в панели которой достаточно, чтобы отображать какую-нибудь полезную (или забавную) информацию или даже принимать клавиатурный и/или координатный ввод. С GNOME поставляется масса аплетов, отображающих всякую полезную информацию (состояние ресурсов и статус сети, например) или позволяющих осуществить нетривиальные действия (например, mini commander, позволяющий набрать команду, не запуская терминала). Важными аплетами являются путеводитель по столу (Desktop Guide) и список задач (Task List), позволяющие переключаться между виртуальными экранами и активизировать окна запущенных программ соответственно.
Пускатель (launcher) ассоциирован с приложением или командой, которые исполняются по щелчку на его пиктограмме в панели.
Выдвижной ящик (drawer) — это кнопка, открывающая другую панель, перпендикулярно первой — некий аналог подменю в меню, который можно наполнить всевозможными аплетами.
Специальные объекты — это те же аплеты, но выполняющие функции, которые другими средствами «достать» почему-либо нельзя (запереть экран, выйти из GNOME или запустить программу «вручную»). В качестве специальных объектов исполняются и программы, которые не были написаны специально для GNOME, но могут, тем не менее, осуществлять вывод в панель — поглощённые программы (swallowed applications).
Наконец, объект-меню раскрывает меню.
За работу системы меню, как и за работу панелей, отвечает компонент GNOME Panel, и это не случайно: разница между панелью и меню в большей степени декоративная, чем сущностная. Любое меню можно зафиксировать на экране, и оно превратится в подобие панели-меню (только вертикальное, а не горизонтальное, и с меньшими возможностями настройки).
У GNOME нет единой иерархии меню: кроме главного, вызываемого объектом-меню с гномьей лапой (оно же, когда вызывается щелчком правой кнопки на фоне или нажатием клавиши, почему-то называется глобальным (global)), пользователь может создавать обычные (normal) меню, связанные с объектами-меню на панелях.
Меню настраиваются примерно так же, как и панели: пользователь может добавлять, менять и удалять пункты, создавать подменю и т. п. При этом создаваемые обычные меню изначально пусты, а главное/глобальное заполняется при установке всем, что GNOME найдёт в системе, и пользователю остаётся только убрать лишнее и переставить пункты в соответствии со своими предпочтениями.
Для настройки различных аспектов функционирования системы предназначен Центр управления, представляющий собой набор управляющих аплетов (каплетов, от англ. capplets, control applets), связанных с разными компонентами и прикладными программами.
Одни из них позволяют менять параметры рабочего стола и облик приложений (включая использование тем), другие — настраивать мультимедиа, третьи — управлять свойствами клавиатуры и мыши, и т. д.
Важным «каплетом» является менеджер т. н. обработчиков документов (Document Handlers), устанавливающий соответствие между типом файла или протокола и программой, выполняющей различные операции с ними. Набор каплетов является расширяемым, их можно разрабатывать не только для программ, написанных специально для GNOME, но и для внешних программ.
Также постоянно расширяется набор утилит, прикладных программ и аплетов, поставляемых с GNOME — вместе с программами, входящими в большинство дистрибутивов ОС, о которых GNOME «в курсе», их число превышает сотню. Перечислить их здесь нет никакой возможности, но среди них есть интерфейсы для администрирования системы, средства звукозаписи и воспроизведения, сетевые утилиты, игры и многое другое.
GNOME снабжён встроенной системой помощи; кроме того, его
разработчиками совместно с Sun Microsystems подготовлено
компактное руководство, доступное в разных форматах на
сайте проекта. В его поставку входит система разработки
графических приложений под GTK+
, которая называется
Glade и включает в себя специфические
для GNOME элементы.
GNOME и большинство его компонентов соответствуют соглашениям об интернационализации и, соответственно, поддерживают работу с кириллицей, локализацию и перевод интерфейса.
Само название KDE (KDE, K Desktop Environment — «Графическая среда К») — явная пародия на CDE (Common Desktop Environment — «Общая настольная среда»). CDE была последней попыткой отрасли стандартизовать графическую среду на несвободной основе, предпринятой в конце девяностых годов. Буква «K» в KDE ничего не означает.
Несмотря на явно игривый тон, начинающийся с названия среды и продолжающийся в названии компонентов, KDE — очень серьёзный проект. В KDE любят играть со словами; например, универсальный броузер, входящий в среду, называется Konqueror (от англ. conqueror — «завоеватель», «покоритель»), терминал — Konsole (от console — «консоль»), а система помощи — вообще Kandalf (от имени Гэндальфа, мага из фантазийных произведений Дж. Р. Р. Толкиена).
Если единообразие и однородность графической среды считать достоинством, то KDE — несомненный лидер среди всех (как свободных, так и несвободных) интегрированных графических сред. Основное видимое средство интеграции — это универсальный броузер Konqueror. Функция Konqueror близка к той, которую приобрёл Windows Explorer — он совмещает функции гипермедийного броузера WWW и броузера локальных ресурсов.
Разработчики KDE пошли даже дальше своих коллег из Microsoft и определили ряд дополнительных протоколов, что позволило, в частности, просматривать с помощью броузера в единообразном формате все разнообразие справочной информации, представленное в сегодняшних открытых системах (традиционные страницы руководства man, гипертекстовую систему Info из проекта GNU, разрозненные файлы документации в текстовом и гипертекстовом формате). В Konqueror интегрирована также возможность предварительного просмотра содержимого большого количества типов файлов.
KDE включает также настраиваемую систему панелей и меню и интегрированный центр управления, позволяющий согласованно изменять параметры среды. KDE менее гибка в настройке, чем GNOME, однако её гибкости вполне достаточно для решения любых практических задач (в том числе, имитации вида и поведения других сред). KDE работает только с собственным оконным менеджером KWin.
В поставку KDE входит множество «аксессуаров» и прикладных программ, к тому же рядом с проектом выросла целая группа сопутствующих, ориентированных на те или иные предметные приложения, из которых самым развитым является офисный пакет KOffice.
В то время, как сама оконная система X много лет является фактическим отраслевым стандартом, лежащие «над» нею слои графической среды не стандартизованы. Какую-либо классификацию графических сред дать затруднительно, однако самым грубым образом их можно разделить на интегрированные и лёгкие. В последние годы разработчики GNOME и KDE работают над формулировкой общего открытого стандарта на интегрированную графическую среду.
Оборотной стороной интегрированности является достаточно высокая их требовательность к ресурсам. Комфортная работа с KDE или GNOME последних версий начинается при производительности компьютера, примерно эквивалентной производительности 800 МГц процессора Celeron. Отказ от некоторых ресурсоёмких свойств (анимация изменений в среде и т. п.) позволяет снизить требования примерно до 500 МГц при объёме оперативной памяти от 128 МБ. Разумеется, эти цифры даже ниже характерных для компьютеров стартового уровня, поставляемых сегодня производителями, однако парк машин, находящихся в эксплуатации, как в офисах, так дома и в школе, включает и компьютеры с более низкими характеристиками.
Здесь помогут лёгкие графические среды, представляющие собой оконные менеджеры с расширенными возможностями. Описанные выше IceWM, BlackBox и FluxBox (а также чуть более требовательный к ресурсам WindowMaker)[3] позволяют достаточно комфортно работать с графикой на машинах производительностью (в эквиваленте Intel Pentium) примерно от 100 МГц и с памятью от 32 Мб.
Следует оговориться, что отказ от интегрированных графических сред не является панацеей: конкретные прикладные программы могут быть сами по себе достаточно требовательными к ресурсам. Кроме того, если прикладная программа изначально создана с ориентацией на определённую интегрированную среду, она может интенсивно использовать соответствующие библиотеки, даже если запускается в лёгкой среде. Например, запуск программ из пакета KOffice в лёгкой среде, на самом деле, даёт небольшой выигрыш по сравнению с его запуском из «родной» для него среды KDE.
Если необходимо задействовать имеющийся парк «слабой» техники для таких задач, а также, если необходимо сохранять в эксплуатации ещё менее производительные машины (например, старшие модели IBM PC-совместимых компьютеров на базе процессоров Intel 486 или AMD 586 или Макинтош на процессорах Motorola 68K), следует подумать об использовании такой техники в режиме графических терминалов или, по крайней мере, варианте запуска наиболее требовательных к ресурсам прикладных программ на сервере.
Следует оговорить также, что ограниченность аппаратных ресурсов не является единственным мотивом применения лёгких графических сред. Каждая графическая среда, интегрированная или лёгкая, обладает собственными уникальными особенностями, собственным стилем. Уместность использования каждой конкретной среды в значительной степени зависит от набора задач, решаемых на компьютере конкретным пользователем, и от его личных предпочтений.
[1] Следует отметить, что большинство базовых функций оконных менеджеров при исполнении опирается на поддержку оконной системой X функций двумерной графической акселерации (ускорения), реализованных практически во всех современных графических адаптерах. В отличие от трёхмерной акселерации, полезной лишь для достаточно узкого круга приложений (программ трёхмерного моделирования, компьютерных игр), двумерная акселерация — действительно универсальна и полезна для графического пользовательского интерфейса. При использовании карты без двумерного ускорения или карты, чья акселераторная функциональность не поддерживается системой X, можно рекомендовать настроить среду таким образом, чтобы исключить ресурсоёмкие функции, например, визуализацию перемещения окна со всем его содержимым, дабы избежать неоправданного роста нагрузки на процессор и драматического падения производительности.
[2] Разумеется, это сильно идеализированная картина. Иногда прикладная логика диктует некоторые элементы эргономики. Например, интерфейсы большинства систем автоматизированного конструирования и проектирования (CAD, САПР) весьма сходны, вне зависимости от среды, в которой работают эти программы.
[3] Возможностью представить их обзор в компактном виде автор обязан прежде всего своим соавторам Егору Гребневу, Сергею Иванову, Михаилу Шигорину. — Прим. М. Отставнова.