Безоконный менеджер
Автор: Илья Voyager Щуров
Опубликовано: 05 сентября 2005 года
Источник: "Компьютерра"
В компьютерном мире есть люди, буквально помешанные на эффективности своей работы. Они не любят мышь, считая ее неудобным инструментом, отнимающим кучу времени. Их бросает в дрожь при виде человека, тратящего десятки секунд на поиск нужной программы в необъятном меню "Пуск". Они с рождения печатают вслепую и не понимают, почему кто-то этого еще не умеет. Даже если они начинают работать под Windows, то рано или поздно переходят на Linux.
Окна и мыши
Современные интерфейсы, основанные на концепции WIMP (Window, Icon, Menu, Pointing device), рассчитаны в первую очередь на простоту освоения. Трудно спорить с тем, что научиться кликать мышью по кнопкам и выбирать пункты меню значительно проще, чем запоминать сотни команд со всеми их параметрами и опциями. Cам по себе WIMP еще не залог "интуитивности", но если разработчик уделил дизайну интерфейса хотя бы толику времени, то общение даже со сложными программами становится более или менее простым. WIMP используется как в Windows, так и в большинстве графических сред Linux (Gnome, KDE и т. д.). И, пожалуй, надо отдать этой концепции должное - если бы не она, компьютер еще долго был бы "черным ящиком", работать с которым могли бы только специалисты.
Впрочем, многие специалисты таким положением дел как раз и недовольны. Они готовы читать длинные инструкции и разбираться во внутренней логике программ - и они знают, что затраченные усилия в конце концов окупятся. Их оружие - клавиатура, их интерфейс - командная строка, их софт - консольные приложения.
Однако работа только в текстовом режиме сродни монашеству - ни фотографий, ни сайтов с картинками, ни видео. Администрировать веб-сервер еще можно, но не жить же в таких спартанских условиях постоянно! Волей-неволей приходится перебираться под графические интерфейсы - а они зачастую плохо совместимы с клавиатурным подходом к реальности.
Взять, например, первое понятие из четверки WIMP. Как известно, "окно" - это такой прямоугольник на экране, в котором "обитает" программа. Его можно передвинуть, свернуть, развернуть, потянуть за рамку и изменить размер - все это делается мышкой. С клавиатуры тоже можно - но чисто теоретически. Практически же - неудобно.
Даже если забыть про клавиатуру, окно как таковое не кажется слишком удачным изобретением. Очень уж любят эти бестии рассаживаться по экрану в полном беспорядке, загораживать друг друга, порой занимать все доступное пространство, а иногда, напротив, оставлять нетронутой огромную экранную площадь. Забота по их упорядочиванию ложится на плечи пользователя и отвлекает от главного - решения текущей задачи. Мы, конечно, к этому уже привыкли и без окон почти не представляем графический интерфейс - но все же, неужели ничего лучше не придумано?
Погонщики окон
Пользователи одной очень распространенной ОС, пожалуй, и не знают, что есть такой тип приложений, как менеджер окон (window manager). Действительно, в Windows он намертво вшит в систему, так что большой свободы выбора здесь нет. Все окошки выглядят и ведут себя совершенно одинаково - если, конечно, само приложение не пытается с этим бороться (как WinAMP и другие программы с изменяемым интерфейсом). В Линуксе ситуация обратная - в соответствии с "путем Unix" (unix way) менеджер окон является одним из кирпичиков, из которых собирается ОС. Его можно вытащить (система не рухнет), можно поставить другой, можно написать свой. Например, такой, какой нужен именно вам.
Большинство оконных менеджеров довольно близки по функциональности, слегка отличаясь способами настройки, поведением, оформлением и скоростью работы. Выбор из них - скорее вопрос привычек и вкуса. Тем удивительнее было встретить среди представителей этого вида нечто совершенно новое. Речь идет о менеджере под названием Ion, который его автор позиционирует как поиск "годного к употреблению" графического интерфейса.1
Наткнулся я на эту разработку как раз в тот момент, когда меня постигло разочарование. Я полностью разочаровался в среде Gnome, случайно обнаружив, что эмулятор терминала xterm под минималистичным оконным менеджером Fluxbox на машине уровня Pentium 250 запускается быстрее, чем тяжеловесный gnome-terminal под "родным" для него Gnome2 на ноутбуке с гигагерцовым Pentium M. Пришлось искать альтернативу - тут-то на глаза и попался Ion. Пройти мимо было невозможно. Описание было столь заманчивым, что даже отсутствие rpm-пакета и необходимость собирать его из исходников меня не остановили. Пришлось скачать пару дополнительных программ и отредактировать несколько конфигурационных файлов, однако затем все собралось, и - после заветного make install - я оказался в совершенно необычной среде (рис. 1)3.
Рис. 1
Рамки и закладки
Как и положено программе, рассчитанной на эффективность, а не на пресловутую интуитивную понятность, Ion встретил меня своим man’ом - краткой инструкцией по эксплуатации. Из нее стало известно, например, что окон в менеджере нет (по крайней мере, таких, к которым все привыкли). Честно говоря, в нем еще много чего нет. Например, нет кнопки "Пуск" или ее аналога, нет иконок на рабочем столе, нет трея (по крайней мере, по умолчанию), нет панели задач, нет часиков в углу экрана… Ion - это "чистый" window manager, без лишних наворотов.
Главный принцип работы - разделяй, объединяй и властвуй. Экран разбивается на несколько частей, именуемых рамками, или фреймами (frame), в которых и запускаются программы. В одном фрейме можно запустить сколько угодно приложений, но отображаться в каждый момент времени будет только одно "окно", развернутое на весь размер рамки, а от остальных останутся лишь закладки на заголовке, - аналогично поступают Firefox и Opera с отдельными веб-страницами. Естественно, фреймы не могут пересекаться и накладываться друг на друга, зато их размеры меняются согласованно, можно разделить текущий фрейм на два или удалить, склеив с другим, переместить окно из одного в другой и т. д. Все операции доступны с клавиатуры (еще бы!), но и мышка не отправлена на свалку истории - несмотря на отсутствие привычных трех кнопок в углу окна, правый клик вызывает контекстное меню, в котором можно поискать нужную функцию.
Конечно, в Ion’е есть понятие рабочего места (workspace). Юниксоидам не нужно объяснять, что это такое, а вот Windows-пользователи вряд ли знакомы с этим полезным объектом. Грубо говоря, каждый workspace - это просто независимый "стол", на котором размещаются окна. Например, на одном рабочем месте можно поместить браузер и ICQ-клиент и назвать его "Сеть", на другом - заниматься разработкой программ, на третьем - проверять почту, переключаясь между ними в случае необходимости. Для Ion’а обычный workspace - это что-то вроде набора фреймов со своими приложениями, и не более того.
Несмотря на логичность предлагаемого интерфейса, не всем программам нравится жить в его жестких рамках (в прямом и переносном смысле). Если браузер или текстовый процессор LyX, в котором пишутся эти строки, совсем не против подобной философии, то, например, четыре окошка графического редактора Gimp (палитра, выбор цвета, список слоев и само редактируемое изображение), помещенные в один фрейм, смотрятся довольно забавно: чтобы выбрать, например, зеленую кисть заданного размера, нужно три или четыре раза переключаться между табами. Для борьбы с подобными программами в Ion’е предусмотрен специальный тип рабочего места - WFloatWS, в котором присутствуют уже классические "плавающие" окна, поддерживающие, однако, табы (рис. 2).
Рис. 2
Есть еще несколько "вкусностей", которые придутся по душе любителям клавиатурных интерфейсов. В первую очередь, встроенная командная строка (query, строка запроса), появляющаяся в низу текущего фрейма по нажатию F3. Конечно, это не полноценный shell, но она поддерживает дополнение с помощью кнопки Tab и вполне подходит для быстрого запуска нужного приложения. Столь же легко можно открыть произвольный man, подключиться к удаленной машине по ssh, открыть или отредактировать файл - причем автодополнение каждый раз будет работать наиболее разумным образом, предлагая выбирать только из подходящих для текущей операции объектов.
Ну а если использование одной лишь командной строки вам наскучило, можно нажать F12 и обнаружить меню, знакомое по другим менеджерам: выход и перезагрузка Ion’а, смена оформления, запуск терминала - привычные пункты здесь есть, а остальные можно добавить самостоятельно. Как именно? Об этом ниже.
Lua и доки
Если бы в Ion’е были только фреймы, о нем, наверное, все равно стоило бы написать - но вряд ли в нем можно было бы работать. Однако это далеко не все возможности, скрывающиеся за неказистым внешним видом и статусом "экспериментального проекта". Какие именно возможности? Да какие хотите! Как и многие другие свободные программы, Ion является не просто оконным менеджером, а эдаким конструктором по сборке оконных менеджеров. По тому же пути идет браузер Firefox, многие текстовые редакторы (Vim, Jed, Emacs), да и сам Linux порой называют "надстройкой над компилятором gcc" (в шутку, конечно). В качестве языка разработки Ion использует Lua4 (www.lua.org) - высокоуровневый объектно-ориентированный интерпретируемый язык, с которым я был знаком по его Palm-инкарнации Plua.5
В простейшем случае Lua используется для базовой настройки буквально всего, что только можно настроить. Скажем, привязка горячих клавиш (keybinding) управляется конфигурационным файлом ion-bindings.lua, представляющим собой просто кусок lua-программы. Если вы хотите изменить стандартную "распальцовку" или добавить новые функции, вам именно сюда. Поначалу кажется, что синтаксис сложнее, чем обычно бывает в файлах настройки, но после нескольких экспериментов и анализа существующей конфигурации его правка превращается в сплошное удовольствие - особенно когда начинаешь понимать, какие возможности здесь открываются.6
Аналогичным образом, с помощью правки настроечных lua-файлов, можно изменять как поведение, так и внешний вид Ion’а. Скажем, мне пришлось сменить шрифты в выбранной теме оформления, чтобы они поддерживали Юникод и отображали русские буквы в заголовках окон, командных строках и меню.7
Более того: помимо правки существующих элементов, можно создавать свои. Например, можно отредактировать системное меню, вызываемое по F12, а можно добавить свое собственное - и привязать его к какой-нибудь другой кнопке. Или сделать свою командную строку - с нужными вам элементами автодополнения. Или вот, допустим, захотелось вам иметь собственную консоль, по умолчанию не видимую, вызываемую на белый свет с помощью горячей клавиши, не привязанную ни к каким фреймам и не зависящую от текущего workspace. Думаете, придется править низкоуровневый исходный код Ion’а? А вот и нет! Все гораздо проще: в системе есть модуль dock, позволяющий размещать в фиксированных местах экрана окна произвольных программ (в частности, именно через него делается местный аналог трея). Достаточно создать такой "док", поместить в него терминал, а потом организовать его отображение/скрытие и передачу фокуса. Соответствующий код займет буквально десяток строчек, а вы получите в распоряжение все, о чем мечтали.
Открытое будущее
Безусловно, Ion не является заменой менеджерам "общего пользования" - по крайней мере, на текущий момент, - и я не думаю, что все читатели статьи побегут ставить Linux только ради того, чтобы перейти на этот диковинный интерфейс или попрактиковаться в программировании на Lua. Однако мне хотелось бы показать, что в мире существуют альтернативные точки зрения даже на такой, казалось бы, устоявшийся программный стереотип, как оконные системы. Порой эти альтернативы оказываются более удобными, чем общепринятые решения, - и кто знает, какими интерфейсами будут пользоваться наши потомки?
Клавиатурно-совместимый софт
Менеджер окон
Конечно, Ion не одинок в своих необычных взглядах на оконные системы. Помимо него существует еще несколько близких по духу разработок, отличающихся степенью минималистичности, настраиваемости и специфическими функциями (их список можно найти на странице Ion’а). Пожалуй, отдельного упоминания заслуживает WMI (wmi.modprobe.de) - вторая версия (или поколение, в соответствии с терминологией разработчиков) этого менеджера выглядит весьма солидно и красиво. Здесь несколько другая философия - в частности, авторы проекта считают неправильным статическое разбиение экрана на фреймы. Рабочее место в WMI динамично - оно пытается подстроиться под текущую ситуацию, каждый раз располагая окна оптимальным образом - в соответствии с несколькими возможными алгоритмами. Такой вот прогрессивный и интересный подход.
Браузер
Mozilla Firefox, в общем-то, нормально управляется с клавиатуры. А после некоторой настройки (в частности, установки параметра accessibility.tabfocus в значение "3" для ускорения доступа к элементам веб-форм) - так и вообще все было бы хорошо, если б не один неприятный баг: в Gtk-версии при включенной неанглийской раскладке перестают работать многие горячие клавиши. Отчасти эта проблема решается установкой расширения keyconfig, с помощью которого можно задействовать не зависящие от раскладки кнопки (например, F1-F12), но более радикального решения вроде бы пока не существует. Также советую обратить внимание на добавочку Hit-a-Hint, позволяющую перейти по нужной ссылке, просто набрав ее номер, - очень удобное и оригинальное решение. Для любителей минимализма подойдет conkeror (не путать с konqueror) - по сути, это полностью переписанный интерфейс Firefox’а, лишенный всех изысков, который делает из браузера что-то вроде текстового редактора Emacs (наверное, я бы стал пользоваться именно им, если бы не указанная проблема с раскладками). Ну а если вас не смущает использование проприетарного софта - кажется, у Оpera никогда никаких проблем с клавиатурным управлением не было, и вообще эта штука рассчитана на эффективную работу.
Почтовый клиент
В принципе, Mozilla Thunderbird можно использовать, не обращаясь к мышке, - но утверждать, что это очень удобно, я не берусь. Гораздо больше для таких целей подходят быстрые и приятные консольные почтовые клиенты pine и mutt. Первый из них, наверное, более интуитивен, зато второй имеет огромное количество настроек, что безусловно придется по душе любителям "тюнингованного софта".
Файловый менеджер
Наверное, все-таки нет более удобного клавиатурного инструмента для работы с файлами и запуска программ, чем командная оболочка (обычный bash или что-нибудь более продвинутое, например zsh). Впрочем, сторонники синих панелек могут воспользоваться Midnight Commander’ом - я и сам его запускаю иногда, но использую в основном в качестве ftp/scp-клиента.
Мультимедиа
Есть интересная разработка под названием mpd - медиаплейер, сделанный по клиент-серверной технологии. Собственно проигрыванием музыки и работой с плейлистами занимается серверная часть, не имеющая никакого человеческого интерфейса, а управление осуществляется с помощью одного из десятка клиентов - есть консольный ncmpc, есть еще более консольный mpc, есть клиент, написанный на PHP, и многие другие.
Прелесть в том, что после совершения необходимых действий клиент можно закрыть - а музыка будет по-прежнему играть. Независимость серверной части от X’ов позволяет наслаждаться любимыми композициями, находясь вообще вне графического интерфейса. Ну а для проигрывания видео никто не отменял mplayer, равно как для просмотра изображений - gqview.
Эмулятор терминала
Конечно, любая консоль рассчитана в первую очередь на работу с клавиатурой. Однако отыскать подходящую "модель" было не так-то просто: gnome-terminal и konsole слишком тяжеловесны, xterm не умеет работать с красивыми шрифтами, а большинство других программ этого класса не поддерживают Юникод - "родную" кодировку установленной у меня Fedora Core. По душе пришелся проект rxvt-unicode, лишенный вышеупомянутых пороков, включающий в себя несколько "вкусностей", вроде псевдопрозрачного фона и клиент-серверной модели, и на порядок ускоряющий создание новой консоли. После некоторой настройки - приятнейшая во всех отношениях программа.
Мелкие радости
В отличие от Gnome или KDE, Ion не предоставляет готовую среду, в которой есть все необходимое для работы. Если без встроенного файлового менеджера или меню со списком установленных программ я вполне могу обойтись, то, например, без индикатора сетевой активности чувствую себя не в своей тарелке. Можно было бы запустить под Ion’ом gnome-panel и не расставаться с привычными элементами интерфейса, но вряд ли такое совмещение разнородных сред является правильным. Я пошел другим путем и установил gkrellm - очень удобный и красивый набор индикаторов, показывающих все, что только можно. С помощью дополнительной lua-настройки он был помещен в док и с тех пор всегда находится перед глазами. Ну а для проверки наличия входящей почты я использую прелестную маленькую утилитку gnubiff. Чего и вам желаю!
- Из журнала "Компьютерра"
1. iki.fi/tuomov/ion. [вернуться]
2. Gnome не является оконным менеджером, он представляет собой графическую среду, включающую помимо собственно менеджера (сейчас это metacity) множество разнообразных приложений. Но без большинства из них можно спокойно обойтись. [вернуться]
3. Статья основана на стабильной второй версии. С сайта Ion’а можно скачать также текущие "снимки" (development snapshot) с разрабатываемой третьей версии. [вернуться]
4. При этом сам Ion написан на C. [вернуться]
5. См. "КТ" #498, "Сага о найденных мегагерцах". [вернуться]
6. Не стоит редактировать "глобальные" настройки, лежащие в /usr/local/etc/ion (или другом системном каталоге - зависит от установки); гораздо правильнее скопировать нужный файл в ~/.ion2/ и редактировать его там - в противном случае вы рискуете потерять ценные скрипты при переустановке или обновлении Ion’а. [вернуться]
7. Настройка производится в файле draw.lua, а для запуска Ion’а в режиме unicode-совместимости следует использовать ключ -i18n. [вернуться]