Starten Sie GUI-Programme über den Hintergrunddienst in Linux

820
Jimmy

Ich habe ein Java-Programm geschrieben, um verschiedene Programme in Linux mit einer angefügten API zu starten. Ich möchte, dass dieses Java-Programm als Benutzer im Hintergrund ausgeführt wird und beim Systemstart automatisch gestartet wird. Ich habe versucht, die JAR-Datei von einem systemd-Dienst auszuführen, aber beim Versuch, GUI-Anwendungen zu starten, schlägt dies fehl.

Ich verstehe, dass zum Ausführen einer GUI-Anwendung zwei Umgebungsvariablen gesetzt werden müssen: DISPLAY und XAUTHORITY

Ich habe versucht, sie in der systemd-Servicedatei festzulegen, aber der Java-Prozess schlägt fehl, ein GUI-Programm zu starten. Beim Starten der JAR-Datei von einem Terminal aus können GUI-Anwendungen problemlos gestartet werden.

Kann dieses Problem mit systemd oder einem anderen Hintergrund-Daemon gelöst werden?

So sieht meine Servicedatei aus:

[Unit] Description=Application API After=network.target  [Service] User=me Environment=DISPLAY=:0 Environment=XAUTHORITY=/home/me/.Xauthority ExecStart=/usr/bin/java -jar /usr/local/bin/windows-application-launcher.jar SuccessExitStatus=143  [Install] WantedBy=multi-user.target 

Update: Es muss nur ausgeführt werden, wenn ich in meiner Desktopumgebung angemeldet bin.

0
Haben Sie sonst einen regulären grafischen Desktop auf diesem System? Verwendet es die automatische Anmeldung? grawity vor 7 Jahren 0
Es handelt sich um ein normales grafisches Desktopsystem, aber ich verwende keine automatische Anmeldung. Es muss jedoch nie eine Anwendung gestartet werden, wenn mein Benutzer nicht angemeldet ist und die Desktopumgebung ausgeführt wird. Jimmy vor 7 Jahren 0
Warum starten Sie es nicht als Teil eines Anmeldeprozesses? Fügen Sie dazu einfach eine .desktop-Datei in / etc / xdg / autostart hinzu (vollständige Spezifikation [hier] (https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html#startup)). xenoid vor 7 Jahren 0
@xenoid Das hat perfekt funktioniert, danke! Ich weiß nicht, warum ich selbst nicht daran gedacht habe. Betrachten Sie es als Antwort, um anderen das Auffinden zu erleichtern. Jimmy vor 7 Jahren 0
@Jimmy hinzugefügt (mit etwas mehr Details) xenoid vor 7 Jahren 0

1 Antwort auf die Frage

1
xenoid

Starten Sie Ihren Prozess als Teil des Anmeldeflusses.

  • So fügen Sie es für alle Benutzer hinzu: Fügen Sie eine .desktop-Datei hinzu /etc/xdg/autostart(vollständige Spezifikation hier ).
  • Um es nur für sich selbst hinzuzufügen, fügen Sie das .desktop hinzu ~/.config/autostart/. Ihr Desktop Manager verfügt wahrscheinlich über einige Einstellungsdialoge, um dies für Sie in KDE5 (Systemeinstellungen) auszuführen:Settings>Workspace>Startup and shutdown>Autostart
Ich habe das, was Sie oben gesagt haben, ausprobiert, aber ich bekomme den Status "Kein Protokoll angegeben". Ich stehe auch mit dem gleichen Szenario von Jimmy fest user744875 vor 7 Jahren 0
Seien Sie bitte expliziter, ich habe drei Dinge vorgeschlagen: 1) global, 2) persönlich über Datei und 3) persönlich über Einstellungen-App. 3) ist offensichtlich einfacher. Sie können auch einen beliebigen Anwendungsmenü-Editor verwenden, um ein .desktop zu erstellen (und zu testen) (dies sind nur "Verknüpfungen"). Sobald es funktioniert, verschieben Sie es einfach in das entsprechende Verzeichnis. Ansonsten Post .desktop verwendet. xenoid vor 7 Jahren 0