Оконные менеджеры - одно из самых интересных явлений мира FOSS. Четкое разделение на серверную и клиентскую часть построения архитектуры пользовательского интерфейса привело к тому, что имеется множество различных WM, на любой вкус. Помимо известной троицы универсальных GNOME, KDE и XFCE, существуют и более узконаправленные решения (к примеру, целый класс тайловых оконных менеджеров). Для их использования, как правило, требуется весьма кропотливая настройка. Однако стоит погрузиться в этот процесс и незаметно пролетят часы, дни и даже месяцы. Результатом такого процесса является не только удобная и заточенная под конкретные потребности система (как правило, до конца не доделанная), но и явление, к которому испытываешь эмоциональную привязанность.

Накануне Нового годе, наткнулся на пост Brian Lunduke1 о выходе стабильной версии NsCDE - оконного менеджера, имитирующего старые Unix-системы. Все эти Sun Ultra и HP-UX. То есть те, которые я (да и большинство современных пользователей Linux тоже) в глаза ни разу не видел, но величие которых всегда казалось безусловным и не требующим личного опыта для подтверждения данного факта. Интерфейс этих систем был своеобразным - он довольно сильно отличался от привычных окон Windows 95-98 и как будто бы заявлял своим видом о принадлежности к чему-то серьёзному и “профессиональному”.

Hello Friend
HP-UX 10.20 with CDE

Ещё в глаза всегда бросались корявые шрифты (никакого xft с его хиттингом и антиальясингом и в помине не было!)2 Что это вообще за “старый, узнаваемый Unix”? Чаще всего CDE - Common Desktop Environment на базе Motif widget toolkit. Именно построенные на нём интерфейсы и бросались в глаза своей подчеркнутой квадратностью и имитацией выпуклости элементов. Как говорит Википедия: “The Motif look and feel is distinguished by its use of rudimentary square and chiseled three-dimensional effects for its various user interface elements.”3

К созданию Motif приложили руку многие крупные корпорации, а идеи, положенные в его основу, отбирались на конкурсной основе фондом Open Software Foundation (не путать с Free Software Foundation). Отметились и Apple, и IBM, и даже Microsoft. Причём внешний вид Motif (дизайн системы) - это и было детищем Microsoft (Presentation Manager), период сотрудничества с IBM при работе над OS/2. Утверждается, что Microsoft, участвуя в создании Motif, стремилась устранить недостатки, допущенные при создании интерфейса Windows (вероятно, речь идёт о второй версии).

Через некоторое время Microsoft из союзника превратилась в противника. Шёл 1994 год и доминантные игроки на поле Unix решили объединить свои усилия (дабы противостоять Mocrosoft), в первую очередь унифицировав графический интерфейс. Так и появилась CDE построенная на основе Motif. Очень похожа на CDE был IRIX Interactive Desktop (устанавливался на рабочие станции SGI). Однако и Motif, и CDE не были системами с открытым исходным кодом и за их использование надлежало отчислять средства правообладателю. Открыты исходники CDE под GPL-лицензией были только в 2012 году (когда они имели разве что историческое значение).

Hello Friend
Интерфейс IRIX Interactive Desktop - официальное руководство к системе

Насколько эти CDE и IRIX ID4 были удобными и функциональными? Негативных отзывов от пользователей тех лет хватает. Думаю, в те времена оконные менеджеры были не более чем средством запуска терминала или какого-то специализированного ПО. То есть вряд ли они имели природу технофетиша, коим сейчас являются определённые явления из мира FOSS (Vim и Emacs - не просто текстовые редакторы, это символы, за которыми стоит некий “добавочный смысл”).

Не раз отмечал, что мир FOSS полон симулякров. Один из них устойчивый миф, что некогда был “настоящий Unux”, а сейчас это нечто другое, имеющее совсем иную сущность. Эта идея о “настоящем Unix” часто выступает как источник вдохновения. Действительно, сложно представить, что кто-то пишет под Windows 11 оболочку, имитирующую Windows 3.11. А если даже кто-то и пишет (чудаков полно и они имеют полное право быть таковыми), то вряд ли много кто заинтересуется подобным проектом. Не было никакого “настоящего Windows”. Винда - она и есть винда.5

Очевидно, что когда в 2012 году код CDE был опубликован под GPL лицензией он представлял историческое, а не практическое значение. В то же время в Linux существовал оконный менеджер FVWM, который не сильно старше CDE, но изначально вышел под свободной лицензией (free as in freedom). Он тоже не возник на пустом месте, а представлял собой доработку TWM - Tab Window Manager. Что интересно, TWM является стандартным оконным менеджером X.Org - и присутствует практически в каждой системе, в которой есть Xorg. Обычно он запускался, когда по какой-то причине отказывался стартовать GNOME/KDE (появляется курсор в виде креста на сером фоне).

