Sie können eine grafische Anwendung nicht über upstart oder ein anderes init-System starten, da zum Zeitpunkt des Starts X (die grafische Umgebung) noch nicht gestartet ist.
In Windows ist die grafische Umgebung ein wesentlicher Bestandteil des Betriebssystems. Selbst Windows Server Core ist im Herzen grafisch (obwohl Sie nur ein Eingabeaufforderungsfenster sehen). Linux dagegen geht den umgekehrten Weg ein: Das System selbst ist nur textbasiert, und die grafische Umgebung wird von einer darüber ausgeführten Benutzerraumanwendung bereitgestellt.
Leider gibt es keine einfache Möglichkeit, das zu tun, was Sie danach scheinen.
Das heißt, Sie können die Einschränkung umgehen. In vielen Desktop-Umgebungen kann eine Liste von Anwendungen definiert werden, die beim Anmelden gestartet werden (oder genauer gesagt, die Desktop-Umgebung wird gestartet). Sie könnten ein Skript schreiben, das die Anwendung in einer engen Schleife startet und das Programm beendet, wenn die Anwendung mit einem Exit-Status von Null beendet wird (was für das erfolgreiche Beenden ohne Problem normal ist). Ob dies für Sie funktioniert oder nicht, hängt von Ihrer Definition des "unerwarteten Beendigungsprozesses" ab.
Eine naiive-Implementierung könnte etwa so aussehen:
#!/bin/bash while true do my-app || exit Xdialog --timeout 15 --yesno "Program exited. Restart it?" 2 50 test "$?" = "0" -o "$?" = "255" || exit done
Das ||
bedeutet "führt Folgendes aus, wenn der Exit-Status des vorherigen nicht Null war" (es wird "oder" gelesen). In der Xdialog-Dokumentation erfahren Sie, wie das funktioniert. Im Grunde werden Sie gefragt, ob Sie das Programm weiterhin ausführen möchten. Wenn Sie innerhalb von 15 Sekunden mit Ja antworten oder gar nichts beantworten, wird das Programm erneut gestartet, indem Sie die Schleife erneut ausführen. Machen Sie die Skriptdatei zu einer ausführbaren Datei und richten Sie Ihre Desktop-Umgebung beim Starten beim Anmelden aus. Sie my-app
wird ausgeführt, bis Sie sie explizit schließen und dem System mitteilen, dass Sie es nicht neu starten möchten.