¿Por qué no puedo ejecutar aplicaciones Gnome en una sesión SSH remota?

9

Iniciando sesión en un host remoto usando ssh -X me@host, ejecuto con éxito gnome-terminal -e "tail -F /var/log/file" &. Cuando cierro la sesión y luego intento lo mismo al día siguiente, obtengo esto:

No se pudo obtener el bus de sesión: no se pudo conectar a socket / tmp / dbus-K99gT9yDjS: se rechazó la conexión Volver al modo no de fábrica. No se pudo convocar al demonio GConf; saliendo Error al contactar con el servidor de configuración; Algunas causas posibles son que necesita habilitar la red TCP / IP para ORBit, o tiene bloqueos NFS obsoletos debido a un bloqueo del sistema. Consulte http://projects.gnome.org/gconf/ para obtener información. (Detalles - 1: Error al obtener la conexión a la sesión: Error al conectarse al socket / tmp / dbus-K99gT9yDjS: Conexión rechazada)

¿Cómo ejecuto gnome-terminal en esta situación?

hora de regreso
fuente
No veo que se haga una pregunta aquí. Deberías hacer algo al respecto antes de que se cierre tu publicación.
Agi Hammerthief
Es posible que desee eliminar la parte de 'solución' de su pregunta y enviarla como respuesta. Ese es un comportamiento aceptable.
Agi Hammerthief
Si inicia sesión en otra máquina con SSH, obtendrá acceso de shell / terminal. No necesita abrir una ventana de terminal en esa máquina. Puede ejecutar comandos directamente en esa máquina escribiéndolos en el terminal de su máquina.
Agi Hammerthief
2
Como dice Nigel Nquande, presione el botón responder a su propia pregunta y copie y pegue la sección Solución en la respuesta. No solo es aceptable, es alentado.
derobert
2
Mientras tanto, he eliminado la solución de su pregunta, ya que no es una pregunta. Este tipo de pregunta con respuesta propia es más que bienvenida, pero publique las respuestas como respuestas . Eche un vistazo a nuestro centro de ayuda o realice el recorrido de 10 segundos para obtener más información. Puede ver el texto original (por lo que no necesita volver a escribirlo) en el historial de edición al que puede acceder haciendo clic en el enlace "Editado hace X minutos".
terdon

Respuestas:

7

De hecho, cuando una sesión SSH está abierta, no inicia una sesión dbus. Algunos programas pueden iniciarlo, pero la sesión no lo sabe (por lo tanto, no puede cerrarlo).

No saber acerca de la sesión dbus también significa que los programas que usan dbus pero no lo inician por sí mismos tendrán problemas.

Las secciones dbus son por máquina y por pantalla X11. Su información se almacena en $ HOME / .dbus / session-bus / - sin embargo, el proceso al que se hace referencia allí puede estar cerrado, por lo que se necesita una verificación adicional para determinar si es necesario iniciar dbus o no. Luego, las variables allí se exportarán a la sesión.

Entonces funciona como un encanto :)

Puse lo siguiente en mi archivo .bash_profile:

# set dbus for remote SSH connections
if [ -n "$SSH_CLIENT" -a -n "$DISPLAY" ]; then
    machine_id=$(LANGUAGE=C hostnamectl|grep 'Machine ID:'| sed 's/^.*: //')
    x_display=$(echo $DISPLAY|sed 's/^.*:\([0-9]\+\)\(\.[0-9]\+\)*$/\1/')
    dbus_session_file="$HOME/.dbus/session-bus/${machine_id}-${x_display}"
    if [ -r "$dbus_session_file" ]; then
            export $(grep '^DBUS.*=' "$dbus_session_file")
            # check if PID still running, if not launch dbus
            ps $DBUS_SESSION_BUS_PID | tail -1 | grep dbus-daemon >& /dev/null
            [ "$?" != "0" ] && export $(dbus-launch) >& /dev/null
    else
            export $(dbus-launch) >& /dev/null
    fi
fi

notas: hostnamectl es parte de systemd y permite recuperar la identificación de la máquina, el dbus-launch muestra las variables que queremos; al usar export $(dbus-launch)recuperamos la salida de dbus-launch y exportamos las variables

Pablo Saratxaga
fuente
5

Ninguna de las respuestas anteriores funcionó en mi caso, pero el lanzamiento de la aplicación a través de dbus-launch hizo el trabajo:

ssh myhost "dbus-launch gnome-terminal --display localhost:10.0 &"
sabst
fuente
3

Encontré esto:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=639261

Lo que me llevó a probar esto:

$ sudo rm /var/lib/dbus/machine-id
$ sudo service messagebus restart

¡Ahora puedo ejecutar gnome-terminal!

hora de regreso
fuente
2
Increíblemente, funcionó también en 16.04. Solo tuve que cambiar el comando de reinicio a sudo service dbus restart. ¡Gracias!
Avio
Warning️ Advertencia: reiniciar dbus probablemente reiniciará toda su sesión X
Adam Katz
1

Solo corre:

> dbus-launch gnome-terminal
Ari
fuente
1
¿Por qué esto ayudaría?
DarkHeart
1
Esto también funcionó para mí. No tengo ni idea de porqué.
Robert Lugg
0

Interesante ... solo reiniciar dbus no funcionó para mí, también tuve que eliminar el archivo de identificación de la máquina y reiniciar.

$ rcdbus stop
$ rm /var/lib/dbus/machine-id
$ rcdbus start

Esto estaba en un servidor SLES 11.4 que había clonado recientemente en VMWare. Mi problema era que no podía iniciar yast2 o gedit ...

Estos fueron los errores que estaba viendo en la línea de comando:

yast2

** (y2controlcenter-gnome:9981): WARNING **: error accessing /desktop/gnome/lockdown/disable_command_line [Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for ORBit, or you have stale NFS locks due to a system crash. See http://projects.gnome.org/gconf/ for information. (Details -  1: Failed to get connection to session: Failed to connect to socket /tmp/dbus-W7H31tbhVY: Connection refused)]


** (y2controlcenter-gnome:9981): WARNING **:
GError raised: [Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for ORBit, or you have stale NFS locks due to a system crash. See http://projects.gnome.org/gconf/ for information. (Details -  1: Failed to get connection to session: Failed to connect to socket /tmp/dbus-W7H31tbhVY: Connection refused)]

user_message: [libslab_get_gconf_value: error getting /desktop/gnome/applications/main-menu/lock-down/user_modifiable_apps] 

¡Gracias por el consejo!

Ernie
fuente
-2

Prueba esto:

rm $HOME/.dbus/session-bus/*
Isaac
fuente