Особенности Qtile
Речь в данной статье пойдет о полнофункциональном тайловом оконном менеджере Qtile, написанном и конфигурируемом на языке программирования Python. Менеджер доступен практически для любых Linux систем и поддерживает архитектуры X11 или Wayland. Подробнее о способах установки и зависимостях можно прочитать в официальном Wiki.
Qtile — легкий, гибкий и простой оконный менеджер, к тому же очень функциональный. Используя встроенные возможности, можно создавать собственные макеты, виджеты и команды; настраивать индивидуальный вид и поведение графического окружения. В этом он, прежде всего, и привлекателен лично для меня.
Сегодня же постараюсь более подробно разобрать встроенные функции и особенности их применения в конфигурации рабочего окружения. Все примеры сделаны на базе моей рабочей системы, с моими настройками. Итак, поехали.
Файл конфигурации
В ходе начальной загрузки создается файл конфигурации оконного менеджера в каталоге пользователя. Дальнейшая настройка Qtile осуществляется с помощью этого файла, который расположен по адресу: < $HOME/.config/qtile/config.py >. В варианте по-умолчанию предлагаемая структура конфигурации - смешанная, где внутри одного блока прописываются настройки другого. Но это легко поправить вызовом функций и назначением переменных. Мой файл конфигурации разбит на отдельные блоки, на которых остановимся подробней, для лучшего представления о назначении каждого из них.
Блок import
Отвечает за импорт встроенных библиотек и различных модулей Python в конфигурацию.
os-модуль - предоставляет функционал взаимодействия с операционной системой (например, чтение/запись файлов).
re-модуль - предоставляет функции поиска с использованием регулярных выражений (аналогично таковым в perl).
json-модуль - предоставляет функцию простого формата обмена данными (json - обозначение объекта JavaScript).
psutil-модуль - предоставляет функционал кроссплатформенной библиотеки для получения информации о запущенных процессах и использовании ресурсов системы (процессор, память, дисковое пространство, сеть, различные датчики).
socket-модуль - предоставляет набор основных функций API, которые обычно реализуются в качестве системных вызовов.
subprocess-модуль - предоставляет возможность создавать новые процессы, подключаться к каналам ввода/вывода и получать от них данные.
Popen - класс модуля subprocess, который позволяет вызвать выполнение дочерней программы в новом процессе.
typing-модуль - обеспечивает поддержку выполнения аннотации типов.
List - класс модуля typing, который представляет собой встроенную версию списка; используется для аннотирования возвращаемых типов.
pathlib-модуль - предлагает различные классы, представляющие пути файловой системы с семантикой, подходящей для различных операционных систем.
Path - класс модуля pathlib, который позволяет получить путь текущего каталога/ каталога пользователя, сравнить и преобразовать путь в абсолютный.
libqtile-модуль - представляет из себя библиотеку python, в которой собраны различные классы и функции для создания и настройки оконного менеджера Qtile.
bar, layout, widget, hook - классы из модуля libqtile, добавляющие различные функциональные блоки оконному менеджеру. Bar - панель. Layout - макеты расположения окон. Widget - встроенные виджеты. Hook - встроенные скрипты.
Click, Drag, Group, Key, Match, Screen, Rule, DropDown и KeyChord - классы из модуля libqtile.config, которые используются для определения поведения менеджера Qtile в ответ на различные события (например, щелчки мышью или нажатия клавиш).
lazy - класс модуля libqtile.lazy использован в качестве функции обратного вызова, а так же функции привязки клавиш.
guess_terminal - класс модуля libqtile.utils, который обращается к системной переменной "TERMINAL" для определения эмулятора терминала, используемого по-умолчанию в среде оконного менеджера.
qtile_extras-модуль - предоставляет доступ к коллекции модов, созданных и поддерживаемых пользователем elParaguayo для Qtile, среди которых доступны различные виджеты, скрипты и декорации, расширяющие функциональные возможности оконного менеджера (из всего многообразия нашел полезным для себя опционал декорации панелей и виджетов).
Блок variables
Отвечает за определение переменных среды, используемых в конфигурации оконного менеджера.
mod определяет клавишу-модификатор (mod4 = win), которая используется в настройке сочетаний клавиш оконного менеджера.
terminal определяет эмулятор терминала, который будет использован в среде Qtile по-умолчанию (можно напрямую указать путь к исполняемому файлу).
home определяет домашний каталог.
qconf - каталог файлов конфигурации Qtile.
astart - путь к скрипту автозапуска, используемому при старте системы.
colors - путь к файлу .json, в котором сгенерирована палитра, состоящая из 30 различных цветов в формате hex.
Как показано выше, пути файловой системы можно определить с помощью переменных, в качестве примера заданных по-разному. Методом Path.home() модуля pathlib или функцией expanduser() модуля os.path. Можно использовать любой из них или их комбинацию.
colordict загружает палитру из .json файла и преобразует ее в формат применяемый в конфигурации Qtile.
Палитру цветов также можно определить вызовом функции, например:
def set_color():
return[
["#555555", "#555555"],
["#FFFFFF", "#FFFFFF"],
["#ae99ea", "#ae99ea"]
]
colors = set_color()
Дополнительно в этом блоке можно задать любые переменные (например browser, fileManager и т.д.)
Блок keys
Отвечает за установку привязки клавиш. Определяет сочетание клавиш и действие, которое необходимо выполнить при нажатии заданной комбинации.
Key - класс модуля libqtile.config, который принимает список ключей-модификаторов в качестве своего первого аргумента и ключ в качестве второго. Действие задается вызовом определенной функции или метода, которое в свою очередь передается в качестве третьего аргумента конструктору ключа.
Блок groups
Отвечает за установку списка групп оконного менеджера и расширяет его дополнительными привязками клавиш для изменения и перемещения окон между этими группами.
Список групп инициализируется списком его объектов, каждый из которых представляет собой рабочее пространство, управляемое оконным менеджером. Атрибут названия каждого объекта группы задает имя, которое используется для идентификации группы и ее отображения в пользовательском интерфейсе диспетчера окон.
Список ключей расширяется дополнительными привязками клавиш, которые позволяют пользователю переключаться между различными группами, перемещать окна из группы в группу и следовать за ними.
Блок layouts
Отвечает за определение списка макетов, которые менеджер Qtile использует для расположения окон на экране.
Каждый объект макета создается с инициализацией настроек темы, с помощью оператора **. Параметры, записанные в словаре layout_theme передаются конструктору макета в качестве аргументов ключевых слов.
В среду Qtile встроено множество различных макетов, каждый из которых найдет своего пользователя. Необходимо учитывать тот факт, что макет указанный первым в списке, будет использован по-умолчанию. Переключать макеты можно сочетанием клавиш или с помощью встроенного виджета CurrentLayoutIcon.
Блок decorations
Отвечает за определение параметров общего стиля, используемых для панелей и их виджетов в среде Qtile.
С помощью вызова функции init_widget_defaults создадим библиотеку стиля для виджетов панели Qtile. Заданные в ней значения будут использованы по-умолчанию для всех виджетов.
Словари decor_left и decor_right из дополнительного пакета qtile extras могут быть использованы в качестве расширения библиотеки стиля. В них поддерживаются различные переменные для оформления внешнего вида виджетов.
Блоки widget_list и screens
widget_list выполняет инициализацию списка виджетов (списков можно создать сколько угодно). Виджеты будут отображаться на панели в том порядке, в котором они заданы в списке.
screens отвечает за настройку экрана, куда будет выведена панель(и) со списком виджетов (для систем с несколькими мониторами можно задать какая панель с каким набором виджетов будет выведена на тот или иной экран).
В среде Qtile есть множество встроенных виджетов; qtile_extras этот список расширяет. Подробное описание каждого из них с параметрами настройки можно найти в официальной документации:
Для конфигурации экрана(ов) используем вызов функции init_screens. Задаем настройки панели (тип и положение на экране), список виджетов на ней и параметры оформления. Мне симпатизирует встроенная панель Qtile, но вполне допустимо использовать любую другую (polybar, waybar...etc).
Блок floating_rules
Отвечает за конфигурацию поведения и управления "плавающими" окнами, которые не подчиняются общим правилам макета и могут занимать любое место на экране (поверх или позади основных окон).
Для мыши настраиваются привязки клавиш и нажатий на выполнение заданных действий при определенном их сочетании (аналогично keys).
Параметр follow_mouse_focus определяет, - следует ли автоматически перемещать фокус вместе курсором мыши.
Настройка bring_front_click определяет, - должен ли щелчок мыши выводить окно поверх остальных.
Параметр cursor_warp определяет, - следует ли перемещать курсор мыши в центр окна при его фокусировке.
Переменная floating_layout задает макет, который будет использован для "плавающих" окон.
Список floating_types (у меня не используется) определяет типы окон, которые следует рассматривать как "плавающие", например можно задать следующие типы окон: floating_types = ["notification", "dialog", "splash"]
Блоки miscellaneous и hooks
В miscellaneous собраны все прочие настройки.
Блок hooks отвечает за вызов встроенных скриптов python.
Настройка auto_fullscreen определяет, - следует ли автоматически устанавливать полноэкранный режим для окна при запросе. Соответственно, auto_minimize - автоматически сворачивать.
Настройка focus_on_window_activation определяет поведение фокуса окна при его активации. Возможные варианты: "focus" и "smart". "Умная" настройка сфокусирует только неактивное окно.
В среде Qtile есть множество встроенных скриптов (хуков), qtile_extras этот список расширяет. Подробное описание каждого из них с правилами использования можно найти в официальной документации:
Финальный hook
В конфигурации параметров оконного менеджера Qtile абсолютно нет ничего сложного. Более того, сам файл настроек очень простой и понятный, структурированная разбивка которого позволяет без труда реализовать собственную конфигурацию любой сложности. Python - популярный и к тому же простой язык программирования, с хорошей базой документации к нему. Все вместе делает этот оконный менеджер привлекательным инструментом для организации своего рабочего пространства.
Удачной настройки вашего окружения и, - музыку в студию!
Комментарии
09:20
12:31
10:39
13:58
14:56
17:29
21:03
23:12
https://termbin.com/6h4p
23:22
хотя, я бы забросил идею, ничего особого и ценного в этом дистрибутиве нет.
поиграться можно и на виртуалке, кстати не пробовали а на ней встает образ?
23:40
Поэтому да, пробовал. Но нет, это не помогло
20:24
22:39
Вяленый поддерживается и менеджер работает в нем; такую связку не использую, поэтому есть ли в ней проблемы, сказать не могу. В Х11 работает в целом хорошо и стабильно; с polkit придется повозиться, но и эта задача решаема.
Что лучше? Каждый сам выбирает.
Мне из оконных менеджеров симпатизируют: qtile, hyprland.
Первый под Х11, второй, - естественно под вяленого.