Wie kann ich Gnome-Terminal remote auf meinem Headless-Server starten? (Start über X11-Weiterleitung schlägt fehl)

Wie kann ich Gnome-Terminal remote auf meinem Headless-Server starten? (Start über X11-Weiterleitung schlägt fehl)

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-terminalgestartet .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-x11oder--exit-with-session

Das verbleibende Problem ist, dass das Laden eine Weile dauert.

Meiner Ansicht nach scheint es so, als ob die lokale gnome-terminalVerbindung zur Fernbedienung hergestellt gnome-terminal-serverwerden 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-dbusPaket zu benötigen (das in Ubuntu standardmäßig nicht vorhanden ist, obwohl es klein ist).

Dies funktioniert nicht auf allen gnome-terminalVersionen, 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-launchgestartet , wie sie mit der Remote-Maschine interagiert.gnome-terminalgnome-terminal-server

Bei diesem Ansatz wird jedoch --disable-factoryeine 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

aushttps://unix.stackexchange.com/a/243696/139357

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.

verwandte Informationen