LINUX.ORG.RU

Сообщения Lrrr

 

Пользовательские сервисы OpenRC: инструкция по применению

Статьи — Desktop

Как я уже писал раньше, в систему инициализации OpenRC недавно добавлена возможность запускать сервисы в пользовательской сессии. В этой статье я покажу, как этим пользоваться, на примере pipewire в Alpine Linux.

Что было раньше

Раньше в пакете с pipewire поставлялся (и до сих пор поставляется) скрипт /usr/libexec/pipewire-launcher, который предлагалось прописывать в конфиге sway. Особенность этого сетапа в том, что после остановки Sway все запущенные им в background процессы оставались висеть в памяти, и перед последующим запуском их предлагалось прибивать с помощью pkill. Не говоря уже про полное отсутствие логов, их не было.

Чтобы решить эти проблемы, нужно запускать pipewire в пользовательской сессии под супервизором. Собственно я так и делал при помощи s6, однако добавление пользовательских сервисов в OpenRC, а также соответствующих конфигов в пакеты в репозиториях Alpine позволяет отказаться от этих скриптов и пользоваться тем, что поддерживают мейнтейнеры дистрибутива.

Версии

Пользовательские сервисы были добавлены в OpenRC 0.60. Версия в репозиториях Alpine Edge на данный момент - 0.60.1. Используется pipewire 1.4.1 и wireplumber 0.5.8.

Зависимости

Для поддержки пользовательских сервисов нужно установить пакет openrc-user. Он содержит необходимые исполняемые файлы (openrc-user и openrc-user-pam), а также PAM-модуль pam_openrc.so.

PAM

Есть два способа запуска пользовательской сессии OpenRC: как сервис

$ doas rc-service user.${USER} start

и через PAM.

Предпочтительным является второй способ. Для того чтобы им воспользоваться, нужно подключить соответствующий PAM-модуль стандартным способом:

$ cat /etc/pam.d/base-session 
# ...
-session optional pam_rundir.so
session optional pam_openrc.so

Если $XDG_RUNTIME_DIR не создается автоматически, то нужно об этом позаботиться. Для этого я применяю еще один модуль pam-rundir (есть в репозиториях).

Перезагружаемся и проверяем, что пользовательская сессия работает:

$ rc-status --user

После этого можно запускать сервисы.

Запуск сервиса

В репозитории Alpine Linux уже начали добавлять файлы конфигурации пользовательских сервисов для разных пакетов, поэтому руками ничего писать не надо (если вы конечно не хотите запилить что-то свое кастомное):

$ rc-update --user add dbus default

Эта команда заставляет dbus автоматически запускаться при старте пользовательской сессии, являясь аналогом systemctl --user enable dbus. Симлинки на включенные сервисы располагаются в папке ~/.config/rc/runlevels, а сами конфиги лежат в /etc/user/init.d и /etc/user/conf.d.

Переменные окружения

DBus относится к типу сервисов, которые должны устанавливать особую переменную окружения, в данном случае $DBUS_SESSION_BUS_ADDRESS, для всех кто от них зависит. К таким зависящим относятся пользовательские сервисы и Sway. Раньше был только Sway, и подобная зависимость легко решалась тем что он запускался как потомок dbus-run-session:

cat /usr/share/wayland-sessions/sway.desktop | grep dbus
Exec=dbus-run-session /usr/bin/sway

Однако сейчас такой фокус не пройдет, потому что пользовательские сервисы запускаются независимо от Sway. И больше того, в OpenRC пока нет механизма, позволяющего сервисам подтягивать переменные окружения из их зависимостей. PR создан, но пока не смержен, поэтому $DBUS_SESSION_BUS_ADDRESS надо устанавливать вручную. Для этого предлагается использовать следующий кусок кода:

$ source /etc/user/conf.d/dbus

$ # в файле содержится вот такое:
$ cat /etc/user/conf.d/dbus
export DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus"

Прописываем его перед запуском Sway, убрав там dbus-run-session, а также в conf.d всех релевантных пользовательских сервисов.

pipewire

Наконец, после всех этих манипуляций, можно запускать pipewire:

