Обзор оконных менеджеров · Neg blog

Обзор оконных менеджеров

Я пишу эту статью как вводную, перед тем как я расскажу вам о своём форке Notion. Если вам это не нужно, то можете полистать красивые картинки и сразу пройти сюда.

Как всем давно известно в Unix-подобных системах графическая подсистема отделена от ядра. Самая популярная и универсальная, подходящая практически для всех юниксов оконная система это X11, которая поддержка которой сейчас возглавляется X.Org Foundation. Подробнее о том что это такое можно почитать где угодно, например на вики, для тех кто в танке.

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

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

Думаю если я сделаю небольшой обзор этого богатства с парочкой примеров из каждого типа и скриншотов это будет для всех и эстетически приятно и весело.

Первый тип это стековые. Наверное самые популярные из них это те, которые входят в состав kde(kwin) и gnome(metacity для версии 2.2+ или mutter для версии 3.x). Но я не буду показывать как они выглядят, потому что мне кажется что вид этих тяжеловесных монстров испортит мой стройный и красивый блог :)

Как это всё настраивать? Если самим читать документацию и начинать с нуля лень, то можно посмотреть для начала на dotshare и форум арча или на UnixPorn

Стековые оконные менеджеры

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

TinyWM

Интересен тем, что почти ничего не делает, так что может использоваться как отправная точка для других оконных менеджеров. Всего ~50 строк кода. Бывает не только на си, но и на многих других языках, в частности есть версия на python, которая использует python-xlib. Показывать по нему особо нечего, но на нем(а также на Stumpwm) был основан clfswm, о котором рассказано ниже.

Скриншотов не показываю, потому что показывать нечего.

Современные

2bwm

Это современный форк mcwm(автор Michael Cardell), который в прошлом назывался mcwm-beast. Работает быстро из-за использования xcb и минималистичности, довольно популярен, чтобы убедиться в этом достаточно посмотреть, что делают, например пользователи UnixPorn на reddit. Вот его “домашняя” страница: github.com/venam/2bwm. Удобен минимилистичностью, возможностью всем управлять с клавиатуры. В качестве минуса можно заметить что не все фичи EWMH поддерживаются, а в остальном классный менеджер, мне нравится. На нем с помощью wmutils может быть реализовано даже что-то вроде того тайлинга, который был в subtle.

Вот как это выглядит в динамике: 2bwm_dyn (взято с гитхаба проекта)

2bwm_scr1 (скриншот, сделанный -Neuromatic-)

Также существуют более минимилистичные evilwm и его форк jbwm. jbwm отличается от evilwm наличием декораций окон и поддержкой xft. Но как по мне на фоне этого они не супер. А вот…

cwm

А вот написанный, если я не ошибаюсь, специально для OpenBSD cwm это другое дело. Он был вдохновлен evilwm, но позднее полностью переписан. Из тех фич, которые мне в нем нравятся это высокая минималистичность и хорошая скорость работы, а также возможность поиска по открытым окнам так как это сделано, например в Ratpoison. Кстати насколько я знаю им пользуются Тео де Раадт. Из минусов кроме меньшего кол-ва фич по сравнению с 2bwm в нем используется синхронный xlib вместо асинхронного xcb, что делает его менее быстрым.

cwm_scr1 (скриншот, сделанный z3bra, правда тут его чудесного удобного меню не видно, ну да ладно)

Ностальгические

Любители поностальгировать могут обратить внимание вот на эту троицу:

fvwm

Древний оконный менеджер с огромным количеством функций, плагинов и всего такого. До сих пор довольно-таки активно развивается. Возможно тем, кому хочется мысленно вернуться в прошлое он очень подойдет. Используется в частности Дональдом Кнутом :). Наверное потому что во времена его молодости ничего лучше этого не существовало. В качестве особенного плюса, как мне кажется, стоит выделить отличную поддержку EWMH и ICCCM, не многие оконные менеджеры могут этим похвастаться, особенно если они не “жирные”.

Настроенный fvwm может выглядеть вот так:

fvwm1 (Скриншот fvwm сделанный pkmurugan под управлением OpenBSD. Кстати у него вообще довольно много интересных скриншотов и странная любовь к мелким шрифтам).

