Monthly Archives: April 2022

Зачем использовать тайловые wm

Written by elwood

Так вышло, что уже немало лет (с 2016) я на рабочем ноутбуке пользуюсь исключительно тайловым window manager’ом (конкретно, awesome wm). Пожалуй, пришло время поделиться опытом и рассказать, почему я предпочитаю тайловые wm и чем они хороши для работы программиста.

О том, что такое тайловые wm и чем они отличаются от обычных десктопных окружений, можно почитать тут. Я же расскажу о своих сценариях использования. Что нужно программисту для работы? Джентельменский набор: браузер, мессенджер, терминалы, IDE/текстовый редактор, ну и прочие приложения (менеджер паролей, калькулятор, скриншотилка итд). Чаще всего работа ведётся в редакторе кода с переключением в браузер/мессенджер/терминал и обратно. Причём переключаться приходится часто, особенно это касается эмуляторов терминала: сессий зачастую бывает много (больше трёх), и хочется тратить на это минимум времени.

Что предлагает нам обычное десктопное окружение? Возьмём для примера GNOME. В нём приложения будут сгруппированы в таскбаре, и переключаться можно тремя способами: через Alt+Tab, мышкой (тыкая в нужную иконку), или с помощью комбинации Mod-клавиша+цифра (Win+цифра). Alt+Tab не удобен тем, что если приложений много, то приходится следить за количеством нажатий, и оно постоянно меняется. То есть чтобы знать, сколько раз надо нажать, нужно в голове держать стек переключений, и примерно прикидывать количество нажатий. Так себе способ. Второй способ с мышью очень медленный и заставляет тянуться за мышкой, вести её к нужному месту, нажимать, вести курсор обратно в рабочую область экрана. А если экземплятов приложения несколько, то придётся ещё одним щелчком выбрать нужный. Выглядит сложно. Третий способ хорош: за одно нажатие Win+3 вы переключаетесь на третье (по порядку) приложение в таскбаре. Но, к сожалению, этот способ не универсален: если у приложения запущено несколько экземпляров, то уточнить нужный можно лишь при помощи мыши. Так что, выбрать нужный терминал быстро не получится. Опять страдания.

Вот бы иметь возможность закрепить за каждой комбинацией клавиш какое-то приложение, и переключаться туда одним нажатием! Взять какие-нибудь простые комбинации вроде Win+1, Win+2.. А если приложение запущено в нескольких экземплярах, то либо выделить экземплярам по отдельной комбинации, либо разместить их окна рядом, на одном экране. Стойте-стойте. Кажется, мы изобрели тайлинг.

Действительно, если взять awesome, то в нём по умолчанию заведено 9 рабочих областей (“тегов”). Переключиться на тег можно комбинацией Win+<номер тега>. Win+ESC переключает тег на предыдущий (очень удобно возвращаться назад). Можно на каждое большое приложение (браузер, мессенджер, IDE) выделить по тегу целиком, а множество эмуляторов терминалов разместить в одном теге в неперекрывающемся режиме (в режиме тайлинга). Теперь доступ к каждому приложению действительно быстрый и удобный — в одно нажатие. Причём если придумать себе какую-то схему размещения приложений и всегда её придерживаться, то эти комбинации всегда будут одними и теми же. Например, у меня на теге 1 всегда открыт браузер, на теге 2 — телеграм, на третьем теге — эмулятор(ы) терминала, на 4-6 — IDE/текстовые редакторы, на 9 — keepass. 7 и 8 у меня запасные, на них закидываю приложения, которые нужны разово/нерегулярно, обычно эти теги пустые.

Теперь давайте рассмотрим визуальную составляющую. Обычные десктопные окружения предлагают нам окошки, которые обильно сдобрены дополнительными элементами: заголовок, меню, рамки окна, элементы управления окном (минимизация, максимизация, крестик закрытия). Причём с каждым новым релизом размер заголовков увеличивается. В результате процент полезной области экрана уменьшается. А ведь иногда приходится работать и с экрана ноутбука! В некоторых окружениях есть настройки, позволяющие уменьшить их размер (gnome-tweak-tool) и настроить шрифты. Но убрать их полностью нельзя.

Awesome же позволяет полностью убрать заголовки и рамки вокруг окон, целиком отдав пространство экрана приложению. То же касается и таскбара: в awesome его нет, а полоска тегов вместе со статус-баром занимают буквально десяток пикселей (впрочем, при желании это можно попытаться настроить). Интересно ещё, что у эмулятора терминала Konsole можно отключить меню, и терминал занимает целиком 100% экрана. Для программистов, которым часто бывает нужно отображать много текста на одном экране, это очень полезная фича. Вот так, например, выглядит мой терминал

Что ещё полезного может предложить awesome?
Хочу отметить возможность вешать кастомные команды на хоткеи. Эта возможность есть и в других DE, но чаще всего там возможности настройки ограничены. Здесь же можно развернуться на полную. Например, можно настроить запуск эмулятора терминала с открытием ssh-сессии на выделенный в браузере (или в редакторе) хост. У меня есть такой хоткей. Я выделяю ip адрес мышкой, нажимаю Win+Ctrl+S, и у меня открывается ssh туда. Быстро и удобно. Аналогично я сделал хоткеи для подключения по RDP к Windows-машине. И для открытия тикета в Яндекс.Трекере (аналоге JIRA): нужно лишь выделить название тикета и нажать комбинацию клавиш.

Подведём итоги. Преимущества тайлинговых wm и awesome в частности:
– удобное и быстрое переключение между приложениями (критически важно для работы и психического здоровья!)
– минимизация неиспользуемого пространства (важно для работы!)
– кастомизация хоткеев, возможность обходиться без мыши во многих случаях
А ещё:
– высокая скорость работы и низкое потребление ресурсов (актуально в сравнении с GNOME)
– независимость от того, куда свернут разработчики DE в следующем релизе: не нужно привыкать к решениям, которые показались разработчикам перспективными

Конечно, есть и минусы. Среди них:
– Высокий порог входа. Даже поставить такой wm не всегда простая задача для новичка в мире nix.
– Проблемы интеграции с DE. Если поставить awesome на Ubuntu с GNOME, то в awesome может не работать автодетект мониторов, переключение раскладки, локскрин. Эти неудобья придётся решать самостоятельно.

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

Напоследок приведу смешную пасту про тайлинг.

Ты совершенно не понимаешь, в чём суть тайлинга. Тайлинг - это не юнити/макообразное run-or-raise. Это не однопиксельные декорации окон. Это не теги вместо воркспейсов, не функционал поиска по 3.5 окон и не простыни конфигов на луа, хаскеле и прочих борщеязычках. Тайлинг - это концепция, при которой юзеры могут почувствовать себя полноправными хозяевами каждого пикселя своего несчастного экранчика - жадными, прагматичными, ленивыми юзерами, которыми они на самом деле и являются.
У кедерастов упала плазма - мы смеёмся. Гномосеки увеличили область заголовка окна ещё в полтора раза - мы смеёмся и жмём Mod4 + B. Мерзософт придумал очередную плиточную бредоидею для нового шиндошса - мы смеёмся и меняем раскладку окон. Нам говорят «без трея не прожить» - мы смеёмся и накатываем патч. Вэйланд, мир, гномощель, юнити - нам пофиг. Мы бездушно поделим экран на ровные части, наши предпочтения основаны на количестве строк кода, хоткеи - наша стихия, мы - истинное лицо управления окнами.

В следующих статьях я расскажу, как конкретно взять Ubuntu 20.04 и настроить в ней awesome wm до минимально рабочего состояния.