¿Cómo puedo iniciar gnome-terminal de forma remota en mi servidor sin cabeza? (no se puede iniciar mediante el reenvío X11)

¿Cómo puedo iniciar gnome-terminal de forma remota en mi servidor sin cabeza? (no se puede iniciar mediante el reenvío X11)

Tengo una máquina virtual sin cabeza (que ejecuta el servidor Ubuntu 17.04) a la que uso SSH para acceder. Me siento cómodo con los conceptos básicos del reenvío X11 y puedo reenviar xterm y amigos sin problemas. El terminal XFCE también reenvía OK.

Me gustaría poder utilizar la terminal Gnome, pero parece que no se inicia. En cambio, simplemente se cuelga por un tiempo y eventualmente falla con:

Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Error calling StartServiceByName for org.gnome.Terminal: Timeout was reached

Curiosamente, gnome-terminal funciona de forma remota a través de X11 si tengo una sesión de escritorio local ejecutándose en mi VM (iniciada a través de startx).

Supongo que es necesario ejecutar algún tipo de servicio Gnome, pero no puedo entender qué es ni cómo iniciarlo fuera del contexto de una sesión de escritorio completa. Normalmente no los ejecuto porque la VM no tiene cabeza de forma predeterminada.

¿Alguien tiene alguna idea sobre lo que podría hacer para que Gnome-terminal funcione de forma remota sin tener que iniciar una sesión de escritorio GUI localmente en mi VM?

Respuesta1

Eso no funciona porque gnome-terminal(como cualquier otrognome-thing) intentará conectarse a dbus y fallará después de no recibir una respuesta durante un largo tiempo.

La solución más sencilla es simplemente iniciar una instancia de dbus para su sesión:

export $(dbus-launch)
gnome-terminal

Si empezaste unwaylandsesión sobre elremotomáquina desde que ejecutó por primera vez export $(dbus-launch), tendrá que ejecutarlo nuevamente o, si no, gnome-terminaliniciará una instancia de Wayland gnome-terminalen la pantalla remota en lugar de una X11 en su pantalla reenviada.

Otra solución en este caso es ejecutar explícitamente un X11 gnome-terminal-serverque finalizará después de que se haya cerrado la última ventana que lo usó. Ejemplo:

#! /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

Respuesta2

Se puede hacer en Ubuntu básico o Debian usando solo:

ssh -X user@host dbus-launch gnome-terminal

En mis notas tengo banderas comunes sobre dbus-launchser: --exit-with-x11o--exit-with-session

El problema restante es que tardará un poco en cargarse.

En mi opinión, parece que el local gnome-terminalhabla con el control remoto gnome-terminal-server; requiere extraer el código y modificarlo, pero es un software bastante simple, demasiado simple.

Editar: Además, puede hacerlo sin necesidad del x11-dbuspaquete (que no está en Ubuntu de forma predeterminada, aunque es pequeño).

Esto no funciona en todas gnome-terminallas versiones pero lo probé en Ubuntu 22 y Debian 11 y funciona.

ssh -X user@host gnome-terminal --disable-factory

Existen diferencias entre estos enfoques más allá del estilo/longitud del comando del terminal.

El enfoque original dbus-launchlanzará la gnome-terminalinstancia gnome-terminal-serverdebido a cómo interactúa con la máquina remota.

Sin embargo, el --disable-factoryenfoque lanzará una gnome-terminalinstancia que funciona mejor con la base de Ubuntu 22, por ejemplo.

Espero que una de estas dos opciones satisfaga sus requisitos. También existen otros enfoques, pero en mi opinión estos son los mejores por lo fáciles que son.

Respuesta3

En su caso simple para el reenvío X11 desde una sola sesión, consulte https://askubuntu.com/a/1279065/463121

después de iniciar sesión:

$ dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY

y luego gnome-terminal es rápido y avanza bien sobre X11.

Si comienza a ir mal, tal vez los demonios dbus personales se hayan atascado, si puede eliminar todos los procesos de usuario e iniciar sesión nuevamente, está bien.

EDITAR: O incluso:

$ dbus-update-activation-environment --all

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

Respuesta4

Iniciar una aplicación a través de X puede ser muy lento.
He tenido mucho éxito al hacer túneles VNC sobre SSH con sistemas de clientes en todo el mundo.

En la máquina remota, instale un servidor VNC como Tigervnc e inicie el demonio. (yum install -y Tigervnc-server; vncserver:3 -o cualquier puerto que desee utilizar). Le pedirá que establezca una contraseña.

En la máquina local, instale el cliente VNC (yum install -y Tigervnc). Puede agregar "exec /usr/bin/gnome-terminal" a su archivo ~/.vnc/xstartup. luego ejecute: ssh -L 5903:localhost:5903 -N -f -l usuario IP-o-nombre-de-host-del-servidor-remoto El número de puerto aquí será 59 y el número de puerto que eligió

En otra terminal haz: vncviewer :3

Se le solicitará la contraseña establecida en el servidor.

información relacionada