Sway. Интеграция systemd
Интеграция systemd в sway.
Содержание
1 Информация
- Интеграция может подразумевать следующее:
- Взаимодействие sway с systemd.
- Запуск sway как сервиса systemd.
2 Запуск sway как сервиса systemd
- Репозиторий: https://github.com/xdbob/sway-services
3 Взаимодействие sway с systemd
- Репозиторий: https://github.com/alebastr/sway-systemd
- Несколько направлений интеграции:
- Экспорт необходимых переменных в среду пользовательского сеанса systemd.
- Задание
sway-session.target
для запуска пользовательских служб. - Обеспечения совместимости с
systemd-oomd
.
3.1 Компоненты
3.1.1 sway-session.target
- Systemd запрещает запуск
graphical-session.target
напрямую и поощряет использование целевых модулей, специфичных для конкретной среды. - Пакет определяет
sway-session.target
. sway-session.target
должен запускаться, когда установлена среда пользовательского сеанса, и останавливаться перед выходом.- Специальный юнит
sway-session-shutdown.target
может быт использован для остановкиgraphical-session.target
иsway-session.target
.
3.1.2 Скрипт session.sh
- Скрипт
session.sh
отвечает за импорт переменных средыsystemd
иdbus
. - Остаётся в фоновом режиме до тех пор, пока
sway
не завершит работу, не остановит сеанс и не сбросит переменные для пользовательского сеансаsystemd
(это можно отключить, передав –no-cleanup). - Сам скрипт не устанавливает никаких переменных, кроме
XDG_CURRENT_DESKTOP
,XDG_SESSION_TYPE
. - Он просто передаёт значения, полученные от
sway
. - Список переменных и имя цели сеанса в настоящее время жестко запрограммированы и могут быть изменены путем редактирования сценария.
3.1.3 Настройка cgroups
- Сценарий
assign-cgroups.py
подписывается на новое событиеi3 ipc
окна и автоматически создаёт временную единицу области видимости для каждого приложения с графическим интерфейсом, запущенного в той же контрольной группе, что иsway
. - Сценарий необходим для преодоления ограничения
systemd-oomd
: он отслеживает использование ресурсов только контрольными группами и уничтожает всю группу, когда одно приложение ведёт себя неправильно и превышает лимиты использования ресурсов. - Помещая отдельные приложения в изолированные контрольные группы, мы уменьшаем вероятность того, что
oomd killer
случайно завершит сеанс. - Для работы необходимы следующие пакеты python:
dbus-next
,i3ipc
,psutil
,tenacity
,python-xlib
.
3.1.4 Конфигурация раскладки клавиатуры
- Сценарий изучает общесистемную входную конфигурацию из интерфейса systemd, преобразует ее в конфигурацию Sway и применяет ко всем устройствам с типом клавиатура.
- Основной мотивацией для создания этого компонента была возможность применить общесистемные раскладки клавиатуры для
sway
.
3.1.5 Автозапуск XDG Desktop
xdg-desktop-autostart.target
запускает модули, созданные из XDG-файлов рабочих стола в каталогах автозапуска.
3.2 Установка вручную
3.2.1 Подготовка
- Клонируйте репозиторий:
3.2.2 Юниты systemd
- Скопируйте
units/*.target
в каталог пользовательского модуляsystemd
(/usr/lib/systemd/user/
,$XDG_CONFIG_HOME/systemd/user/
,~/.config/systemd/user
): - Запустите
systemctl --user daemon-reload
, чтобы systemd повторно просканировал служебные файлы.
3.2.3 Скрипт session.sh
- Добавьте конфигурационный файл
~/.config/sway/config.d/10-systemd-session.conf
:1exec ~/.config/sway/scripts/session.sh
3.2.4 Настройка Cgroups
- Установите необходимые пакеты python.
- Gentoo:
1emerge dev-python/dbus-next dev-python/i3ipc dev-python/psutil dev-python/tenacity dev-python/python-xlib
- Gentoo:
- Добавьте конфигурационный файл
~/.config/sway/config.d/10-systemd-cgroups.conf
:1exec ~/.config/sway/scripts/assign-cgroups.py
3.2.5 Конфигурация раскладки клавиатуры
- Добавьте конфигурационный файл
~/.config/sway/config.d/95-system-keyboard-config.conf
:1exec_always ~/.config/sway/scripts/locale1-xkb-config --oneshot
3.2.6 Автозапуск XDG Desktop
- Добавьте конфигурационный файл
~/.config/sway/config.d/95-xdg-desktop-autostart.conf
:1exec ~/.config/sway/scripts/wait-sni-ready && systemctl --user start sway-xdg-autostart.target
3.2.7 Завершение
- Перезапустите сеанс
sway
.