Sway. Интеграция systemd

Интеграция systemd в sway.

Содержание

1 Информация

  • Интеграция может подразумевать следующее:
    • Взаимодействие sway с systemd.
    • Запуск sway как сервиса systemd.

2 Запуск sway как сервиса systemd

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 Подготовка

  • Клонируйте репозиторий:
    cd /tmp
    git clone https://github.com/alebastr/sway-systemd.git
    cd sway-systemd
    

3.2.2 Юниты systemd

  • Скопируйте units/*.target в каталог пользовательского модуля systemd (/usr/lib/systemd/user/, $XDG_CONFIG_HOME/systemd/user/, ~/.config/systemd/user):
    mkdir -p ~/.config/systemd/user/
    cp units/*.target ~/.config/systemd/user/
    
  • Запустите systemctl --user daemon-reload, чтобы systemd повторно просканировал служебные файлы.

3.2.3 Скрипт session.sh

  • Добавьте конфигурационный файл ~/.config/sway/config.d/10-systemd-session.conf:
    exec ~/.config/sway/scripts/session.sh
    

3.2.4 Настройка Cgroups

  • Установите необходимые пакеты python.
    • Gentoo:
      emerge dev-python/dbus-next dev-python/i3ipc dev-python/psutil dev-python/tenacity dev-python/python-xlib
      
  • Добавьте конфигурационный файл ~/.config/sway/config.d/10-systemd-cgroups.conf:
    exec ~/.config/sway/scripts/assign-cgroups.py
    

3.2.5 Конфигурация раскладки клавиатуры

  • Добавьте конфигурационный файл ~/.config/sway/config.d/95-system-keyboard-config.conf:
    exec_always ~/.config/sway/scripts/locale1-xkb-config --oneshot
    

3.2.6 Автозапуск XDG Desktop

  • Добавьте конфигурационный файл ~/.config/sway/config.d/95-xdg-desktop-autostart.conf:
    exec ~/.config/sway/scripts/wait-sni-ready && systemctl --user start sway-xdg-autostart.target
    

3.2.7 Завершение

  • Перезапустите сеанс sway.

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие