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

в 5:07, , рубрики: bsd-системы, GUI, linux, UNIX, window manager, X11, пользовательские интерфейсы

Одной из привлекательных особенностей в 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" в корне
изначально окна терминалов совсем пустые, мы для красоты выполнили "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, правда не настолько далеко зашла и не снискала равной популярности.

Автор: RodionGork

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js