Графический пользовательский интерфейс

До середины девяностых существовали отдельно компьютерная графика и отдельно — настольные игры в компьютерную графику. Читатели, помнящие историю отечественной школьной информатизации, возможно, сталкивались с чудом техники под названием «цифровой дисплей растровый» (ЦДР), которое удавалось подключить к первому отечественному персональному компьютеру ДВК, чтобы отображать на экране телевизора несколько тысяч пикселов в четырех цветах. В то время в лабораториях компьютерной графики некоторых вузов можно было встретить графические рабочие станции с векторными устройствами и X-терминалами, и даже плоттерами.

К середине девяностых на компьютере с процессором Intel 486 уже запускалась та самая система, которую пятью годами раньше наблюдать можно было лишь на X-терминалах и графических станциях, стоивших каких-то немыслимых (что по тем временам, что сегодня) денег.

Игры в самодельную графику, конечно, продолжаются и сегодня, но в целом мир воссоединился, и особой нужды в таких играх давно нет. Хотя — такова диалектика массовых рынков — именно эти игры (включая игры в буквальном смысле) породили спрос на дешевые устройства (прежде всего, графические акселераторы), которые и делают настоящую компьютерную графику доступной пользователю массовой x86- и PowerPC-техники, даже устаревшие «персоналки» — сопоставимыми с X-терминалами, а более новые и мощные — соперниками и с профессиональных графических рабочих станций начального и среднего уровня.

Оконная система X и её реализации

Графический интерфейс не является неотъемлемой частью 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-сервера с многочисленными программи-клиентами происходит по специфицированному протоколу, который может туннелироваться через TCP/IP и, соответственно, клиенты и сервер могут исполняться на разных узлах Сети. Это означает, что одни и те же программы могут эксплуатироваться в разных топологиях, включая совокупность автономных рабочих станций (персональных компьютеров), совокупность рабочих станций без данных или бездисковых рабочих станций (локальная сеть), многопользовательскую систему с X-терминалами (или какую-либо смешанную топологию).

Еще одним ресурсом, который предоставляет X-сервер, являются шрифты. Оперировать шрифтами он может самостоятельно, либо с помощью другой программы, которая обеспечивает масштабирование шрифтов — фонт-сервера (от англ. font — шрифт).

Большинство пользователей, установив систему, получают в свое распоряжение готовую графическую среду. Попробуем разобраться в ее устройстве «по слоям».

«Чистая» X

На рис. 2.1 показана «чистая» оконная система X — когда запущен только X-сервер и никаких приложений — то, с чем большинство пользователей никогда не сталкивается. Запустить ее обычно можно, подав команду: X &.

Рисунок 2.1. Чистая X

Чистая X

Мы видим традиционный серый экран с не менее традиционным курсором в виде буквы «x». Используя мышь или другое координатное устройство, курсор можно перемещать по экрану. На нажатие кнопок мыши и клавиш никакой видимой реакции не следует. И невидимой тоже — сервер готов передавать эти сигналы своим клиентам, а клиенты пока не запущены. Хотя на самом деле некоторые комбинации клавиш X перехватывает и обрабатывает. Это Zap (Ctrl-Alt-Backspace) — завершение работы сервера (если эта возможность не запрещена при конфигурации), Zoom (Ctrl-Alt-+ и Ctrl-Alt--) — «горячее» переключение доступных видеорежимов. В некоторых ОС (Например, ГНУ/Линукс) Ctrl-Alt в сочетании с функциональной клавишей освобождает оборудование и передает его на время соответствующей виртуальной консоли — запущенной в неграфическом режиме (обычно, vga-режиме) программе, позволяющей пользователю зарегистрироваться в системе и получить доступ к командной строке оболочки.

Рисунок 2.2. xterm в среде X

xterm в среде X

