Ich habe eine Headless-VM (mit Ubuntu Server 17.04), auf die ich per SSH zugreife. Ich bin mit den Grundlagen der X11-Weiterleitung vertraut und kann xterm und Freunde problemlos weiterleiten. Das XFCE-Terminal leitet auch problemlos weiter.
Ich würde gern das Gnome-Terminal verwenden, aber es scheint nicht zu starten. Stattdessen bleibt es eine Weile hängen und gibt schließlich die folgende Fehlermeldung aus:
Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Error calling StartServiceByName for org.gnome.Terminal: Timeout was reached
Interessanterweise funktioniert Gnome-Terminal remote über X11, wenn auf meiner VM eine lokale Desktop-Sitzung ausgeführt wird (gestartet über Startx).
Ich vermute, dass eine Art Gnome-Dienst ausgeführt werden muss, aber ich kann nicht herausfinden, was das ist oder wie man ihn außerhalb einer vollständigen Desktop-Sitzung startet. Normalerweise starte ich diese Dienste nicht, da die VM standardmäßig ohne Monitor ist.
Hat jemand eine Idee, was ich tun kann, um das Gnome-Terminal remote zum Laufen zu bringen, ohne lokal auf meiner VM eine GUI-Desktopsitzung starten zu müssen?
Antwort1
Das funktioniert nicht, weil gnome-terminal
(wie jede anderegnome-thing
) versucht, eine Verbindung zu dbus herzustellen, und schlägt fehl, nachdem längere Zeit keine Antwort empfangen wurde.
Die einfachste Problemumgehung besteht darin, einfach eine Dbus-Instanz für Ihre Sitzung zu starten:
export $(dbus-launch)
gnome-terminal
Wenn Sie einWaylandSitzung über dieFernbedienungMaschine, seit Sie es zum ersten Mal ausgeführt haben export $(dbus-launch)
. Sie müssen es erneut ausführen. Andernfalls wird eine Wayland-Instanz von auf dem Remote-Display anstelle einer X11-Instanz auf Ihrem weitergeleiteten Display gnome-terminal
gestartet .gnome-terminal
Ein weiterer Workaround in diesem Fall ist, explizit ein X11 auszuführen gnome-terminal-server
, das beendet wird, nachdem das letzte Fenster, das es verwendet, geschlossen wurde. Beispiel:
#! /bin/bash
ID=foo.bar$RANDOM
GDK_BACKEND=x11 /usr/libexec/gnome-terminal-server --app-id "$ID" &
sleep .4 # yuck
gnome-terminal --app-id "$ID"
wait
Antwort2
Dies kann in Vanilla Ubuntu oder Debian einfach mit folgendem Befehl erledigt werden:
ssh -X user@host dbus-launch gnome-terminal
In meinen Notizen habe ich allgemeine Markierungen für dbus-launch
: --exit-with-x11
oder--exit-with-session
Das verbleibende Problem ist, dass das Laden eine Weile dauert.
Meiner Ansicht nach scheint es so, als ob die lokale gnome-terminal
Verbindung zur Fernbedienung hergestellt gnome-terminal-server
werden müsste. Dazu müsste der Code heruntergeladen und geändert werden, aber es handelt sich um eine ziemlich einfache Software, zu einfach.
Bearbeiten: Darüber hinaus können Sie es tun, ohne das x11-dbus
Paket zu benötigen (das in Ubuntu standardmäßig nicht vorhanden ist, obwohl es klein ist).
Dies funktioniert nicht auf allen gnome-terminal
Versionen, aber ich habe es auf Ubuntu 22 und Debian 11 getestet und es funktioniert.
ssh -X user@host gnome-terminal --disable-factory
Die Unterschiede zwischen diesen Ansätzen gehen über den Stil/die Länge des Terminalbefehls hinaus.
Beim ursprünglichen Ansatz wird die Instanz aufgrund der Art und Weise dbus-launch
gestartet , wie sie mit der Remote-Maschine interagiert.gnome-terminal
gnome-terminal-server
Bei diesem Ansatz wird jedoch --disable-factory
eine Instanz gestartet gnome-terminal
, die beispielsweise nahtloser mit dem Ubuntu 22-Dock funktioniert.
Ich hoffe, dass eine dieser beiden Optionen Ihren Anforderungen entspricht. Es gibt auch andere Ansätze, aber meiner Meinung nach sind diese aufgrund ihrer Einfachheit die besten.
Antwort3
In Ihrem einfachen Fall für die X11-Weiterleitung aus einer einzelnen Sitzung siehe https://askubuntu.com/a/1279065/463121
nach dem Einloggen:
$ dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY
und dann ist Gnome-Terminal schnell und leitet problemlos über X11 weiter.
Wenn etwas schief geht, sind vielleicht die persönlichen DBus-Daemons hängen geblieben. Wenn Sie alle Ihre Benutzerprozesse beenden und sich erneut anmelden können, ist alles in Ordnung.
EDIT: Oder sogar:
$ dbus-update-activation-environment --all
Antwort4
Das Starten einer App über X kann sehr langsam sein.
Ich hatte viel Erfolg mit dem Tunneln von VNC über SSH mit Kundensystemen auf der ganzen Welt.
Installieren Sie auf dem Remote-Computer einen VNC-Server wie Tigervnc und starten Sie den Daemon. (yum install -y tigervnc-server ; vncserver :3 - oder welchen Port Sie auch immer verwenden möchten). Sie werden aufgefordert, ein Passwort festzulegen.
Installieren Sie auf dem lokalen Rechner den VNC-Client (yum install -y tigervnc). Sie können "exec /usr/bin/gnome-terminal" zu Ihrer Datei ~/.vnc/xstartup hinzufügen. Führen Sie dann Folgendes aus: ssh -L 5903:localhost:5903 -N -f -l user remote-server-IP-or-hostname Die Portnummer ist hier 59 und die von Ihnen gewählte Portnummer
Geben Sie in einem anderen Terminal Folgendes ein: vncviewer :3
Sie sollten zur Eingabe des auf dem Server festgelegten Kennworts aufgefordert werden.