NsCDE. Призрак старого Unix-a
Оконные менеджеры - одно из самых интересных явлений мира FOSS. Четкое разделение на серверную и клиентскую часть построения архитектуры пользовательского интерфейса привело к тому, что имеется множество различных WM, на любой вкус. Помимо известной троицы универсальных GNOME, KDE и XFCE, существуют и более узконаправленные решения (к примеру, целый класс тайловых оконных менеджеров). Для их использования, как правило, требуется весьма кропотливая настройка. Однако стоит погрузиться в этот процесс и незаметно пролетят часы, дни и даже месяцы. Результатом такого процесса является не только удобная и заточенная под конкретные потребности система (как правило, до конца не доделанная), но и явление, к которому испытываешь эмоциональную привязанность.
Накануне Нового годе, наткнулся на пост Brian Lunduke1 о выходе стабильной версии NsCDE - оконного менеджера, имитирующего старые Unix-системы. Все эти Sun Ultra и HP-UX. То есть те, которые я (да и большинство современных пользователей Linux тоже) в глаза ни разу не видел, но величие которых всегда казалось безусловным и не требующим личного опыта для подтверждения данного факта. Интерфейс этих систем был своеобразным - он довольно сильно отличался от привычных окон Windows 95-98 и как будто бы заявлял своим видом о принадлежности к чему-то серьёзному и “профессиональному”.
Ещё в глаза всегда бросались корявые шрифты (никакого 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 году (когда они имели разве что историческое значение).
Насколько эти 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.
Но здесь мы уже имеем поддержку xft (и, как следствие, адекватное отображение шрифтов), а также набор инструментов для конфигурации внешнего вида, поведения окон.
Про NsCDE есть статья на Хабре (как же меня раздражают эти тупые статьи в “корпоративных блогах”. Так и представляю, как к какому-нибудь программисту подкатывает начальник и под угрозой лишения премии заставляет написать статью на Хабр), которая по сути кривой перевод readme с GitHub проекта.
Помимо того, что NsCDE имеет целью имитировать внешний вид классического CDE, система устанавливает собственные темы для GTK и QT приложения, которые придают им стиль “90-х”. Получается довольно занятно и аутентично.
Для любого действия, связанного с манипулированием окон определены сочетания клавиш, которые можно переопределить через файлы конфигурации.
Закончилось тем, что я установил 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! рабочих пространств, между которыми можно легко и быстро переключаться. Возможно это и избыточно, но подобная возможность не обременяет, а расширяет возможности управления рабочим (творческим?) процессом.
Возвращаясь к FVWM. Если данный оконный менеджер настолько крут, почему он не “на слуху”?
Заметил, что это вообще свойственно вселенной FOSS. Можешь считать, что выбор средств для решения какой-либо задач ограничен. Но потом узнаёшь, что есть ещё и такой способ, такое решение и когда начинаешь в них разбираться, открывается бездна. Настолько комплексные и серьёзные программные продукты, в которые вложено много сил (и ума!), да ещё раздаваемые бесплатно… Кроме как феноменом человеческой цивилизации на данном этапе развития я это характеризовать не могу.
Изначально у меня была установлена FVWM версии 2.6, а сверху NsCDE2. При работе наблюдались определённые проблемы при запуске композитного менеджера - picom. Однако при замене FVWM на третью версию - все проблемы ушли. Кроме того, в третьей версии улучшили систему команд для работы с мультимониторной конфигурацией.
Конечно, NsCDE - не идеальна. То тут, то там всплывают какие-то недоработки. К примеру, утилита по установке шрифта по умолчанию, прописывает в конфиги только один шрифт, хотя система использует несколько. Приходится править руками, но и тот возникают некоторые сложности.
В принципе NsCDE хорошо рассматривать как отправную точку для создания собственной надстройки над FVWM. Однозначно, буду следить за этим проектом.
-
Товарищ Браен весьма интересный персонаж. Особенно доставляют серия его подкастов “Why Linux Sucks”. Правда в последнее время он перешёл на распространение своих материалов по подписке, так что с прослушиванием появились определённые (правда решаемые) трудности. На момент написания поста последний подкаст был доступен здесь ↩︎
-
Вообще, возня со шрифтами, особенно кирилическими, в раннем Линуксе была ещё тем кошмаром. Примерно таким же, как попытка выставить нужное разрешение и частоту обновления экрана конфигурируя xfree86.conf на ЭЛТ-мониторе. ↩︎
-
Посмотреть на оконный интерфейс ретро-систем можно на сайте toastytech.com ↩︎
-
Кстати, работы по воссозданию IRIX DE под современные системы тоже идут полным ходом - проект MaXX Interactive Desktop ↩︎
-
Кстати, ностальгическая возня со старым железом не имеет ничего общего с симулякром. Ностальгия - это явление совсем другого характера, отличающаяся, в первую очередь, индивидуальным и субъективным характером. Симулякр же явление коллективного сознания в форме мифотворчества. ↩︎
-
Есть некоторые терминологические нюансы: что считать WM (Windows Manager), а что DE (Desktop Environment). Последняя это по сути WM + некоторый набор программ. Однако основной объём впечатлений от системы оставляет именно WM. Набор программ DE часто воспринимается как некий довесок. А реально удобные и комплексные программы, входящие в состав DE всё же воспринимаются как “вещь в себе”. Так, сложно считать текстовый редактор Kate или систему видеомонтажа KDEnlive частью KDE. То, что они идут в едином комплексе установки сути не меняет. ↩︎
-
У меня есть убеждение, что множеству пользователей тайловых оконных менеджеров, сам “тайлинг” как таковой не нужен. Они оказываются очарованы идеей гибкости конфигурации и управления окнами с помощью комбинаций клавиш. Сам по себе тайлинг оказывается удобным в крайне ограниченном числе задач. ↩︎