Ich versuche verschiedene Gnome-Anwendungen über X11 Forwarding und SSH auszuführen. Bei einigen Anwendungen wird zuerst die Anwendung 'dbus-launch' erzeugt. Das Problem ist, dass dbus-launch beim Beenden der X-Anwendung nicht geschlossen wird und daher beendet werden muss, bevor die SSH-Sitzung ordnungsgemäß geschlossen werden kann.
Ich gehe davon aus, dass das Problem darin besteht, dass die X / Gnome-Anwendungen keine Verbindung zum Hauptnachrichtenbus-Daemon herstellen können und daher eine eigene Kopie starten müssen. Wie kann ich das beheben? Oder was fehle ich?
Hier ist ein Beispiel. Ich habe die X11-Weiterleitung aktiviert, alles scheint gut zu funktionieren.
[me@host ~]$ gnome-calculator &
[1] 4803
(hier wird das Programm gcalctool gestartet und auf meinem X-Server (Xming) angezeigt)
[me@host ~]$ ps
PID TTY TIME CMD
4706 pts/0 00:00:00 bash
4803 pts/0 00:00:00 gnome-calculator
4807 pts/0 00:00:00 dbus-launch
4870 pts/0 00:00:00 ps
(Jetzt nach dem Schließen der gcalctool-App in der Remote-Sitzung)
[me@host ~]$ ps
PID TTY TIME CMD
4706 pts/0 00:00:00 bash
4807 pts/0 00:00:00 dbus-launch
4898 pts/0 00:00:00 ps
Beachten Sie, dass dbus-launch noch aktiv ist. Und das Schlimmste ist, dass dies verhindert, dass die SSH-Verbindung ordnungsgemäß geschlossen wird, bis sie beendet wird.
Beachten Sie, dass der systemweite Nachrichtendämon ausgeführt wird, wie hier zu sehen ist:
[me@host ~]$ ps ax
4696 ? Ssl 0:00 dbus-daemon --system
Was vermisse ich hier? Ich habe dieses Verhalten noch nie gesehen. Vermutlich habe ich bisher nur Anwendungen gesehen, die sich ungehindert mit dem Message Bus Daemon verbinden können? Ich habe in / etc / dbus-1 nach Antworten gesucht, weiß aber nicht, wonach ich suchen soll.
Vielen Dank im Voraus für die Hilfe.
[BEARBEITEN]
OK, mir ist klar, dass ich ein allgemeines Problem habe. Es scheint, dass dies ein ziemlich verbreitetes Verhalten ist, aber ohne eine gute Lösung. Ich habe das SSH-Problem, weil der dbus-Start im tty noch aktiv ist. Aber es scheint keine gute Möglichkeit zu geben, den Start von dbus ruhig zu gestalten.
Ein Blick auf /etc/X11/xinit/xinitrc.d/00-start-message-bus.sh gibt einen Hinweis darauf, was mit einer "normalen" X-Sitzung passieren soll. Dies funktioniert natürlich nicht, wenn Sie eine X-Anwendung nur auf einem Remote-X-Server aufrufen.
Als vorübergehende Problemumgehung habe ich Folgendes zu meinem .bash_logout hinzugefügt:
# ~/.bash_logout
pkill -u $USER -t `tty | cut -d '/' -f 3,4` dbus-launch
Auf diese Weise kann die SSH-Sitzung geschlossen werden, fühlt sich jedoch klobig an. Gibt es da draußen bessere Lösungen? Was ist der richtige Weg, um entfernte X11-Anwendungen auszuführen, ohne dass dbus stört?
Ich frage mich, ob das Problem nicht auf eine unbekannte oder unaufhaltsame dbus-Sitzung zurückzuführen ist.
Wenn eine SSH-Sitzung geöffnet ist, wird keine dbus-Sitzung gestartet. Einige Programme starten es möglicherweise, aber die Sitzung weiß nichts davon (kann es daher nicht schließen).
Wenn Sie nichts über die dbus-Sitzung wissen, bedeutet dies auch, dass Programme, die dbus verwenden, aber nicht selbst starten, Probleme haben.
dbus-Abschnitte sind pro Maschine und pro X11-Display. Ihre Informationen werden in $ HOME / .dbus / session-bus / gespeichert. Der dort angegebene Prozess kann jedoch geschlossen werden. Daher ist eine zusätzliche Überprüfung erforderlich, um festzustellen, ob der Start von dbus erforderlich ist oder nicht. Anschließend werden die dortigen Variablen in die Sitzung exportiert.
Dann funktioniert es wie ein Zauber :)
Ich füge Folgendes in meine .bash_profile-Datei ein:
Anmerkungen: hostnamectl ist Teil von systemd und ermöglicht das Abrufen der Rechner-ID. Der dbus-Start zeigt die gewünschten Variablen an. Mit Hilfe
export $(dbus-launch)
von rufen wir die Ausgabe von dbus-launch ab und exportieren die VariablenWenn Sie möchten, dass es auf einer nicht interaktiven Sitzung ausgeführt wird (z. B. wenn Sie einen Befehl von ssh ausführen), versuchen Sie es stattdessen in .bashrc (achten Sie jedoch darauf, dass bashrc bei JEDER geöffneten Shell ausgeführt wird).
quelle
Ich hatte das gleiche Problem beim Versuch, einen Remote-X-Befehl auszuführen und die Sitzung zu beenden, nachdem das X-Tool beendet wurde.
Also wollte ich rennen
Musste aber benutzen:
Nach dem Schließen von Firefox würde dies auch die SSH-Sitzung schließen.
Update :
Dies scheint eine Last von Dbus-Daemon-Prozessen zu hinterlassen, die auf dem Server ausgeführt werden. Dies ist also nicht optimal. Das Hinzufügen von --exit-with-session für beide Konten hilft nicht, da hierdurch das ursprüngliche Verhalten wiederhergestellt wird
Update 2 : Dies funktioniert, wenn ich einfache Anführungszeichen verwende (wie von @lobo vorgeschlagen) und
kill -TERM $DBUS_SESSION_BUS_PID
die verbleibenden dbus-daemon-Prozesse hinzufüge , wie von Holgr Joukl unter https://blog.dhampir.no/content/how- vorgeschlagen. zu verhindern , -SSH-x-from-hanging-on-exit-when-dbus-is-verwendet )quelle
dbus-launch
wird es lokal ausgeführt ), aber dann funktioniert es. Vielen Dank!