Desktop-Programm beim Login als systemd-Service starten

  Prof.P   Lesezeit: 3 Minuten  🗪 6 Kommentare 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

Naja
Geschrieben von Naja am 5. Dezember 2025 um 18:07

Ich hab nicht ganz verstanden, warum du nicht einfach die autostart-Datei anpasst, so wie du sie brauchst? Dann die Datei ggf. readonly setzen um sie vor überschreiben zu schützen.

Und in deiner service-Datei finde ich keine Anweisung zum minimierten Start, wie geschieht das dann? Hab ich was übersehen?

Prof.P
Geschrieben von Prof.P am 5. Dezember 2025 um 22:50
  • Normales Autostart verwenden hatte nichts gebracht, ebenso das Anpassen der Exec-Zeile; außerdem hat Element meine angepasste Datei sowieso bei jedem Aus/Ein der "automatisch Starten" Funktion überschrieben.

  • Anscheinend startet SystemD mein Desktop-Programm schon in den Hintergrund, daher kein "--minimized" mehr notwendig. Im Gegenteil, wenn ich das nutze, wird das Icon zwar auch geladen, aber der erste Klick darauf ist ohne Wirkung! Muss dann immer zwei mal Klicken.

Naja
Geschrieben von Naja am 6. Dezember 2025 um 19:25

Mysteriös! Danke für die Rückmeldung.

Toolted
Geschrieben von Toolted am 6. Dezember 2025 um 11:04

Interessant was so möglich ist. Ich sehe für mich nicht den Mehrwert bei dem Aufwand der dafür notwendig ist.

Prof.P
Geschrieben von Prof.P am 6. Dezember 2025 um 21:50

Leider habe ich das gebraucht, da ich das Icon gerne für meine Messenger im Autostart/SysTray habe. Es ging nur via SystemD. Mag ja bald gefixed werden, es ging ja vorher auch.

DO8PGG
Geschrieben von DO8PGG am 8. Dezember 2025 um 09:05

Systemd oder systemd. Aber nicht SystemD oder systemD.