NsCDE - это надстройка над FVWM, которая делает его похожим на классический CDE.

Hello Friend
Внешний вид NsCDE + системный монитор gkrellm2

Но здесь мы уже имеем поддержку xft (и, как следствие, адекватное отображение шрифтов), а также набор инструментов для конфигурации внешнего вида, поведения окон.

Hello Friend
Style Manager. Обратите внимание на аутентичные шрифты

Про NsCDE есть статья на Хабре (как же меня раздражают эти тупые статьи в “корпоративных блогах”. Так и представляю, как к какому-нибудь программисту подкатывает начальник и под угрозой лишения премии заставляет написать статью на Хабр), которая по сути кривой перевод readme с GitHub проекта.

Помимо того, что NsCDE имеет целью имитировать внешний вид классического CDE, система устанавливает собственные темы для GTK и QT приложения, которые придают им стиль “90-х”. Получается довольно занятно и аутентично.

Hello Friend
GTK-приложение Thunar c темой NsCDE. Шрифт - Iosevka

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

Закончилось тем, что я установил NsCDE на все свои компьютеры (начиная с основной рабочей системы с двумя 4k-дисплеями, заканчивая древним Panasonic Toughbook) и попробовал с этим жить. И в результате пришёл к выводу - что это реально удобно. Крута даже на сама NsCDE, а лежащий в её основе FVWM.

Как говорил ранее, в Linux существует огромное количество WM6 и работа над новыми ведётся постоянно. Из значимых новостей - не так давно анонсирована работа System76 над новой DE, которая будет написана на Rust. Вышла новая версия Elighenment и LxQT. Однако по итогам знакомства с новыми версиями, прихожу к мысли, что отсутствует какая-то центральная идея, которая должна быть краеугольным камнем всего нового. Меняется визуальное оформление, дизайн. Рисуются новые иконки, подбираются цвета. Это здорово и интересно, но что это даёт? Если мы говорим об изменениях в дизайне и косметике, то любой жаждущий идей для кастомизации своей системы, получит их в избытке, полистав часок-другой r/unixporn (да в добавок перейдёт по ссылке на github, где лежат готовые конфиги).

Вообще, для чего нужна WM? Для управления объектами, которые суть “окна”. Для этих объектов определены стандартные операции: инициация нового окна, закрытие, перенос окна в рамках рабочего пространства, изменение размера. Поскольку окон может быть больше одного, то нужен какой-то механизм, позволяющий противостоять хаосу и неразберихе. Например, окна можно “сворачивать” и помещать индикацию о том, что окно свернуто в какую-то область. Эта знакомая с Windows 95 полоска, где слева кнопка “Пуск”, а правее индикация инициализированнных окон - одни из которых “свёрнуты”, другие - присутствуют на основном экране. Потом появились идеи, что поскольку у одного приложения может быть много окон и их можно как-то сгруппировать. К примеру, помещать в область состояния иконку приложения, по клику на которую будет показан список окон, относящихся к одному приложению (док в MacOS). Другой комплекс идей заключался в том, что “свёрнутое” окно - это вообще не удобно. Все окна всегда можно держать открытыми, переключаясь между иными сущностями - “рабочими столами”. На “рабочем столе” группируешь те окна, которые относятся к решаемой задаче. Так появились тайловые оконные менджеры - которые держат все окна открытыми, размещая их на рабочем пространстве определённым образом7.

Вообще, все эти движения туда-сюда кажутся лишёнными смысла. Почему не сделать систему, которая позволяет пользователю самому решать, как поступать с окнами? Сворачивать ли их в “док” или держать всегда открытыми или же получать список инициализированных окон, нажимая определённую клавишу? В контексте Gnome это решалось путём плагинов. К примеру, существует замечательный Pop Shell, который добавляет функционал тайлового WM (а ещё запуск приложений посредством “размытого” поиска). Но поскольку плагины - это сторонние компоненты, то они практически всегда ломаются при крупном обновлении основной системы. А значит это то, на что нельзя полагаться в полной мере. Здравая идея - лучше довольствоваться базовым функционалом - его-то, по крайней мере, не сломают.

Из всего этого, прихожу к выводу, что WM должна не только предоставлять функционал, но и предоставлять открытый и удобный в использовании API. К примеру, мы должны иметь возможность чётко прописывать правила поведения окна конкретного приложения, в конкретной ситуации. То есть открывая два окна эмулятора терминала на рабочем столе, разумно иметь команду, которая устанавливает каждому из окон определённый размер и размещает их один слева, другой справа. Причём должны ли они занимать всю высоту экрана, или же нет - тоже должно определяться.

Фактически, речь идёт о скриптах, которых выполняются применительно к окнам.

В принципе, такой функционал есть и в i3, и в новомоднем Sway. Есть специальная утилита, i3msg, через которую можно отправить определённую команду, которая будет выполнена оконным менеджером. Но сколько я не пытался добиться от неё вменяемого результата, толком ничего путёвого не получилось.

Но вот FVWM совсем другое дело. Фактически, в нём целый язык программирования. Вызываешь по комбинации клавиш функцию, которая выполняет требуемые тебе операции с окнами, да ещё и с проверкой условий. Причём встроенные команды тоже весьма интересные: к примеру, “максимизировать” окно по горизонтали (или вертикали) до первого препятствия (другого окна) Как отмечает создатель NsCDE, именно возможность гибкой конфигурации FVWM привело к возможности создать NsCDE.

Какая центральная идея лежала в основе CDE? Как мне кажется - это работа с несколькими виртуальными рабочими столами. Если вспомнить времена Win95-98 и мониторы того времени с разрешением, в лучшем случае 1024х768, то вообще не понятно, как мы жили с одним “рабочим столом”? Развернуть два приложения и поставить их бок о бок означало крайне ограничить полезную область видимого. Поскольку работа с Unix предполагала именно “работу” - несколько виртуальных пространств было хорошим решением.

В NsCDE по дефоту 4 “рабочих стола” по 4 “странице” в каждом - то есть в контексте одного монитора мы получаем 16! рабочих пространств, между которыми можно легко и быстро переключаться. Возможно это и избыточно, но подобная возможность не обременяет, а расширяет возможности управления рабочим (творческим?) процессом.

Hello Friend
GWM - позволяет видеть, какие приложения на каких виртуальных экранах запущены

Возвращаясь к FVWM. Если данный оконный менеджер настолько крут, почему он не “на слуху”?

Заметил, что это вообще свойственно вселенной FOSS. Можешь считать, что выбор средств для решения какой-либо задач ограничен. Но потом узнаёшь, что есть ещё и такой способ, такое решение и когда начинаешь в них разбираться, открывается бездна. Настолько комплексные и серьёзные программные продукты, в которые вложено много сил (и ума!), да ещё раздаваемые бесплатно… Кроме как феноменом человеческой цивилизации на данном этапе развития я это характеризовать не могу.

Изначально у меня была установлена FVWM версии 2.6, а сверху NsCDE2. При работе наблюдались определённые проблемы при запуске композитного менеджера - picom. Однако при замене FVWM на третью версию - все проблемы ушли. Кроме того, в третьей версии улучшили систему команд для работы с мультимониторной конфигурацией.

Конечно, NsCDE - не идеальна. То тут, то там всплывают какие-то недоработки. К примеру, утилита по установке шрифта по умолчанию, прописывает в конфиги только один шрифт, хотя система использует несколько. Приходится править руками, но и тот возникают некоторые сложности.

В принципе NsCDE хорошо рассматривать как отправную точку для создания собственной надстройки над FVWM. Однозначно, буду следить за этим проектом.


  1. Товарищ Браен весьма интересный персонаж. Особенно доставляют серия его подкастов “Why Linux Sucks”. Правда в последнее время он перешёл на распространение своих материалов по подписке, так что с прослушиванием появились определённые (правда решаемые) трудности. На момент написания поста последний подкаст был доступен здесь ↩︎

  2. Вообще, возня со шрифтами, особенно кирилическими, в раннем Линуксе была ещё тем кошмаром. Примерно таким же, как попытка выставить нужное разрешение и частоту обновления экрана конфигурируя xfree86.conf на ЭЛТ-мониторе. ↩︎

  3. Посмотреть на оконный интерфейс ретро-систем можно на сайте toastytech.com ↩︎

  4. Кстати, работы по воссозданию IRIX DE под современные системы тоже идут полным ходом - проект MaXX Interactive Desktop ↩︎

  5. Кстати, ностальгическая возня со старым железом не имеет ничего общего с симулякром. Ностальгия - это явление совсем другого характера, отличающаяся, в первую очередь, индивидуальным и субъективным характером. Симулякр же явление коллективного сознания в форме мифотворчества. ↩︎

  6. Есть некоторые терминологические нюансы: что считать WM (Windows Manager), а что DE (Desktop Environment). Последняя это по сути WM + некоторый набор программ. Однако основной объём впечатлений от системы оставляет именно WM. Набор программ DE часто воспринимается как некий довесок. А реально удобные и комплексные программы, входящие в состав DE всё же воспринимаются как “вещь в себе”. Так, сложно считать текстовый редактор Kate или систему видеомонтажа KDEnlive частью KDE. То, что они идут в едином комплексе установки сути не меняет. ↩︎

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