Desktop-Programm beim Login als SystemD-Service starten

  Prof.P   Lesezeit: 3 Minuten Auf Mastodon ansehen

Dieser Artikel beschreibt wie man einen benutzerspezifischen SystemD-Service beim Log-in automatisch ausführen lässt, um ein Desktop-Programm (mit GUI) auszuführen.

desktop-programm beim login als systemd-service starten

Desktop-Programm beim Log-in als SystemD-Service starten

Dieser Artikel beschreibt, wie man einen benutzerspezifischen SystemD-Service beim Log-in automatisch ausführen lässt, um ein Desktop-Programm (mit GUI) auszuführen.

Ich lasse den Matrix-Client "Element-Desktop" normalerweise beim Starten des Systems minimiert, wo er dann im Benachrichtigungsbereich ("SysTray") residiert, bis ich in meine Nachrichten schauen möchte.

Dazu stellt man im Menüpunkt "Start- und Fensterverhalten" der Element-Desktop-Einstellungen bei "Öffne Element, wenn du dich an deinem Computer anmeldest" auf "Minimiert".

Sobald man diese Einstellung vornimmt, erzeugt Element-Desktop eine entsprechende Starter-Datei namens "element-desktop.desktop" im benutzerspezifischen Autostart-Ordner ~/.config/autostart

Diese sieht dann in etwa so aus:

[Desktop Entry]
Type=Application
Version=1.0
Name=element-desktop
Comment=element-desktopstartup script
Exec=/usr/bin/element-desktop --hidden
StartupNotify=false
Terminal=false

Element-Desktop basiert allerdings auf dem freien, plattformübergreifenden Electron-Framework, welches als Abhängigkeit mitinstalliert, aktualisiert und bei Ausführung von Element-Desktop dann zur Laufzeit im Hintergrund verwendet wird.

Aus irgendeinem Grund, schreibt das aktuelle Element-Desktop bei mir auf Arch/-Derivaten die Exec-Zeile neuerdings allerdings beim Aktivieren von "Minimiert" starten um:

Exec=/usr/lib/electron38/electron

Das sieht dann so aus, dass ein blankes Electron beim Login der Benutzer-Session erscheint – und sonst nichts mehr:

Hinweis: Element-Desktop ist bei mir aus nativen Paketen der jeweiligen Distribution installiert, also keine Container-Formate à la Flatpak etc.

Die Lösung ist nun, einen SystemD-Dienst so zu konfigurieren, dass er beim Log-in in die Benutzer-Sitzung jeweils das Programm Element-Desktop startet. Daher kann man als Erstes das minimierte Starten herausnehmen, da es ohnehin nicht funktioniert. Dazu "Öffne Element, wenn du dich an deinem Computer anmeldest" auf "Nein" umstellen.

  1. Eine Service-Datei (Klartext) erstellen, bei mir: ~/.config/systemd/user/element_minimized_starter.service

  2. Inhalt der Datei:

[Unit]
Description=Script Service for starting Element-Desktop
After=graphical-session.target

[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/usr/bin/element-desktop
Restart=no
StandardOutput=null

[Install]
WantedBy=graphical-session.target

Prinzipiell ließe sich übrigens analog auch jedes beliebige Skript auf diese Weise ausführen, man ist hier nicht auf GUI (oder CLI)-Programme beschränkt.

  1. Das Ganze lässt sich nun testen mit systemctl --user start element_minimized_starter

Hinweis: Obwohl die obige Service-Datei "element_minimized_starter.service" lautet, kann man sich die Extension an dieser Stelle sparen, das macht SystemD automatisch.

Der hier verwendete Schalter "--user" steuert benutzerspezifische Dienste (läuft nur im Kontext des eingeloggten Benutzers, ohne Root-Rechte). Der Aufruf von "systemctl" (ohne Schalter "--user") steuert systemweite Dienste (läuft unter Root, betrifft alle Benutzer).

Test: ein Blick in den Benachrichtigungsbereich → wird das Programm tatsächlich ausgeführt? Das Programmsymbol sollte geladen sein und beim Klick darauf das Programm in den Vordergrund bringen.

Der Status des Dienstes lässt jederzeit abfragen via systemctl --user status element_minimized_starter

  1. Der Dienst wurde so nur einmalig zum Testen gestartet. So automatisiert man den Dienst:

systemctl --user enable element_minimized_starter

Analoges Stoppen des Dienstes via systemctl --user stop element_minimized_starter und Entfernen des Dienstes mit systemctl --user disable element_minimized_starter.

Zur Dienst-Datei lässt sich anmerken, dass er erst beim Erreichen der grafischen Oberfläche gestartet werden soll, da es sich um ein Desktop-Programm handelt. Daher ist zu setzen: After=graphical-session.target

Für ein einfaches Shell-Script beispielsweise, würde es After=default.target tun.

Das Logging lässt sich in der Einstellung "StandardOutput" einstellen, z.b. StandardOutput=append:%h/systemd-user-log.txt

Diese Einstellung schreibt dann (jeweils hinzufügend) in die angegebene Datei im Home-Verzeichnis des eingeloggten Benutzers.

Verwendete Versionen

  • KDE Plasma Desktop 6.5.3
  • Element-Desktop 1.12.3
  • Electron 38.7.2 (wird von Element-Desktop benötigt)

Quellen:
[Artikel "Matrix/Element.io - Endlich eine freie Alternative zu Discord?"](https://gnulinux.ch/matrix-element-io-endlich-eine-freie-alternative-zu-discord)

Tags

SystemD, Login, Element-Desktop, Element, Electron

Es wurden noch keine Kommentare verfasst, sei der erste!