Воспользуемся последней возможностью, перейдем на консоль и запустим первое клиентское приложение: программу xterm (рис. 2.2). На экране X появилось окно, а в окне можно видеть интерфейс клиентского приложения. В данном случае интерфейс текстовый, а приложение представляет собой эмулятор терминала, на котором запущена диалоговая оболочка системы по умолчанию. С эмулятором можно делать все то же, что и с обычным терминалом: издавать команды, получать результат и запускать другие программы. Если программы текстовые (строчные или оконные), исполняться они будут в том же окне, а если графические (как и сам xterm) — в отдельных окнах.

Рисунок 2.3. xclock в среде X

xclock в среде X

Запустим программу 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 поклонников хватает.

Рисунок 2.4. Оконный менеджер Enlightenment

Оконный менеджер Enlightenment

Запустим Enlightenment (рис. 2.4), набрав в командной строке xterm enlightenment &. Первое, что мы видим — это появившиеся вокруг окна нашего xterm элементы оформления: рамка и строка заголовка с кнопками. Окно теперь можно перемещать по экрану, «ухватив» за заголовок, масштабировать (изменять размер), «взяв» за бок или за угол, максимизировать, минимизировать или закрыть, нажав соответствующую кнопку. Спрашивается, что еще можно делать с окном?

Рисунок 2.5. Оконное меню Enlightenment

Оконное меню Enlightenment

Вопрос не праздный. Нажав на левую кнопку в заголовке, получаем неожиданно разнообразное меню таких действий (рис. 2.5). Оказывается, его можно еще уничтожить (Annihilate), поднять/опустить (Raise/Lower), оттенить/растенить (Shade/Unshade) приклеить/отклеить (Stick/Unstick) и выполнить еще массу действий, для которых потребовались отдельные меню. Набор этих действий зависит от конкретного менеджера окон (и Enlightenment — один из самых богатых возможностями), а то, какие из них выведены в строку заголовка отдельными кнопками — от того, как он настроен (пользователем или по умолчанию).

Базовая (а также расширенная) функциональность оконных менеджеров доступна пользователю прежде всего за счет введения в интерфейс так называемых виджетов (от англ. widgets, сокращение от window gadgets, «оконные приспособления»). Виджеты — это рамки, кнопки, меню и пр., которые служат «органами управления» окна. Технически (в терминах оконной системы X) виджеты представляют собой отдельные окна, примыкающие к окну прикладной программы и, как правило, перемещающиеся вместе с ним.

Рисунок 2.6. Виджеты

Виджеты

Обрамление окна обычно составляют следующие элементы:

Рамка, окружающая окно

При «буксировке» рамки мышью окно изменяет свой размер. Иногда для изменения размера окна предназначены только выделенные «уголки» рамки, представляющие собой отдельные виджеты.

Полоса заголовка

Часто совпадает с одной из (обычно, верхней) сторон рамки. В полосе заголовка может содержаться название программы или запустившая программу команда, а также другая информация, специфичная для окна. При «буксировке» полосы заголовка перемещается все окно. Со «щелчками» различными кнопками мыши на полосе заголовка также могут быть связаны различные действия по управлению окнами.

Кнопки управления окном

Часто вынесенные на полосу заголовка или в другое место рамки кнопки позволяют выполнить с ним такие действия, как закрытие (часто сопровождающееся выходом из программы, открывшей окно), максимизация (разворачивание окна на весь экран), минимизация/сворачивание, вызов меню управления окном, которое может содержать весьма обширный репертуар других действий.

Детали реализации обрамления окна могут быть весьма различными в зависимости от конкретного оконного менеджера и его настроек.

Откуда берутся такие ресурсы, как виджет, их декор и способ поведения? Конечно, менеджер окон может содержать их в себе. Но такой подход не очень характерен для открытых систем, одним из принципов разработки которых является компонентность. Поэтому виджеты и их функции обычно объединяются в стандартные библиотеки (toolkits), которые могут быть использованы множеством различных программ. Большинство развитых менеджеров окон, менеджеров рабочего стола и разработанных специально для них приложений можно сгруппировать по библиотекам виджетов, с опорой на которые они разработаны.

С точки зрения пользователя виджеты, составляющие обрамление окна, часто воспринимаются как его часть. Однако не следует забывать, что внутри окна (содержимым которого управляет уже прикладная программа, а не менеджер окон) зачастую тоже есть свои виджеты: кнопки, полосы прокрутки, переключатели, меню и т. п. В общем случае, используемые оконным менеджером и прикладной программой библиотеки виджетов могут и не совпадать.

Собственно, управление окнами — основная функция оконного менеджера, и на этом его функциональность может и заканчиваться. Однако большинство из них выполняют по крайней мере еще одну функцию.

Рисунок 2.7. Пейджер

Пейджер

Вы уже обратили внимание на то, что при запуске Enlightenment на экране появилось еще одно окно. Это так называемый пейджер (pager), на рис. 2.7 он изображен крупным планом. На пейджере представлена миниатюрная копия экрана, обновляющаяся в режиме реального времени, причем, если подвести курсор к изображению отдельного окна, оно увеличивается и рядом высвечивается название приложения, запущенного в нем. Но почему экран занимает только четверть окна пейджера? Потому что оконный менеджер позволяет оперировать «виртуальным» столом (от англ. virtual desktop, также рабочим столом), по размеру превышающим физический экран, а пейджер — одно из средств перемещения физического экрана по рабочему столу. Enlightenment позволяет создавать до 64 экранов на рабочем столе.

Менеджер окон, который помимо управления окнами обладает рядом дополнительных функций, может использоваться в качестве операционной графической среды пользователя, предоставляющей полный спектр возможностей для параллельной работы с несколькими задачами. Наиболее часто такими дополнительными функциями являются следующие:

Минимизация/сворачивание окон и управление свернутыми окнами

Работа на экране, «захламленном» десятком различных окон, может быть дискомфортной, и крайне полезна возможность свернуть (минимизировать) окно со временно неиспользуемой программой. Для того, чтобы средствами графической среды можно было окно затем развернуть, оно и в свернутом состоянии должно каким-то образом отображаться. Существует несколько относительно распространенных способов отображения свернутых окон. Например, «на столе» может оставаться полоса заголовка свернутого окна, по щелчку на которой оно вновь разворачивается. Свернутым окнам могут соответствовать пиктограммы (иконки, значки) на поверхности рабочего стола или в специально отведенном для этого окне (панели управления). Свернутые окна могут отображаться как пункты общего или специального меню (см. ниже).

Управление несколькими рабочими столами

Практика показывает, что для многих продвинутых пользователей, которые осваивают открытые системы, уже имея опыт работы в характерных для ПК альтернативных системах, именно возможность работать на нескольких рабочих столах оказывается решающим плюсом оконной системы X. Действительно, переключение между виртуальными рабочими столами позволяет организовать комфортную работу со множеством программ даже на мониторах с относительно низким разрешением (1024х728, 800х600) и физическими размерами (17, 15-дюймовыми). В иных условиях комфортность работы существенно снизилась бы, или настоятельной необходимостью стало бы приобретение более крупного и емкого монитора (что зачастую влечет за собой необходимость смены графической карты и прочих недешевых мероприятий). Все современные оконные менеджеры поддерживают виртуальные рабочие столы, правда называются они везде по-разному: столы, рабочие области или экраны. До предела (чтобы не сказать, до абсурда) эта функциональность развита в оконном менеджере Enlightenment, который позволяет организовать до 64 экранов на рабочем столе, при этом рабочих столов также может быть более одного (точнее, до 32). Трудно представить, зачем может понадобиться две тысячи с лишним отдельных экранов (как правило, четырех экранов хватает с избытком для любых практических задач), однако возможности приема демонстрируются этим в полный рост.

Быстрый запуск команд

