Как настроить службу OpenRC для работы на уровне «входа в систему»?

Как настроить службу OpenRC для работы на уровне «входа в систему»?

Я хочу, чтобы после входа пользователя в систему через agetty, LightDM (дисплейный менеджер) или любым другим способом запускалась определенная служба OpenRC.

Это потому, что у меня есть демон emacs, работающий как служба OpenRC для моего конкретного пользователя, и мне нужно, чтобы эта служба запускалась только после создания сеанса dbus. Один из способов сделать это — запустить демон emacs после dbus-launch(соответствующая история)запускает мой основной сеанс (в настоящее время сеанс XFCE), который, например, происходит после входа в систему через менеджер отображения LightDM.

Что я делаю в качестве обходного пути: перезапускаю emacs после входа под своим пользователем, чтобы правильно инициализировать интеграцию dbus с emacs. Но это просто мучительно. Должен быть способ получше.

решение1

Вики Gentoo естьстраница с описанием различных способов запуска пользовательских сервисовв системе, которая использует OpenRC, но вы можете адаптировать любой из этих методов к своей системе, даже если вы не используете Gentoo. Есть несколько различных вариантов, в зависимости от того, что вам нужно:

  • Используйте функцию автозапуска вашей среды рабочего стола, если она доступна. (Я не использую XFCE, поэтому не уверен, есть ли у него эта функция.) Это, вероятно, самый простой вариант настройки, если он работает, особенно если вашей службе необходимо подключиться к демону DBUS, поскольку он автоматически унаследует переменные среды, сообщающие ей, как получить доступ к DBUS из XFCE. Однако это будет работать только при графическом входе, а не с помощью agetty, так что, похоже, это не то, что вам нужно.

  • Добавьте демон как обычную службу OpenRC (что означает создание скрипта для нее в /etc/init.d/) и настройте PAM для запуска и остановки службы при входе в систему или выходе из нее. Это запустит службу, даже если вы войдете в систему неграфическим способом, например, agetty или SSH. Однако если вы это сделаете, у службы не будет доступа к переменным среды, связанным с DBUS.

    Вы можете обнаружить параметры, связанные с DBUS, динамически — на странице вики есть скрипт, показывающий, как это можно попытаться сделать — но это не самая надежная вещь. И, конечно, это зависит от наличия работающего демона DBUS для подключения, что будет иметь место только в том случае, если он был запущен вашей средой рабочего стола. Если нет, то вам нужно выяснить, что должна делать ваша служба (например, должна ли она выйти из строя? должна ли она запустить свой собственный демон DBUS?) и реализовать это.

  • Используйте отдельный менеджер служб, который может запускать службы из пользовательского каталога. (Страница вики использует runsvdirэто в качестве примера, но любая другая программа, которая делает то же самое, должна быть приемлемой.) Вы можете запустить менеджер служб любым из ранее упомянутых способов (служба OpenRC, управляемая PAM, или автозапуск вашей среды рабочего стола), или запустить его из одного из ваших файлов инициализации оболочки, или сделать его службой OpenRC, которая не управляется PAM и просто запускается при загрузке вашей системы, как и все остальное, и т. д. Затем вы можете определить службу для вашего демона emacs в этом пользовательском каталоге и поместить команды в какой-либо подходящий файл инициализации (запуск оболочки, PAM и xsessionт. д.), чтобы сообщить отдельному менеджеру служб запускать и останавливать эту службу по мере необходимости.

    Этот способ, вероятно, дает вам наибольшую гибкость в том, как вы контролируете запуск вашего демона emacs, но у него есть те же проблемы с DBUS, о которых упоминалось ранее: отдельный менеджер служб не будет иметь доступа ни к каким переменным среды, связанным с DBUS, если вы не запустите его из автозапуска вашей среды рабочего стола. Поэтому вам, вероятно, придется использовать какое-то динамическое обнаружение параметров соединения DBUS, если они вам нужны.

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

решение2

Да, это возможно. Вам просто нужно добавить sudo rc-service yourservice startв пользовательский .bashrc.

решение3

rc-update add <service> <runlevel>

источник:https://wiki.gentoo.org/wiki/OpenRC_to_systemd_Шпаргалка

Связанный контент