Wie richte ich einen OpenRC-Dienst ein, der auf der Ebene „Anmelden“ ausgeführt wird?

Wie richte ich einen OpenRC-Dienst ein, der auf der Ebene „Anmelden“ ausgeführt wird?

Ich möchte, dass ein bestimmter Dienst von OpenRC nach meiner Benutzeranmeldung über Agetty, LightDM (Display Manager) oder auf andere Weise ausgeführt wird.

Dies liegt daran, dass ich einen Emacs-Daemon als OpenRC-Dienst für meinen spezifischen Benutzer laufen habe und dieser Dienst erst nach dem Erstellen einer Dbus-Sitzung gestartet werden muss. Eine Möglichkeit, dies zu erreichen, besteht darin, den Emacs-Daemon nach dem Dbus-Start auszuführen.(zugehörige Geschichte)führt meine Hauptsitzung (aktuell XFCE-Sitzung) aus, was beispielsweise nach einem Login über den LightDM-Displaymanager geschieht.

Als Workaround mache ich Folgendes: Ich starte Emacs nach der Anmeldung mit meinem Benutzer neu, um die Dbus-Integration mit Emacs korrekt zu initialisieren. Aber das ist einfach nur mühsam. Es muss einen besseren Weg geben, das zu tun.

Antwort1

Das Gentoo Wiki hateine Seite mit Beschreibungen verschiedener Möglichkeiten zum Starten von Benutzerdienstenauf einem System, das OpenRC verwendet, aber Sie können jede dieser Methoden an Ihr System anpassen, auch wenn Sie Gentoo nicht verwenden. Es gibt ein paar verschiedene Optionen, je nachdem, was Sie brauchen:

  • Verwenden Sie die Autostart-Funktion Ihrer Desktopumgebung, falls verfügbar. (Ich verwende XFCE nicht, daher bin ich mir nicht sicher, ob es diese Funktion hat.) Dies ist wahrscheinlich die einfachste Option zum Einrichten, wenn sie funktioniert, insbesondere wenn Ihr Dienst eine Verbindung zum DBUS-Daemon herstellen muss, da er automatisch die Umgebungsvariablen erbt, die ihm mitteilen, wie er von XFCE auf DBUS zugreift. Dies funktioniert jedoch nur, wenn Sie sich grafisch anmelden, nicht mit agetty. Es klingt also, als wäre es nicht das, was Sie wollen.

  • Fügen Sie den Daemon als regulären OpenRC-Dienst hinzu (das heißt, Sie erstellen ein Skript dafür in /etc/init.d/) und richten Sie PAM so ein, dass der Dienst beim An- oder Abmelden gestartet und gestoppt wird. Dadurch wird der Dienst auch gestartet, wenn Sie sich mit einer nicht grafischen Methode wie agetty oder SSH anmelden. Wenn Sie dies jedoch tun, hat der Dienst keinen Zugriff auf DBUS-bezogene Umgebungsvariablen.

    Sie können die DBUS-bezogenen Parameter möglicherweise dynamisch erkennen – auf der Wiki-Seite gibt es ein Skript, das zeigt, wie Sie das versuchen können – aber das ist nicht die stabilste Lösung. Und natürlich setzt das voraus, dass ein laufender DBUS-Daemon vorhanden ist, mit dem Sie sich verbinden können, was nur der Fall ist, wenn er von Ihrer Desktop-Umgebung gestartet wurde. Wenn das nicht der Fall ist, müssen Sie herausfinden, was Ihr Dienst tun soll (z. B. sollte er fehlschlagen? sollte er seinen eigenen DBUS-Daemon starten?) und das implementieren.

  • Verwenden Sie einen separaten Servicemanager, der Dienste aus einem benutzerdefinierten Verzeichnis ausführen kann. (Die Wiki-Seite verwendet runsvdirdies als Beispiel, aber jedes andere Programm, das dasselbe tut, sollte akzeptabel sein.) Sie können den Servicemanager auf eine der zuvor genannten Arten starten (ein von PAM gesteuerter OpenRC-Dienst oder der Autostart Ihrer Desktopumgebung), ihn aus einer Ihrer Shell-Init-Dateien ausführen oder ihn als OpenRC-Dienst verwenden, der nicht von PAM gesteuert wird und einfach wie alles andere beim Hochfahren Ihres Systems gestartet wird, usw. Anschließend können Sie in diesem benutzerdefinierten Verzeichnis einen Dienst für Ihren Emacs-Daemon definieren und Befehle in eine geeignete Initialisierungsdatei (Shell-Startup, PAM xsessionusw.) einfügen, um dem separaten Servicemanager mitzuteilen, dass er diesen Dienst nach Bedarf starten und stoppen soll.

    Auf diese Weise haben Sie wahrscheinlich die größte Flexibilität bei der Steuerung, wann Ihr Emacs-Daemon ausgeführt wird, aber es treten dieselben Probleme mit DBUS auf, die bereits erwähnt wurden: Der separate Service-Manager hat keinen Zugriff auf DBUS-bezogene Umgebungsvariablen, es sei denn, Sie starten ihn über den Autostart Ihrer Desktop-Umgebung. Sie müssen also wahrscheinlich eine Art dynamische Erkennung der DBUS-Verbindungsparameter verwenden, wenn Sie diese benötigen.

Je nachdem, was Sie genau benötigen, könnte der eine oder andere dieser Ansätze für Sie geeignet sein. Welchen Ansatz Sie auch wählen, auf der verlinkten Wiki-Seite finden Sie weitere Einzelheiten zur Implementierung.

Antwort2

Ja, das ist möglich. Sie müssen es nur sudo rc-service yourservice startzu Ihrem Benutzer hinzufügen .bashrc.

Antwort3

rc-update add <service> <runlevel>

Quelle:https://wiki.gentoo.org/wiki/OpenRC_to_systemd_Cheatsheet

verwandte Informationen