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.
-
Eine Service-Datei (Klartext) erstellen, bei mir:
~/.config/systemd/user/element_minimized_starter.service -
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.
- 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
- 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)