Возможность быстрого запуска предуготовленных команд обычно ассоциируется с общим меню (главным меню), вызываемым щелчком мыши на особом виджете, не связанном с прикладными окнами, или в свободной от прикладных окон области экрана.

Настройка внешего вида и поведения среды

Поведение — реакция отдельных виджетов на операции с ними, модель фокусировки (способ переключения активного в данный момент окна, с которым связан ввод с клавиатуры и мыши) и т. п. Поведение и внешний вид оформления окон, а также наличие на экране общих виджетов, не связанных с конкретными прикладными окнами, обои (цвет фона или изображение в корневом окне) и т. п. могут варьировать в очень широких пределах. Иногда возможности такой настройки считают некими «архитектурными излишествами», однако более взвешенной является точка зрения, согласно которой в хорошем визуальном дизайне (так же, как и в хорошей архитектуре) ничто не является излишеством. В частности, в школе программы эксплуатируются на широком спектре оборудования с весьма разными характеристиками и разного качества, причем используются они широким кругом людей с различными психофизическими особенностями, как в пределах нормы, так и связанных со здоровьем, и игнорировать возможности настройки нельзя даже уже исходя из гигиенических соображений.

Рисунок 2.8. Меню настройки Enlightenment

Меню настройки Enlightenment

Пример возможностей настройки менеджера окон дает тот же Enlightenment. Его меню настройки можно увидеть, щелкнув правой кнопкой мыши на фоне экрана (рис. 2.8). Исследовав возможности настройки, можно обнаружить, что сказанное выше о способах работы с этим менеджером окон весьма условно, потому что поменять можно буквально все, от декора виджетов до количества и функций элементов оформления окон и их реакции на различные действия.

Лишь один пример: сколько способов визуализировать перемещение окна вы знаете? Разработчики Enlightenment придумали целых шесть, включая фантастический «полупрозрачный». Настройки и расширения Enlightenment можно объединять в темы (англ. themes) и обмениваться ими.

Выше при характеристике тех или иных (предположительно, общих) характеристик оконных менеджеров чаще обычного употреблялись слова «обычно», «как правило», «может» и т. п. Это связано с чрезвычайным разнообразием решений на базе распространенных оконных менеджеров. Ниже самые распространенные из них характеризуются более подробно и определенно.

Оконные менеджеры BlackBox и FluxBox

BlackBox — один из самых компактных и быстродействующих оконных менеджеров. Он позволяет эффективно организовать работу на рабочем столе, не «захламляя» его ненужными ссылками и не расходуя экранное пространство на отображение громоздких элементов оформления.

Рисунок 2.9. Оконный менеджер BlackBox

Оконный менеджер BlackBox

Наряду с базовой функциональностью, BlackBox предоставляет (факультативно) панель, содержащую кнопки переключения между рабочими столами (по умолчанию их четыре) и заголовки открытых окон. Общее меню вызывается щелчком правой кнопкой мыши на свободном от окон месте рабочего стола. Меню (или любое из вложенных в него меню) щелчком по заголовку может быть превращено в окно, остающееся на экране до явного его закрытия щелчком на соответствующей кнопке.

По умолчанию на полосе заголовка каждого окна присутствуют кнопки сворачивания (сворачивание можно выполнить также двойным щелчком на самом заголовке), максимизации и закрытия окна. Свернутое окно присутствует на экране в виде полосы заголовка, развернуть его можно повторным двойным щелчком на полосе заголовка или из меню Workspaces (рабочие области), доступного по щелчку средней кнопкой мыши на свободном от окон месте рабочего стола. Это же меню позволяет перейти на другой стол, добавить или удалить стол из рабочего пространства.

BlackBox поддерживает различные модели фокусировки ввода. Фокусировка по щелчку мыши (от англ. click to focus) позволяет реализовать стиль работы, привычный для пользователей KDE или Microsoft Windows: окно становится активным (принимающим текущий ввод с клавиатуры и от мыши) после щелчка на нем. Активное окно автоматически становится верхним (видимым полностью, даже если оно частично перекрывается с другими окнами). Небрежная фокусировка (от англ. sloppy focus) предполагает активизацию окна при попадании на него курсора мыши (окно при этом не «всплывает» автоматически наверх).

