TWM — старый, лёгкий и классный оконный менеджер в *никсах

от автора

Одной из привлекательных особенностей в Linux-ах и прочих unix-like системах является то что оконные менеджеры можно менять как перчатки! Все они, конечно, отображают пользовательские программы в графических окнах — но у каждого свои фишки, настройки и особенности, что вызывает непрестанные дискуссии «KDE против Gnome» и подобные.

Для демонстрации вот мини-обзор (и мини-тьюториал) для TWM — это дефолтный оконный менеджер в разных *nix системах, если ваш дистрибутив не содержал что-то более новомодное. Он очень легковесный, несколько непривычный в управлении — и притом хорошо конфигурируемый. Также в него вы попадаете в некоторых режимах восстановления системы — так что полезно будет узнать как им пользоваться и как из него выйти 🙂

Введение

Далее по тексту мы говорим об оконной системе X Window System которую для краткости зовём «X-Windows» и пр.

В недавней статье говорилось об альтернативах 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" в корне

изначально окна терминалов совсем пустые, мы для красоты выполнили «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 бывают странные цветовые схемы :)

что ж, и в Windows бывают странные цветовые схемы 🙂

Заключение

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

В целом сама идея альтернативных и кастомизируемых оконных менеджеров настолько занимательна, что понемногу нашла своё отражение и в Microsoft Windows, правда не настолько далеко зашла и не снискала равной популярности.


ссылка на оригинал статьи https://habr.com/ru/articles/853776/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *