TWM — старый, лёгкий и классный оконный менеджер в *никсах
Одной из привлекательных особенностей в Linux-ах и прочих unix-like системах является то что оконные менеджеры можно менять как перчатки! Все они, конечно, отображают пользовательские программы в графических окнах -, но у каждого свои фишки, настройки и особенности, что вызывает непрестанные дискуссии «KDE против Gnome» и подобные.
Для демонстрации вот мини-обзор (и мини-тьюториал) для TWM — это дефолтный оконный менеджер в разных *nix системах, если ваш дистрибутив не содержал что-то более новомодное. Он очень легковесный, несколько непривычный в управлении — и притом хорошо конфигурируемый. Также в него вы попадаете в некоторых режимах восстановления системы — так что полезно будет узнать как им пользоваться и как из него выйти :)
Введение
В недавней статье говорилось об альтернативах Linux — в частности о FreeBSD — и было вскользь упомянуто что по умолчанию при установке X-Windows система конфигурируется с TWM в качестве оконного менеджера. Возникло ощущение что стоит рассказать о нём подробнее.
Напомним — оконный менеджер это одна из двух частей системы X Windows, вторая — собственно X-сервер — обычно привлекает меньше внимания (она передаёт оконному менеджеру события от мыши и клавиатуры и в то же время отрисовывает графику по указаниям оконного менеджера).
Во многих системах (включая Ubuntu например) вы можете сконфигурировать несколько оконных менеджеров паралельно и выбирать нужный на странице входа. Или использовать разный для разных пользователей.
В то же время данная статья не подразумевает что нужно срочно переходить на TWM:) Большинство «толстых» современных оконных менеджеров включают дополнительные возможности и библиотеки (из-за чего часто набор дефолтных программ, начиная с «блокнота» в них может различаться). Например интерфейсы вроде Gnome могут содержать поддержку дополнительных операций с тачпадом которых не оказалось в драйвере (наиболее актуально — тапы и скролы например).
TWM — первый взгляд, первые осторожные шаги
Для исторической справки напомним что TWM создан в 1987–1989 годах — он ровесник Windows 2 и 3 версий (кто-то ещё помнит такие). Название расшифровывать неинтересно, хотя понятно что WM означает Window Manager.
Если вам захочется попробовать его живьём то вероятно лучше не пытаться сразу курочить свои X-винды (даже если вы работаете в каких-либо никсах, а не на винде/маке) -, а запуститься в виртуалке — например, скачать и установить FreeBSD в VirtualBox (с нынешним шустрым интернетом это вряд ли займёт вас надолго) -, а в нём выполнить pkg install xorg чтобы установить X-Windows — и запустить его с помощью startx. И что за красота откроется нашим глазам?

изначально окна терминалов совсем пустые, мы для красоты выполнили «ls» в корне
В данном случае TWM сконфигурирован так, что при старте запускаются сразу 2–3 консольных окошка — и ещё модные часики. Общий стиль напоминает прошлый век, но поскольку целевая аудитория — айтишники, а не секретарши, тут каких-то удивительных визуальных эффектов ожидать и не стоит, анимация всем до лампочки.
Заметьте что одно из консольных окон озаглавлено login — оно «главное» — если вы в нём напишете exit или закроете его, закроется и вся X-сессия, вы вернётесь в текстовый режим (ниже увидим как это настроено).
Манипуляции с окнами
Покатаем указатель мыши (тачпада) по экрану. Любопытная особенность — окно над которым указатель оказался, сразу становится активным (в фокусе). Например если вы хотите набрать что-то в одном из консольных окошек — наведите на него указатель, иначе нажатия на клавиатуре в него не попадут.
Кнопки закрытия окна нет (по умолчанию) — в полосе заголовка окон только кнопка сворачивания в иконку (слева) и изменения размера (справа). Перетаскивать окна можно привычно — за эту самую полосу заголовка. А вот если вы попытаетесь ресайзить окно с помощью кнопки в правом верхнем углу, вы не сразу поймёте что происходит — пользоваться ею нужно так:
нажмите на кнопку ресайза указателем и держите, после чего сдвиньте указатель к той границе окна, которую хотите подвинуть (например, правой или верхней, или к углу) — эта граница (или угол) «захватятся» и дальнейшие движения; если же вы сразу после нажатия кнопки попытаетесь уменьшить окно, ничего интересного происходить не будет :)
Запуск приложений тоже может сперва сбить с толку. Попробуем запустить калькулятор :) просто поскольку он (вероятно) установлен по умолчанию. Наведите курсор мыши на терминал и введите команду xcalc (конечно, нажимаем enter после каждой команды) — мы с удивлением увидим что калькулятор сразу не появился, но отобразилась «сетка» как бы предлагающая где именно разместить окно.