Наряду с панелью и конвертируемыми в дополнительные окна-панели меню, BlackBox реализует еще один автономный виджет — так называемую щель (англ. slit). Щель располагается на краю видимого экрана и может содержать маленькие (без обрамлений) окна специализированных программ (их существует около десяти), индицирующих какие-либо состояния среды или позволяющих быстро выполнить часто исполняемые действия.

На основе BlackBox созданы два более развитых оконных менеджера — OpenBox и более популярный FluxBox.

Внешний вид BlackBox, FluxBox и OpenBox легко настраивается с помощью механизма тем рабочих столов.

Оконный менеджер WindowMaker

WindowMaker (WM) — это свободная реализация (в рамках проекта GNUStep) концепций NextSTEP — первой получившей более или менее широкую известность универсальной графической среды пользователя. За недоступностью оригинальной NextSTEP для современных платформ, познакомиться с WM полезно и поучительно вне зависимости от того, собираетесь ли вы с ним работать. Это позволит увидеть исходную точку развития графических сред и оценить продуктивность (или непродуктивность) того, с чем эти идеи стали ассоциироваться со временем.

Рисунок 2.10. Оконный менеджер WindowMaker

Оконный менеджер WindowMaker

Основным автономным виджетом WM, как и NextSTEP, является пирс прикладных программ, представленный при запуске пиктограммой со скрепкой. При запуске любой корректной (с точки зрения WM), а также некоторых некорректных программ, кроме ее окна на экране появляется ее пиктограмма. Если «пришвартовать» эту пиктограмму к пирсу, она там и останется, позволяя запускать эту программу вновь и вновь простым щелчком по ней — это разработанный для NextSTEP интегрирующий интерфейс.

WM позволяет работать с несколькими рабочими столами (переключение по умолчанию при помощи клавиш Alt-n или через меню, доступное по щелчку правой кнопкой мыши на свободном месте рабочего стола). WM очень гибко настраивается, как в отношении внешнего вида, так и в отношении поведения, причем большая часть настроек доступна из программы Wprefs.app, запускаемой по щелчку на пиктограмме с изображением ступеньки.

Оконный менеджер IceWM

IceWM — простой оконный менеджер, его очень часто выбирают пользователи, переходящие с Microsoft Windows или OS/2, поскольку он достаточно точно повторяет основные черты привычной для них графической рабочей среды.

Рисунок 2.11. Оконный менеджер IceWM

Оконный менеджер IceWM

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

Гном

Рисунок 2.12. Рис. 2-12

Рис. 2-12

Гном (GNOME, GNU Network Object Model Environment — «Среда ГНУ, основанная на модели сетевых объектов», но также и «Образцовая среда для сетевых объектов ГНУ») — один из самых амбициозных и масштабных проектов в программистском сообществе.

Кроме реализации функционально полной графической среды (возможно, уместнее говорить о сенсуальных средах, учитывая то, что звук стал их полноправной частью), Гном претендует на то, чтобы полностью реализовать спецификации промышленной платформы сетевого взаимодействия CORBA и полностью абстрагировать слой менеджера рабочего стола (или графической среды) от низлежащего слоя управления окнами (менеджера окон).

Гном поддерживает ряд оконных менеджеров, среди которых: Sawfish (оконный менеджер по умолчанию), Enlightenment, IceWM, WindowMaker, AfterStep и FVWM2, совместимые с GNOME, впрочем, в разной степени.

Сегодняшняя версия Гном (GNOME 2.4) — полноценная интегрированная среда, включающая реализацию повседневно необходимых функций и позволяющая использовать сторонние решения для реализации функциональности, которая в ней отсутствует.