Или вот так:

fvwm2

(Скриншот сделал mutze)

twm

Один из первых и самых простых оконных менеджеров, который часто идет в комплекте с иксами по-умолчанию. Если вы ничего не вбивали в ~/.xinitrc то скорее всего при старте иксов через startx вы получите 3 белых страшных терминальных окошка xterm(ещё один мамонт), которые управляются этим оконным менеджеров. По-умолчанию выглядит ужасающе, но его можно настроить. К счастью не убог, поддерживает декорации окон, иконки, макросы и назначение собственных хоткеев и реакций на действие мыши.

Например вот его скриншот, который был сделан earspl1t

twm_screen

Не так уж и плохо для полезного ископаемого, правда?

Window Maker

Изначально был разработан для GNUstep DE, которая в свою очередь мимикрировала под NeXTSTEP. Это как раз та ОС, некоторые куски кода которой ещё содержается в OS X. Делает это всеми силами и довольно успешно. До сих пор развивается. Выглядит, как правило, страшновато, потому что им сейчас никто не пользуется. Ностальгия же.

windowmaker (Скриншот WindowMaker сделанный всё тем же pkmurugan и опять под OpenBSD)

wmutils

В моих глазах это современная реинкарнация no-wm, написанная(или переписанная) с использованием xcb. Единым оконным менеджером не является, а представляет собой набор программ, который подходит для интеграции с уже существующими EWMH-совместимыми оконными менеджерами. Зачем это нужно? Если добавить ещё интеграцию sxhkd, то можно получить универсальную конфигурацию для управления окнами, которая почти не будет зависеть от конкретного оконного менеджера. Можно использовать даже самые простые из них, вроде swm и не париться.

Выглядеть может, например, вот так: wmutils_scr1 wmutils_scr2 (скриншоты сделаны Wildefyr)

Динамические тайловые оконные менеджеры

dwm

Динамический оконный менеджер для иксов. Существуют раскладки, по которым автомаматически “расфасовываются” окна. Как, например в виде одной большой области, в виде большого окна и стека, сетки, в виде спирали фиббоначи и тому подобного. По умолчанию крайне минималистичен, но существуют патчи, которые позволяет добавить в него недостающее, например поддержку xft шрифтов, более красивую панель и прочее. Также для него существует множество форков. За что стоит благодарить политику автора держать объем кода около 5000 loc, что позволяет разобраться в нем без особых проблем. Существует встроенная панель и простой лаунчер для приложений. Как и его последователь dwm “динамичен” тем что вы можете объединить несколько тегов в один, что в общем довольно удобно. Например если на одном теге у вас программирование, а на другом только web, то с помощью чего-нибудь вроде control+win+6, если вы на первом рабочем столе вы объедините 1-ый и шестой. Это просто и понятно, стоит только попробовать. Единственное чего мне не доставало в нем всегда это невозможность сделать окно принудительно плавающим при объединении тегов. Короче говоря при слиянии раскладка другого тега не учитывается, что для меня оказалось сдерживающим фактором, то же самое касается и awesome, а в остальном очень удобен несмотря на свою минималистичность, рекомендую, хоть и не использую. Кого-то может остановить то что он “конфигурируется” с помощью правки исходного кода, но как по мне там всё довольно просто, к тому же на том же arch forum можно найти “dwm hacking thread”.

Выглядит он обычно примерно вот так, довольно просто: dwm1 (скриншот пользователя Weidinger взятый с dotshare.it)

Awesome

Очень известный динамический тайловый менеджер “следующего поколения”, который является форком dwm, о котором написано выше. Так же как и в ion3 конфигурируется с помощью lua. С одной стороны сам api более красив, приятен и прост, с другой в отличие от иона api довольно часто меняется, а неправильная конфигурация может всё(или очень много) поломать. Очень быстр, использует асинхронную библиотеку xcb, есть встроенная панель, трей, множество плагинов для самых разных нужд и библиотек виджетов, например таких как замена демонов десктопных уведомлений(типа dunst, notify-osd и пр.), разнообразных меню и прочего. Может выглядеть очень красиво. Вообще сам по себе мне очень нравится. Но не использую, потому что не люблю динамический тайлинг как таковой, потому что с ним отсутствует ощущение контроля происходящего с окнами и слишком много частых изменений конфигурации геометрии у окон. А если отбросить это и использовать на весь экран тогда не хватает некоторых возможностей того же иона вроде вложенных скратчпадов.

