четверг, 7 мая 2009 г.

Краткий обзор tiling window managers (ion3, wmii, dwm, ratpoison, musca)

Я не знаю, как нормально и просто перевести tiling wm на русский (может быть, фреймовые оконные менеджеры?), поэтому я так и буду писать: tiling wm. Если вы не знаете, что это такое вообще, то речь идет об оконных менеджерах, способ работы с которыми довольно сильно отличается от работы с привычными windows-like интерфейсами... Тогда, зачем это все нужно?

Скажу честно, мне нравиться играть с компьютером. И первый tiling-wm я поставил просто из любопытства. Кажется, это был wmii. Я его тогда не понял. "Что за идиотизм?" -- примерно так подумал я тогда... Но со временем, как-то незаметно, я "подсел" на tiling wm и теперь меня не заманишь гламурной стилизацией под vista или macos x.


Дело в том, что все tiling wm полностью или почти полностью "освобождают" пользователя от мышки. Это раз. Во-вторых -- пространство экрана используется наиболее эффективно -- оно разбито на не перекрывающиеся области -- фреймы, в которых расположены одно или несколько окон.

В третьих -- почти всегда tiling оконный менеджер означает минимализм. Который может казаться даже абсурдным, но после игр с компизом и как бывший пользователь Apple Powerbook с ответственностью заявляю -- это глоток свежего воздуха. Интерфейс хорош, когда его не замечаешь. Конечно, вы должны понимать, что это все сказано программистом. Впрочем, и Linux -- это система прежде всего для программистов. (А также всех тех, кто находится в зоне влияния программиста. :)

И все же, хватит лирики. Цель этой небольшой статьи -- кратко перечислить все те tiling wm, которые я пробовал и указать на их недостатки.

ion3

Очень похоже, что этот оконный менеджер, вместе с larswm, породил новую волну интереса к tiling wm. ion3 образец оконного менеджера с ручным (manual) tiling. Это значит, что разбивка на фреймы производится пользователем. Этот подход имеет свои сильные и слабые стороны. Очень хорошо, что можно создавать произвольные конфигурации разбиения. Плохо -- что вообще нужно это делать. (Это действительно недостаток???). ion3 поддерживает tabbing, то-есть, в одном фрейме может быть несколько окон и они будут отображены в виде закладок фрейма.



ion3 конфигурируется на скрипте lua. Что делает его очень гибким, но возможно, иногда сложным. В целом -- ion3 образец хорошего tiling wm с manual tiling и я некоторое время использовал его, но в какой-то момент немногочисленные недостатки победили и стали для меня критичными настолько, чтобы отказаться от ion3 в пользу других wm.

Итак, недостатки:

1) Довольно мутные настройки по-умолчанию. В основном это касается клавишных комбинаций. Да -- к ним можно привыкнуть, но до конца я так и не смог этого сделать. Перенастроить? Но их столько, что написание своего конфигурационного файла (вообще-то даже файлов, на lua...) превращается в нудное занятие. Попробуйте полностью перенастроить vim? Захотелось даже вспомнить fvwm... Кто знает, тот поймет.

2) Кроме того, есть какая-то общая неинтуитивность, которую сложно описать формально. Но это превращается в кошмар, когда окон слишком много и они вдруг начинают ломать, кропотливо созданную схему разделения...

3) Есть еще один нюанс, он заключается в характере (без сомнения, талантливого) автора (Tuomo Valkonen). Вы можете почитать то, что он пишет в своем "блоге". Уверяю вас, увлекательное чтиво... В общем, ion3 не входит в arch linux, в debian он является частью non-free, не смотря на открытые исходные коды... Но вообще-то, для меня это не было решающим недостатком.

wmii
Автор пытался сделать оконный менеджер, который бы вобрал в себя лучшее из существующих tiling wm. В чем-то это удалось -- довольно простой (по сравнению с ion3) manual tiling wm.

Правда, в какой-то момент автор увлекся идеями Plan 9 и сделал управление wmii через подобие файловых операций со специальными файлами, но в общем, это можно воспринимать как некую пикантность. А вот отсутствие возможности создания горизонтальных фреймов в manual tiling wm это уже странно.

И понятно, что часто это не нужно (речь идет о том, что wmii позволяет разбивать пространство экрана на столбцы, но не на строки), но если уж давать возможность управления фреймами, то давать ее полностью. Получаем странную комбинацию: неплохой в общем-то wm, но как бы "недоделанный". И явно слабее по функционалу, чем ion3. Ни то, ни се, говоря по-человечески. :)

Еще одним недостатком может служить тот факт, что интерес автора к этому wm сильно ослаб.

dwm
В какой-то момент автор wmii решил, что выбрал неверный путь и избрал новую парадигму, на сайте suckless.org можно прочитать минималистичный манифест: "Dedicated to software that sucks less". Не больше не меньше, вот они -- характеры хакеров. :) Но что это значит для нас? А то, что автор (как я понимаю) взял идею larswm и реализовал ее в виде нового динамического оконного менеджера dwm.

Идея проста: хорошо -- manual tiling wm слишком сложные? Теперь вам вообще не надо будет думать о разбиении!!! Что это значит? Это значит, что просто так заниматься раскладыванием фреймов у вас не получится. Есть понятие разбиения -- layout -- и переключившись на него, все окна сами занимают свои фреймы. Например основной layout dwm это главное окно слева (самое большое) и стек (столбец) подчиненных окон справа.



Есть layout (monocle) которые все окна максимизирует на весь экран, и есть layout (float), когда оконный менеджер ведет себя почти как обычный, позволяя произвольно перемещать окна и задавать им произвольные размеры.

Есть еще одна особенность dwm, автор поставил своей целью писать минималистское ПО, это отразилось на dwm следующим образом: конфигурация осуществляется путем правки простого .h файла и перекомпиляции. Размер кода dwm -- менее 2000 строк. Вы еще читаете этот текст? А все, оказывается, не так уж и страшно! Во первых, почти наверняка вы -- программист и компилятор уже стоит в системе. Во-вторых -- время пересборки меньше секунды. В третьих -- код настолько прост что создает ощущение тем, что вы им действительно владеете. В том смысле, что если вам что-то не нравится -- вы это просто пишите. Такой подход дал любопытный эффект -- для dwm доступно множество патчей, в числе которых -- разные схемы размещения (layouts). Вышло множество форков, например, scrot wm. Появились клоны dwm написанные на разных языках и/или библиотеках. Наверное самые известные:
xmonad -- реализация на языке haskell. (Минимализм на функциональном языке программирования? Да уж...).
awesome -- "навороченная" версия dwm.

Но на мой взгляд, все они уступают dwm в плане ясности мысли и простоты использования, при условии -- что вы -- программист.

С dwm у меня получилась сложная история, и поэтому, я остановлюсь на нем подробнее.

Запуск программ в dwm осуществляется или по горячим клавишам, или через программу dmenu. Идея dmwenu замечательна!!! Вы набираете часть названия программы, и по мере того, как вы это делаете -- количество вариантов в списке - строке постепенно сокращается. Это очень просто и страшно удобно! dmenu может использоваться и в других оконных менеджерах.

В dwm нет рабочих столов, но есть понятие тегов. Так вот эта идея и может стать тем "недостатком", который может отпугнуь пользователя. Идея рабочих столов очень привычна, и поэтому когда ты переключаешься с тега на тег и видишь, что текущий layout не изменился ты злишься и не понимаешь, зачем автор придумал такой идиотизм? Я в начале решал проблему с помощью патчей, благо они есть -- которые превращают теги в рабочие столы, но потом, я как-то просек фишку и оказалось, что dwm именно то, что он есть!

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

Отдельная история -- статусная строка. Это строка в которой кроме информации о тегах (кстати, в этой же строке dwm помечает urgent окна -- это очень удобно, например, когда приходит сообщение в pidgin вы это сразу увидите) можно вывести любую текстовую информацию. Вы можете послать туда вывод conky или своего скрипта. В прошлых версиях dwm эта информация посылалась через конвейер (dwm считывал ее из stdin). В последних версиях эта информация считывается как имя root окна. Элегантно, хоть и немного странно.

