Некоторое время назад я засел за чудо wm - i3wm. Да что уж там - уже наверно более 3-х лет назад! С одной стороны это хорошо тем, что масса ресурсов машины теперь освободилась, сам по себе wm дал возможность организовать статический workflow, то есть теперь у меня нет стопки окон, и каждый раз не приходится разбираться и искать нужное окно. Всё делается просто: на каждый десктоп привязано определённое окружение - например, на первом хранится только почта, на втором только IM-ки, на 3-м открывается редактор, если нужно подредактировать что-то сложное, на четвёртом запускаются браузеры, на пятом - окошки консоли, на шестом - zim и прочие evernote-ы, на седьмом - музыкальные и видео плееры, на 9-м virtualbox-ы, на 10-м keepass.

И есть ещё очень классная вещь - привязка окон к десктопам, то есть браузер, откуда его бы не запустили, всегда будет на 4-м десктопе. Конечно, его можно оттуда переместить на любой другой десктоп, win+shift+цифра и окно улетело на другой десктоп, мгновенно.

То есть если мне что-то надо, я не ищу среди кучи окон, я слепо переключаюсь на нужный десктоп одним нажатием кнопок win+цифра. Очень быстро и в процессе не отвлекаешься и не тупишь. В результате многие вещи выполняются намного быстрее.

Но если есть плюсы, то есть и минусы - i3 - это только оконный менеджер, это не полноценная DE, а только управлятор окнами. Впрочем, с i3 поставляется ещё и i3bar - простенькая панелька, которая может выводить трей с иконками приложений и ещё индикатор текущего рабочего стола с "условной" превьюшкой. Также на i3bar можно вытащить и другие сведения. Это происходит простым текстовым образом, просто указываем панельке какой скрипт регулярно запускать и выводить его stdout на свободном месте панельки. Если осилить JSON, то можно не только выводить текст в красивом виде на панель, но и отлавливать события с некоторых её регионов. Таким образом можно организовать аналог кнопок - события от мышки и её координаты подаются на вход вышеуказанного скрипта в виде json-чика, который можно распарсить.

Кое-чего не хватает. Ну, то есть для меня панелька - это не только источник информации и не только лаунчер приложений. Я привык, что на ней есть удобокликабельный список окон со всех рабочих столов. Мне хочется XDG-совместимое меню, чтобы не искать каждый раз приложение, которым я пользуюсь раз в полгода, не вспоминать его название. Конечно, есть dmenu, можно запускать приложения через него, но надо вводить их названия. хочется иногда пощёлкать по меню.

Ну, чтоже можно отказаться от i3bar в пользу fbpanel.

Чего же мне ещё не хватает? Ах, да! нужен управлятор питанием, то есть я хочу закрыть крышку ноута и отправить его в сон - это делается через демона acpid и скрипт-хэндлер к нему. Туда же отправляется в большинстве случаев и звук и изменялка яркости. За автоматическу переключалку между 1 экраном и 2 экранами отвечает другой скрипт-костыль, запускаемый из udev. И наконец за то, чтобы отобразить на панельке подробную инфу о батарейке отвечает отдельный скрипт, выковыривающий эту инфу из dbus|upower (ибо мне интересен прогноз, насколько хватит батарейки и когда же она зарядится). Есть ещё одна ситуация - это критический разряд батареи. О том, что батарейка близка к нему и действия в случае критического разряда принимает езё один скрипт, который тоже выковыривает данные о заряде но уже из /sys который посылает уведомления и при сильном разряде батарейки и который отправляет комп в гибернацию, как только заряд упадёт ниже критического.

Естественно, отдельный скрин локер - i3lock в моём случае справляется хорошо.

Естественно, управлятор обоями, этим занимается feh.

Но картина была бы не полной, если бы не было приложения, обеспечивающего сборку и запуск пользовательской сессии. В данном случае имеется в виду для каждого логина пользователя свой session id и dbus id, действующие в рамках всех приложений этой сессии. Это просто environment variables, если кто не понял. Ну и приятным бонусом была бы возможность перезапуска ключевых компонентов. Сессию собирает runit. Это несколько внезапно, так как runit обычно используется в качестве подпиралки сервисов на серверах, но по большому счёту юзерская сессия - это тоже набор сервисов, только крутятся они обычно менее продолжительное время в отличие от серверных демонов.

Весь этот набор компонентов в таком виде родился конечно же не сразу. Вначале появился i3-wm с конфигом сочетаний кнопок, похожим на дефолтные в dwm и немного от awesome, хоть я awesome и не мользовал, но у коллег по работе позаимствовал массу разных идей. Потом появились скрипты для i3bar, потом появился fbpanel. Я написал различные скрипты-демоны для автоматизации каких-то моментов, в том числе перезапускатор некоторых сервисов, чтобы переконфигурация была простой - новый конфиг и killall -9 например тому же fbpanel. Потом появились икоки с раскладкой клавиатуры, иконка для громкости. Появились некоторые демоны, автомтизирующие работу например с плеером и так далее. Ну и наконец последним заехал runit. И вот теперь я с этой конфигой живу около полутора лет просто великолепно.

Конечно, этот workflow не охватывает некоторые ситуации, например, отключение-подключение внешней клавиатуры, и запуск новых приложений, если нет клавиатуры вообще. Но в моём случае клавиатура есть практически всегда. Естественно, не поддерживается тачкрин, но в моём случае тачскрин не используется вообще. Так что в общем и целом такой десктоп, как десктоп рабочего ноутбука - это вполне себе рабочий вариант.

Впрочем, немного изменённый, но по бОльшей части аналогичный сетап я использую и дома. Жена, конечно в бешенстве, она к такому способу взаимодействия с ноутбуком не привыкла. Но это же мой ноутбук, а у неё есть свой.

Возвращаясь обратно к заголовку - могу сказать, что по большому счёту эффективное рабочее место, эрганомичное и удобное - это конечно вкусовщина, во всяком случае когда речь идёт о desktop-окружении. Однако тайловые WM заняли свою нишу, потому что такая схема работет. Конкретно в моём случае идея с тайлами не работает, я их не жалую, но у i3 есть 2 других режима - tabbed и floating. В моём случае по-умолчанию работает tabbed layout. Если подумать, то для tabbed-тежима возможно нехватает возможности вынести tab-ы вправо или влево, а-ля как в браузере vivaldi. Думаю, что на широких экранах это может быть полезно, а может быть и нет, надо пробовать.

Итак, подводя итог вышесказанному - de или wm - это всегда набор костылей, так как чистая парадигма того или иного рабочего процесса всегда обрастает различными исключениями, пограничными use-case-ами и дргими моментами, которые не оч хорошо вписываются в идеальную картину той или иной парадигмы представления рабочего стола. И либо ты миришься с этим, либо воротишь костыли... если тебе позволяет твой DE/WM.

Next Post