такая сетка отображается при открытии и при перетаскивании окон
Вы можете поводить указателем туда-сюда, выбрать (прицелиться!) и шлёпнуть новое окно на выбранное место экрана (нажав кнопку мыши), например так:

неслабый у них калькулятор
Если вы расположили окна так, что они перекрываются, вы опять же имеете шанс удивиться, если попытаетесь «поднять» нижележащее окно наверх. Например если мы открыли калькулятор поверх терминала и попытаемся щёлкнуть в терминал чтобы он «всплыл» — этого не произойдёт — хотя клик ему передаётся, можно даже выделять в нём что-то мышкой и печатать текст. Чтобы окно «всплыло» — нужно кликать по полосе заголовка (или использовать пункты Raise / Lower из меню).
Итак, про Меню
Вы его не видите, а оно есть (как тот суслик). Наведите указатель на свободное пространство вне окон, так чтобы появился крестик похожий на букву X — как на первой картинке выше. Нажмите и удерживайте кнопку — появится вот такая менюшка. Перемещаться по ней нужно продолжая удерживать кнопку (мыши, тачпада).

дефолтное меню — тут всё конфигурируется, но об этом позже
Первые пункты — для управления окнами (размер, подвинуть, поднять) — это нам понятно. Вот любопытное — тут два пункта для закрытия окон. Delete просит окно «закрыться по-хорошему», а Kill предсказуемо «убивает» не спрашивая. Обычно нужен первый вариант — если вы его выберите, курсор изменится на череп с костями — наводите его на нужное (точнее, ненужное уже) окно — и жмёте — оно закроется. Попробуйте закрыть калькулятор. Надеюсь, вам понравится :)
В целом после первых пяти минут удивление проходит и приходит понимание что пользоваться можно как и любыми другими «окнами». Сами-то приложения в окошках остаются всё теми же. В частности «скопировать-вставить» работает, хотя и немного непривычно: как только вы выделите текст в каком-нибудь окне, он сразу попадает в буфер обмена (без дополнительных нажатий волшебных клавиш и т.п.) — чтобы его вставить в каком-нибудь другом окне, используйте Shift-Insert.
Конфигурирование
Чтобы освоиться с настройкой TWM под свои вкусы, попробуем проделать три упражнения:
уберем запуск лишних терминалов при старте
добавим кнопку закрытия окон
добавим в меню команду для запуска браузера
Как водится, файлов настройки может быть больше одного — во-первых файл (ы) настройки самих X-Windows и отдельный файл конфигурации TWM. Во-вторых общие системные файлы или отдельные пользовательские.
Сначала посмотрим на /usr/local/etc/X11/xinit/xinitrc — откроем его в одном из терминальных окошек с помощью nano или vi — и здесь мы с любопытством обнаружим как запускается TWM и программы по умолчанию в нём (прокрутите где-то в конец):