Выглядеть может вот так:

awesome1_scr (Скриншот copycat-killer’а)

За дополнительной информацией рекомендую обратиться на страницу Elv13

wmii

Тайловый менеджер для X11. Является, по существу более сложным и, в некотором роде более богатым на функции, предшественником dwm. Настраивается и скриптуется через очень интересную, и насколько я знаю, уникальную IPC систему: монтируется файловая система, которая представляет всю нужную оконному менеджеру метаинформацию. Изменяя и читая эти данные можно изменять состояние самого wm, что позволяет писать скрипты для него на любом языке программирования. По умолчаию используются скрипты на bash, но также можно работать со всем этим богатством, например, на ruby, по крайней мере это точно было возможно в прошлом. Есть встроенный лаунчер и панель, также опционально можно включить и трей. Из минусов, прежде всего бедность фич по сравнению с тем же ion3, awesome и другими, слабое развитие. Из плюсов: интересная IPC архитектура из-за чего и упомянут.

Выглядит вот так: wmii1 (скриншот пользователя n0tch2k

i3

Тайловый оконный менеджер, который был написан полностью с нуля. Был создан потому что wmii не предоставлял(по крайней мере тогда) некоторых нужных функций, вроде поддержки мультимониторных конфигураций, имел некоторые баги и к тому же практически не развивался, а взять и похачить его было сложно из-за довольно большого объема кода и бедности документации. На самом деле с wmii имеет довольно мало общего и напоминает он мне скорее упрощенный ion3, в основном потому что представляет окна, насколько я помню, в виде дерева, а не в виде стека. Настраивается с помощью обычного текстового конфигурационного файла, IPC аля plan9 из wmii здесь, к сожалению, отсутствует.

Выглядит вот так:

i3scr1 (скриншот пользователя twodogsdave)

FrankenWM

Ещё один динамический тайловый менеджер, отличается прежде всего использованием xcb и простотой, даже более прост, чем dwm, всего около 2 тысяч строк кода. Можно с большой оговоркой рассматривать его как что-то вроде тайлового 2bwm, собственно в нем оттуда даже куски кода используются с той лишь разницей что wmutils вы в полном объеме к нему не прикрутите.

spectrwm

Оконный менеджер, который похож на более дружелюбный по отношению к пользователю dwm. Настраивается через конфигурационный файл, а не с помощью перекомпиляции, поддерживает ewmh, xrandr, встроенные зазоры(gap). Развивается не очень активно, но упомянуть можно. Утверждается что сделан “хакерами для хакеров”. Ну хз, возможно.

Qtile

Ещё один оконный менеджер, который неплохо выглядит, благодаря встроенным виджетам, имеет довольно стандартные функции, хорошо конфигурируется… с помощью python. Чем и интересен. То есть написан на pure python, а не так как например subtle wm си с ruby-интерфейсом или ion3 с lua интерфейсом.

Выглядит он просто и со вкусом: qtile1 (скриншот взят с сайта проекта)

xmonad

Динамический оконный менеджер, который полностью написан на Haskell. На нем же и конфигурируется. По-умолчанию в голом виде довольно похож на dwm и кажется убогим, но библиотека xmonad contrib добавляет в него множество раскладок, возможность полного ручного контроля структуры данных для управления окнами(используется стек, к сожалению), декорации окон, и многое, многое другое. Содержит буквально сотни мелких дополнений. Как его настраивать можно найти прямо на его сайте. Требует установки компилятора Haskell, который де-факто GHC. Достаточно тяжел, весит около 800 MiB, что может стать препятствием для минималистов, жадин или обладателей маленького ssd.

Выглядеть может красиво, например вот так: xmonad (скриншот, сделанный And1)

Тайловые оконные менеджеры

Bspwm

bspwm – это тайловый оконный менеджер, который как это понятно по названию, управляет окнами с помощью бинарного дерева, каждый узел которого имеет по два потомка. Поддерживает EWMH и многомониторные конфигурации. Контроллируется с помощью сообщений, которые утилита bspc посылает в сокет, что удобно. И позволяет осуществлять, интеграцию с sxhkd. Активно развивается, в настоящее время довольно популярен у красноглазиков.

bspwm_scr (скриншот, который сделал Neeasade) Ссылка на него чтобы рассмотреть получше [link]

Herbstluftwm

Оконный менеджер с ручным статическим тайлингом, который использует Xlib и Glib. Работа с окнами осуществляется через разбиение пространства на фреймы, то есть неперекрывающиеся области, примерно так же как и в ion3. Так же как и в ионе могут динамически создаваться рабочие столы. Каждый рабочий стол имеет собственную раскладку фреймов.

Как выглядит:

herbst_scr1 (скриншот конфигурации milomouse)

howm

У меня как-то недавно спросили бывают ли оконные менеджеры с похожей на vi модальной раскладкой клавиатурных комбинаций. Ну вот, бывают. Минимилистичный оконный менеджер, который интересен тем, что стремится быть похожим в плане модели управления на vi. Конфигурируется через config.h с перекомпиляцией, впрочем в этом нет ничего сложного. А вот как это чудо выглядит в динамике:

howm1 howm2

Ratpoison

Простой оконный менеджер, который не имеет большого количества зависимостей, свистелок и перделок, декораций окон и терпимости к грызунам. Был вдохновлен GNU Screen, его название переводится как “крысиный яд”, то есть wm для настоящих кейбордистов. Панели нет(впрочем можно прикрутить), информация выводится только по требованию, конфигурация осуществляется через простой текстовый файл. Трея тоже нет. Строг, минималистичен. Почему-то работать за ним довольно приятно. Из минусов – мало фич, отсутствуют плавающие окна и скратчпады. Из плюсов – это “тру” тайловый wm каким он и должен быть. Любители emacs должны оценить, потому что по умолчанию вся работа с клавиатурой осуществляется через заданный преффикс и есть поддержка “дерева хоткеев”.

Stumpwm

Оконный менеджер со статическим тайлингом от предыдущего автора, который представляет собой улучшенный Ratpoison, переписанный на Common Lisp, что позволяет ему быть переконфигурированным или даже полностью переписанным без перезапуска, по функциональности они довольно-таки похожи. Довольно минималистичен, но неплохо настраивается. Также как и в случае с Ratpoison нет декораций окон, нет кнопок, нет трея, ничего нет, только окна и клавиатура. Зато в отличие от него есть неплохая встроенная панель.

Он может выглядеть, например, вот так:

stumpwm_scr1 (скриншот crshd)

clfswm

Творение очень странное, даже не понятно к какому бы типу его следовало отнести. Тоже на Common Lisp, так что может быть не только перенастроен, но даже полностью переписан без перезапуска. Возможно есть извращенцы, которым сразу понравится настолько странный wm. Чтобы понять что с ним не так просто пройдите по ссылке. Похоже что проектировался он для мониторов 4K, раз так расточительно относится к экранному пространству :D

Ion3 и Notion

Ion3 – это wm в котором сделан упор на управление с клавиатуры. Наряду с LarsWM один из первых представителей вида static tiling wm. Прошел долгое и бурное развитие, которое осуществлялось преимущественно странноватым товарищем Tuomo Valkonen, который в один прекрасный день разочаровался в Linux и ушел прогать под винду. Странность автора, например в том что он то менял лицензию, когда не хотел поддерживать древние версии Ion в Debian, из-за чего эти товарищи даже клали его в nonfree, то упорно отказывался добавить поддрежку xft, то ещё что. А потом в один прекрасный день вообще закрыл сайт с проектом, потому что ему показалось что активного развития проекта нет и патчей никто не присылает. Тогда из тех запасов что имелись были сделаны несколько форков из которых жизнеспособным оказался Notion. О нем и расскажу, потому что современный, отличия невелики.

Вот так может выглядеть ion3: ion3_scr1 (скриншот warl0ck’а, опубликованный на opennet много лет назад)

ion3_scr2 (а этот скриншот сделан мной, но без всех усовершенствований, которые были сделаны после, он довольно старый и здесь просто для примера)

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

comments powered by Disqus