И так, как я уже писал, так называемые менеджеры окон, к которым мы привыкли (с плавающими окнами), совершенно не оправдывают звания "менеджеров", ибо само это слово обозначает "управлять", то есть "управляющий окнами". По сути же они только создают эти самые окна, в самом лучшем случае не совсем произвольно кидают их на экран и дают пользователю функционал, позволяющий уже непосредственно управлять этими самыми окнами. То есть это не менеджеры, а "креаторы/дистроеры". ;) А вот "плиточные" же, являются уже в полной мере именно менеджерами. Ибо пользователю лишь изредко надо "подправить" что-то, что ему не совсем по вкусу.
Прочтя как-то кучу статей про это чудо, я решил попробовать как же это выглядит на практике. Опробовано было почти все (xmonad, awesome, ion, ratpoison и что-то там еще). Реально некоторое время пожил у меня только xmonad. И нравился он мне, и работал не плохо не были у него определенные минусы:
- Какого-то рожна он периодически падал. Почему - я так и не разобрался. :(
- Хотя практически все менеджеры этого типа конфигурятся через правку конфига, который есть не что иное, как кусок кода, с xmonad было пожалуй сложнее всего. И связано это в первую очередь с тем, что написано он на haskel, функциональном языке программирования, с которым я никогда не работал. И хотя было прочтено довольно много литературы, сломать свои мозги под haskel я так и не смог. :( Соответственно так и не смог довести конфиг до идеального состояния "под себя".
- Раздражало, что очень многие диалоговые окна xmonad не смотря на все мои усилия так и не хотел признавать диалоговыми и открывал как полноценное окно, на полную.
- Не смотря на все прелести haskel, xmonad все же довольно медлителен.
- все окна по умолчанию открывались на весь экран
- окна были "привязаны" к конкретным "воркспейсам", не все конечно, но "каждодневные". Например firefox - к первому, консоль - ко второму, pidgin - к третему, "почта" - 4-ому, игры - к 9-ому
- горячие клавиши были "стырены" с xmonad, ибо очень понравилось, ибо очень напоминает vim. :)
На этот раз я решил таки (уж не помню почему), еще раз попробовать awesome. И на этот раз, в отличии от предыдущего, все получилось очень хорошо. :) Но об этом по порядку...
Для начала я решил сделать свою тему. Ну тут все просто: берем стандартную (или как я, чужую, в частности sky) и меняем в ней цвета и картинки. Лично для меня самой большой сложностью было подобрать именно цвета. Но гимп помог и тут. :) Сам же конфиг очень прозрачен и пояснений не требует. Скажу лишь, что цветовую гамму я "подделывал" под гнома, ибо планировал использовать networkmanager (да, нравится он мне! хотя и не без недочетов, но в дороге довольно удобно подрубаться в wifi сетям), а нынешнее его офрмление лучше всего смотрится на такой цветовой гамме. Бакграунд был сляпан с уклоном в убунтовские рыже/коричневые тона. Кому не нравится - делайте сами лучше, если сможете, мне покатит и так. ;)
Конфиг был взят за основу дефолтный. Поколдовать с ним пришлось, хотя и не очень сильно. Вообще lua оказался довольно простым, в отличии от haskel, так что там довольно прозрачно все, хотя еще и не оптимально. ;) В паче так же видно, что я хочу еще доделать парочку вещей для удобства. :) Немного не очевидно для меня была процедура изменения дефолтного расположения окон для третьего тега, но в конце концов я нашел как это делается.
Тут нужно небольшое лирическое отступление о том, что и как называется...
Что бы понимать что и как работает в awesome, надо знать несколько терминов и принцип организации этого всего дела. Во первых надо уяснить, что при старте этот wm создает от одного до нескольких экранов. Экраны, в его понимании, это именно физические экраны. То есть мониторы подключенные к компу. Если у вас одна карта один монитор - то все просто: это будет экран 1. Если же у вас 1 видео адаптер и к нему подключено 2 монитора, то это уже 3 экрана. Ну и так далее. Что касается динамического подключения/отключения - не спрашивайте, не знаю еще. :)
Вообще в awesome есть несколько объектов:
- screen - экран, описанный выше
- client - окно запущенного клиентского приложения
- tag - опишу чуть нижу
- widget - ну собственно виджеты :) о них тоже позже, но по сути это небольшие объекты в которых мы можем что-то отображать или что-то делать
- titlebar - по сути рамка вокруг клиента. В отличии от заголовка окна в обычных wm, тут мы можем в titlebar засунуть нужные нам виджеты. Надо ли оно мне - пока не придумал, а по сему отрубил :)
- statusbar - панель в верху экрана (можно ли поставить ее в другое место пока тоже не знаю), в которые мы можем насовать нужной нам фигни соответственно сформировав нужную нам панель.
И так: у нас есть экран. Что нам надо еще? Правильно, панель. Создаем статусбар и цепляем ее к скрину. Если этого не сделать - панелью пользоваться будет нельзя! Хотя она и была создана. Вообще тут любой объект если был создан, но не был прикреплен - становится бесполезным.
Теперь у нас есть экран с панелью. Но она пуста! Фигня! Создаем теги.
Теги - чем-то напоминают обычные экраны в понимании например того же metacity или openbox и по сути являются ими, за исключением одного "но": одному и тому же приложению может быт задано несколько тегов. Соответственно в отличии от экранов openbox, где окно может быть только в одном (или во всех сразу, если оно прицеплено), тут окно мы будем видеть во всех тегах, которые на него "повешены". :) Соответственно при желании мы можем включить несколько тегов одновременно. Или выключить не нужные. Внешне же они пожалуй больше ни чем не отличаются от экранов.
Теги имеют имя (в дефолтном конфиге это цифры от 1 до 9) и layout, внешний вид. layout - по сути есть алгаритм размещения окон в данном теге. По умолчанию это:
- tail - большое "главное" окно занимает половину экрана, остальные делят поровну оставшуюся часть
- fair - половину экрана делят 2 окна, остальные поровну делят вторую половину
- max - основное окно распахнуто на весь экран
- magnifier - основное окно находится в центре, но занимает не весь экран, а половину, остальные окна делят весь экран находясь как бы под основным
- floating - ну тут вроде комментарии не нужны: плавающее окно, оно и есть плавающее. :)
Далее виджеты. Их не так много, но вполне достаточно. ;) В частности у меня созданы виджеты на статус баре слева на право:
- launcher - при нажатии открывает меню
- taglist - область с визуально отображенными тегами
- tasklist - область, где видны клиентские окна с активными в данный момент тегами (говоря терминами привычных менеджеров: окна в данном воркспейсе)
- promptbox - по сути не отображается, но когда нажимаем комбинацию клавиш "запустить..." раздвигает соседние виджеты и выдает строку для набора команды. Поддерживает добивку tab-ом почти как шел
- textbox ("часы") - текстовый видежт. Фактически свободное поле, куда можно вывести любой текст. С помощью одного из "хуков" обновляется раз в минуту записывая туда дату и время. :) Самые примитивные часы. :)
- layoutbox - небольшая область, в которой отображаются картинки с текущем layout. Собственно аналогичен textbox, только нужен для отображения графических изображений
- ну и конечно же tray. :) комменты тут излишни, так как без трея сейчас не обходится ни одни wm. ;)
С клавишами в общем тоже все понятно: комбинация клавиш и то что мы по ней делаем. Или вызываем какую либо функцию wm-а, или отрабатываем ряд действий, засунутых в свою собственную функцию. В общем для человека хоть раз что-то писавшего на каком либо языке тут все понятно. :)
Вот примерно так. :) На подходе описание всяких извратств, типа выпадающего календаря. ;)
интересно, но надо воочию увидеть!.. ;)
ОтветитьУдалитьСпасибо большое за идеи. Задумался про openbox. Там подводных камней нет кроме описанных?
ОтветитьУдалитьtengu-crow комментирует...
ОтветитьУдалитьСпасибо большое за идеи. Задумался про openbox. Там подводных камней нет кроме описанных?
Не, вроде больше ничего такого не замечено. В принципе мне openbox нравится. Но тейловые все же нравятся больше. ;)