
Gibt es eine Möglichkeit, ein Programm von einem Terminal aus, das kein „Kind“ des Fenstermanagers (z. B. XFCE) ist, in einem Fenstermanager zu starten?
Das ausgeführte Programm muss vom Terminal (und meiner aktuellen Verbindung zum Server) getrennt werden, damit es nach dem Schließen der Terminalsitzung aktiv bleibt.
Ein Beispiel wäre, mich per SSH (ohne X-Forward o.ä.) mit einem Server zu verbinden, einen Browser zu starten, die Verbindung zu schließen. Vor dem Server sitzen und den zuletzt geöffneten Browser verwenden, der noch läuft, losgelöst von meiner SSH-Sitzung mit einem neuen „Besitzer“, dem Fenstermanager.
Antwort1
Die üblichen Methoden zum Trennen eines Prozesses von der Shell sind:
Führen Sie es im Hintergrund mit aus
&
und fordern Sie die Shell dann auf, die Verfolgung mit folgendem Befehl zu beendendisown
:$ xterm & $ disown
(oder
xterm & disown
)Führen Sie es im Hintergrund mit aus
&
und verwenden Sie dasnohup
Tool, um zu verhindern, dass es beendet wird:$ nohup xterm &
Führen Sie es im Hintergrund mit aus
&
und verwenden Sie Double-Fork, um zu verhindern, dass es von der Shell verfolgt wird:$ (xterm &)
im Hintergrund ausführen mit
setsid
:$ setsid xterm
(Probieren Sie es aus (setsid xterm &)
, wenn einige Optionen nicht funktionieren.)
Antwort2
xterm -e "bash -c \"./script.sh; exec bash\"" &
wo ./script.sh
kann nur ein Befehl sein.
Antwort3
Melden Sie sich per SSH bei der Maschine an, auf der der X-Server läuft, und führen Sie Folgendes aus:
DISPLAY=:0 xterm &
Sie sollten ein xterm auf Ihrem X-Display erhalten und es sollte geöffnet bleiben, auch wenn Sie die SSH-Sitzung schließen.
X11-Anwendungen verwenden die DISPLAY
Umgebungsvariable, um den X-Server zu finden. Der typische Wert ist :0
, was bedeutet, dass X11-Anwendungen über den Unix-Domain-Socket eine Verbindung zu einem lokalen X-Server herstellen sollten /tmp/X11-unix/X0
.
Anwendungen, die innerhalb einer X-Sitzung gestartet werden, erben eine DISPLAY
Umgebungsvariable, die auf den X-Server verweist. Prozesse, die außerhalb einer X-Sitzung gestartet werden (z. B. ein SSH-Login), verfügen jedoch nicht über diese Variable. Aus diesem Grund müssen Sie sie explizit festlegen, wenn Sie eine X11-Anwendung über einen SSH-Login starten.