Основное достоинство dwm -- его простота и ясность идеи. Недостаток? Это отсутствие manual tiling и вы не можете разбить окна произвольно (конечно, если не считать float layout). Малое количество типов layout? Но, оказывается, после того, как мы поняли, что такое тэги -- необходимость в них отпадает. И все-таки, и все-таки иногда хочется возможности ручного разбития фреймов.

ratpoison
Хорошее название. ratpoison: Say good-bye to the rodent -- написано на сайте проекта. Первое впечатление -- это кошмар! Это по ту сторону добра и зла! Но при ближайшем рассмотрении оказывается, что это довольно интересный оконный менеджер, со своими интересными идеями.



Это manual tiling wm. И мне он показался проще ion3, но к сожалению он имеет следующие существенные недостатки:
1) Отсутствует понятие как рабочих столов, так и тэгов. Вместо этого, нам предлагается использовать группы, которые означают лишь то, что разные окна находятся в списке активных окон. Без визуального подтверждения этого факта, довольно быстро начинаешь выходить из себя. Есть возможность сделать рабочие столы с помощью внешних скриптов, но.... Это страшно -- вызывать внешню программу каждый раз, когда я переключаю рабочий стол?

2) Отсутствует возможность работать с окнами традиционно. Да -- это иногда нужно. Не так часто -- но нужно. Нам предлагается запускать в таких случаях из ratpoison другой wm -- временно. Это ужасно. :)

3) Мышкой нельзя сделать вообще ничего. А все-таки, иногда хочется и мышкой повозить. :)

Автор развивает свои идеи в stumpwm -- оконном менеджере написанном на lisp. Поэтому не могу сказать ничего, так как не являюсь адептом этого языка.

musca
Новая надежда... Я следил за musca с момента первых версий. Автор вдохновился ratpoison и dwm и сделал -- гибрид! Удивительный эффект -- довольно простой и все еще легкий (менее 3000 строк кода) manual tiling wm.



Я даже немного вовлекся в процесс разработки и посылал автору патчи и багфиксы... Автор плодил версии с невероятной скоростью -- версия в день или два. И каждый раз было что-то приятное, но качество кода было непредсказуемым. В начале я мирился с ошибками, но когда этот wm упал во время моей работы второй раз я понял, что с меня хватит.

Внешне, практически без архитектурных недостатков, но внутренне -- все еще полный скрытых багов и отвечающий неопределённым поведением в не тестируемых ситуациях. Автор в каждой новой версии вводит какие-то новые фичи, часто ломая старое... В общем, противоречивые чувства.

Надежда галактики...
Итак, после неудачного опыта с musca я безуспешно пробовал вернуться к ion3 и wmii. А затем, неожиданно, снова открыл для себя dwm. На данный момент это тот wm которому я могу доверять. В тоже время он не идеален... Что бы я хотел? Я бы хотел стабильную musca с функциями dwm. Тогда бы это был идеальный tiling wm. Пока же я успешно борюсь с позывами написать "еще один" wm. :) Я думаю -- это болезнь... :)

4 комментария:

ixpict комментирует...

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

XoXa комментирует...

Попал сюда, как не странно в поисках спойлера к тому, как пробраться через турникеты в "Квантовом коте" (к слову сказать, так еще и не решил как пройти :)
А теперь по сути, -- добавлю еще немного информации к Вашему обзору. Полюбопытствуйте еще на один tilinh wm -- echinus (http://www.rootshell.be/~polachok/code/).

gl00my комментирует...

2XoXa:
hint: куртки в столовой.
hint2: куртки нужно менять незаметно. снял свою -- погулял -- одел чужую... итд

Тормоз комментирует...

Спасибо, классная статья.
Недавно появился ещё i3, очень перспективный WM, IMHO. Но у меня подвесил всю систему, когда я попытался открыть vim через dmenu.

Архив блога