$ rc-update --user add pipewire default
$ rc-update --user add wireplumber default
$ rc-update --user add pipewire-pulse default

…работает! Для себя я сделал вывод, что несмотря на то что реализованы еще не все желаемые фичи, такой сетап уже вполне пригоден к использованию. На данный момент пользовательские сервисы добавлены для следующих пакетов в репозиториях Alpine:

  • gnome-keyring
  • kanshi
  • pipewire
  • wireplumber
  • wlsunset
  • dbus

 , , ,

Lrrr
()

В OpenRC добавлены пользовательские сервисы

Новости — Linux General
Группа Linux General

OpenRC – система инициализации для Linux-систем, которая поставляется вместо systemd в таких дистрибутивах как Gentoo и Alpine Linux.

В ветку master репозитория openrc добавлена функциональность, необходимая для запуска сервисов в сессии пользователя с помощью этой системы инициализации.

Конфигурационные файлы и скрипты инициализации пользовательских сервисов размещаются в следующих папках:

/etc/user/init.d
${XDG_CONFIG_HOME}/rc/init.d

/etc/user/conf.d
${XDG_CONFIG_HOME}/rc/conf.d

${XDG_CONFIG_HOME}/rc/rc.conf
${XDG_CONFIG_HOME}/rc/runlevels

Все поставляемые с openrc утилиты, такие как собственно openrc и rc-*, получили дополнительную опцию --user / -U для работы с пользовательскими сервисами.

Данные изменения вероятно войдут в ещё не выпущенный релиз openrc 0.57.

>>> коммит с документацией

 

Lrrr
()

Sway

Галерея — Скриншоты

Собственно сабж. Мой сетап последние несколько месяцев:

  • верхняя панель — yambar;

  • нижняя панель — lavalauncher. Кстати, проект заброшен мейнтейнером. Единственное назначение — открыть браузер с телеграмом при запуске, для всего остального есть sway-launcher-desktop;

  • уведомления — mako;

  • терминал — foot;

  • обои — динамические, wlr-sunclock;

  • цветовая схема — везде где можно и нельзя Catppuccin Frappe Rosewater;

  • шрифт - Noto Emoji для значков типа громкости с сетью, и Cascadia Code для всего остального

Все это запускается под супервизором s6-svscan, потому что в openrc нет пользовательских юнитов. А если бы и были, то я бы огреб тех же самых проблем, что в systemd с пробрасыванием переменных окружения, корректным завершением при выходе и т.п., а так все просто и понятно.

Редактор — neovim с плагинами nvchad. В редакторе происходит процесс запиливания аналога wlr-sunclock без GTK, librsvg и прочей хрени, зато с корректным отображением линий терминатора.

Из опыта использования Alpine: если кому интересно — иногда встречаются небольшие wtf-ы. В опциях загрузки почему-то надо обязательно прописывать rootfstype=ext4, иначе не смонтируется. Yambar в репах собран без модулей, qt5ct и qt6ct почему-то только в testing, а pytorch (он мне нужен по работе) нет вообще нигде. А pytorch с офсайта собран только под glibc, парам-парам-пам. Впрочем, все рабочее один хрен в контейнерах. В целом — один хрен, тот же софт что в любом другом линуксе.

 , ,

Lrrr
()

pulseaudio всё?

Форум — Talks

Pipewire в Arch обновился до версии 0.3.17, и теперь пакет pipewire-pulse конфликтует с pulseaudio. Похоже, скоро этому примеру последуют и все остальные мейнстримные дистры. Ну что же.

systemctl --user enable pipewire-pulse

Pavucontrol, pactl и всё остальное использующее пульсу не заметило подмены. Единственная проблема оказалась с микрофоном: чтобы он задетектился, пришлось править конфиг pipewire

--- exec /usr/bin/pipewire-media-session
+++ exec /usr/bin/pipewire-media-session -e alsa-pcm

Документации чуть менее чем никакой, но звук кажется идёт. А буквально пару часов назад в master-ветку сабжа добавили поддержку AptX и AptX-HD. Время танцевать с гробом пульсы?

 , ,

Lrrr
()

RSS подписка на новые темы