Гном использует один из самых развитых интерфейсных пакетов GTK+, реализованный для разных платформ. Над ним надстраивается масса компонентов и библиотек, обеспечивающих сетевую функциональность, интерфейсы к различным языкам программирования, работу со звуком через механизмы ОС и пр. Сам Гном стремится оставаться мобильным и доступным во всех открытых системах. Он стабильно работает в ГНУ/Линукс, BSD, AIX и Solaris; последнее обстоятельство способствовало поддержке разработки Гном, которую оказывает Sun Microsystems через созданный в 2001 г. году «Фонд Гном», среди учредителей которого также крупнейшие поставщики свободных ОС.

С пользовательской точки зрения Гном предстает как набор базовых компонентов интерфейса и аплетов, утилит и прикладных программ. К базовым компонентам относятся менеджер файлов и поверхности стола Наутилус (Nautilus), панели управления и меню GNOME Panel и центр управления (Gnome Control Center).

Менеджер файлов Nautilus позволяет отображать содержимое файлов и каталогов в окнах и выполнять над файлами обычные действия (удаление, переименование, копирование и перемещение и т. п.), а также осуществлять предварительный просмотр многих типов данных. Nautilus эффектен, но работа с ним не более эффективна, чем с прочими браузерами файлов, включаемыми обычно в графические среды (менеджер файлов CDE или Microsoft Windows Explorer).

Помимо отображения содержимого каталогов в окнах, Nautilus также может отображать один из каталогов на поверхности рабочего стола: размещенные на нем иконки как бы приклеены к монитору, и при смене текущего экрана остаются на том же месте относительно наблюдателя (так же, кстати, ведут себя и открытые окна, если их «приклеить»).

Поддерживается широкий спектр операций переноса мышью (drag'n'drop), причем «перетаскивать» можно не только объекты (файлы, пункты меню и т. п.), но и некоторые их свойства: так, можно «взять цвет» в окне выбора цвета и перенести его на панель, которая воспримет его. Есть даже операции, позволяющие назначить один объект свойством другого: например, если на панель «перетащить» не цвет, а файл с картинкой, последняя станет ее фоном. Переносить файлы между окнами Nautilus, на рабочий стол и панели можно практически без ограничений.

Уже упомянутые панели являются, наряду с менеджером файлов, важнейшей составной частью интерфейса Гном. Панелей может быть неограниченное количество. Панель может быть двух типов: панель-меню (menu panel) и объектная панель (object panel). Первая из них содержит пункты меню и может содержать пиктограммы, а вторая — только пиктограммы. Последняя может быть краевой (edge), выравненной (aligned), скользящей (sliding) или плавающей (floating), но это скорее свойство панели (которое можно менять «на ходу»), определяющее особенности ее поведения, чем тип.

Внешний вид и поведение панелей является в высшей степени конфигурируемым. Пользователь может задавать как глобальные предпочтения (анимация движения панелей, отображение панельных объектов и пр.), так и индивидуальные предпочтения для каждой из них (ее тип и положение на экране, ширина, возможность автосокрытия и принудительной минимизации, цвет и фоновое изображение и т. п.) Разумеется, пользователь может наполнять панели теми объектами, которые ему нужны.

На панелях могут присутствовать объекты пяти типов:

  • Аплет (applet, «приложеньице») — интересный тип панельного объекта, демонстрирующий то, что он не обязан быть представлен статической картинкой. Это программа, места в панели которой достаточно, чтобы отображать какую-нибудь полезную (или забавную) информацию или даже принимать клавиатурный и/или координатный ввод. С Гном поставляется масса аплетов, отображающих всякую полезную информацию (состояние ресурсов и статус сети, например) или позволяющих осуществить нетривиальные действия (например, mini commander, позволяющее набрать команду, не запуская терминала). Важными аплетами являются путеводитель по столу (Desktop Guide) и список задач (Task List), позволяющие переключаться между виртуальными экранами и активизировать окна запущенных программ, соответственно.

  • Пускатель (launcher) ассоциирован с приложением или командой, которые исполняются по щелчку на его пиктограмме в панели.

  • Выдвижной ящик (drawer) — это кнопка, открывающая другую панель, перпендикулярно первой — некий аналог подменю в меню, который можно наполнить всевозможными аплетами.

  • Специальные объекты — это те же аплеты, но выполняющие функции, которые другими средствами «достать» почему-либо нельзя (запереть экран, выйти из Гном или запустить программу «вручную»). В качестве специальных объектов исполняются и программы, которые не были написаны специально для Гном, но могут, тем не менее, осуществлять вывод в панель — поглощенные программы (swallowed applications).

  • Наконец, объект-меню раскрывает меню.

За работу системы меню, как и за работу панелей, отвечает компонент GNOME Panel, и это не случайно: разница между панелью и меню в большей степени декоративная, чем сущностная. Любое меню можно зафиксировать на экране, и оно превратится в подобие панели-меню (только вертикальное, а не горизонтальное, и с меньшими возможностями настройки).

У Гном нет единой иерархии меню: кроме главного, вызываемого объектом-меню с гномьей лапой (оно же, когда вызывается щелчком правой кнопки на фоне или нажатием клавиши, почему-то называется глобальным (global)), пользователь может создавать обычные (normal) меню, связанные с объектами-меню на панелях.

Меню настраиваются примерно так же, как и панели: пользователь может добавлять, менять и удалять пункты, создавать подменю и т. п. При этом создаваемые обычные меню изначально пусты, а главное/глобальное заполняется при установке всем, что Гном найдет в системе, и пользователю остается только убрать лишнее и переставить пункты в соответствии со своими предпочтениями.

Для настройки различных аспектов функционирования системы предназначен Центр управления, представляющий собой набор управляющих аплетов (каплетов, от англ. capplets, control applets), связанных с разными компонентами и прикладными программами.

Одни из них позволяют менять параметры рабочего стола и облик приложений (включая использование тем), другие — настраивать мультимедиа, третьи — управлять свойствами клавиатуры и мыши, и т. д.

Важным «каплетом» является менеджер т. н. драйверов документов (Document Handlers), устанавливающий соответствие между типом файла или протокола и программой, выполняющей различные операции с ними. Набор каплетов является расширяемым, их можно разрабатывать не только для программ, написанных специально для Гном, но и для внешних программ.

Также постоянно расширяется набор утилит, прикладных программ и аплетов, поставляемых с Гном — вместе с программами, входящими в большинство дистрибутивов ОС, о которых Гном «в курсе», их число превышает сотню. Перечислить их здесь нет никакой возможности, но среди них есть интерфейсы для администрирования системы, средства звукозаписи и воспроизведения, сетевые утилиты, игры и многое другое.

Гном снабжен встроенной системой помощи; кроме того, его разработчиками совместно с Sun Microsystems подготовлено компактное (130 с.) руководство, доступное в разных форматах на сайте проекта. В его поставку входит система разработки графических приложений под GTK+, которая называется Glade и включает в себя специфические для Гном элементы.

Гном и большинство его компонентов соответствуют соглашениям об интернационализации и, соответственно, поддерживают работу с кириллицей, локализацию и перевод интерфейса. К сожалению, локализация Гном сильно отстает от разработки.

КДЕ

Само название КДЕ (KDE, K Desktop Environment — «Графическая среда К») — явная пародия на CDE (Common Desktop Environment — «Общая настольная среда»). CDE была последней попыткой отрасли стандартизовать графическую среду на несвободной основе, предпринятой в конце девяностых годов. Буква «K» в KDE ничего не означает.

Рисунок 2.13. Интегрированная графическая среда KDE

Интегрированная графическая среда 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] Возможностью представить их обзор в компактном виде автор обязан прежде всего своим соавторам Егору Гребневу, Сергею Иванову, Михаилу Шигорину.