несколько команд в последних строчках запускаются через амперсанд
Мы видим что в конце запускается команда twm и вместе с ней «часики» (xclock) и целых три терминала. Причем последний (в отличие от остальных) не в бэкграунд — и ему задаётся как раз имя login. Можно удалить остальные два, например, а этому уменьшить размер до привычных 80x25.
Естественно редактировать файл в /usr/local... можно только из-под рута. Если вы экспериментируйте на неизвестной системе и ещё не разобрались как стать рутом, можете скопировать этот файл в пользовательскую папку под именем .xinitrc — и редактировать его задавая настройки только для своего пользователя.
Конфигурация самого TWM — в файле вроде system.twmrc — его тоже можно создать в пользовательской директории, или отредактировать общий. Возможно для этого придётся сначала его найти :)
$ find / -name '*.twmrc'
В моём случае он оказался в /usr/local/share/X11/twm/system.twmrc — можно также его скопировать в свою папку и редактировать здесь, чтобы не писать с нуля.
Итак, открываем этот файл опять же с помощью nano или vim подправим кое-что. Одной из первых мы увидим секцию куда можно вписать самые общие настройки, и добавим здесь:
RightTitleButton "xlogo11" = f.delete
Тут легко разобраться — RightTitleButton это название настройки, xlogo11 — иконка для кнопки (отдельный вопрос где они лежат — пока пропустим) -, а после знака равенства требуемая функция, в данном случае f.delete — «аккуратное» закрытие окна.
Крутим дальше — появится секция Color — тут ничего объяснять наверное не требуется — название элементов и чуть непривычный, но понятный 16-ричный синтаксис. Попробуем изменить цвета заголовков и меню например (результат посмотрим на картинке ниже).
Довольно длинная секция с настройками для Button1 / Button2 / Button3 — реакций на нажатия на разных участках (тайтлбарах, свободных местах) и притом можно задавать модифицирующие клавиши. Синтаксис здесь чуть сложнее -, но можно догадаться или почитать в man twm. В качестве упражнения попробуйте добавить вызов меню при щелчке не по свободному пространству, а по тайтлу окна (например, на правую кнопку или на левую с шифтом). Это будет удобно! Подсказка — для этого нужно «обокрасть» уже имеющуюся привязку для клика по свободной области:
Button1 = : root : f.menu "defops"
Наконец внизу мы находим секцию определения меню, начинающуюся со строчки menu "defops" — причем тут мы догадываемся что defops — просто название менюшки и мы можем задать несколько разных меню -, а при вызове их (например при биндинге к кнопке, как выше) указывать разные имена, например по левой и правой кнопке, при клике по свободной зоне или по тайтлу и так далее. Здесь синтаксис незамысловатый — скопируем строчку с XTerm и модифицируем чтобы запускать Firefox (конечно его надо не забыть установить pkg install firefox например).
"Firefox" f.exec "exec firefox &"
Наконец, давайте сохраним файл и чтобы применить новые настройки, щёлкнем в меню пункт Restart — при этом оконный интерфейс перезапустится лишь частично, все открытые окна программ останутся на том же месте и в том же состоянии, где были.
Картинка ниже примерно изображает результаты нашего мини-эксперимента — цвета изменились, в меню добавился пункт — в тайтлбаре кнопка закрытия.

что ж, и в Windows бывают странные цветовые схемы :)
Заключение
Как сказано выше, эта статья не призывает «срочно менять ваш KDE / Gnome / Unity» на TWM. Напомню, что только более-менее популярных оконных менеджеров существует штук двадцать (не считая новомодной разработки Wayland — альтернатива X-Windows вообще). Так что там есть что попробовать. Разнообразные фичи кочуют между менеджерами. Если вы ищете легковесный менеджер для машины с относительно скромными ресурсами — fluxbox или Xfce возможно будут чуточку ближе к современности по ощущениям — хотя принципы использования и конфигурирования во многом похожи.
В целом сама идея альтернативных и кастомизируемых оконных менеджеров настолько занимательна, что понемногу нашла своё отражение и в Microsoft Windows, правда не настолько далеко зашла и не снискала равной популярности.
