Imprimir

Sesión X Window remota con SSH

Este método entunela las X mediante SSH, de manera que toda la información circula cifrada por la red, a diferencia del protocolo XDMCP que trasmite la información sin cifrar. SSH utiliza el puerto 22 TCP, por lo que tendremos que abrirlo en el firewall. (Puede usarse Telnet pero usaremos SSH por seguridad).

  • Abriremos una sesión X en el host cliente utilizando el comando xinit (no usaremos startx, ya que lanza el window manager):
    $ xinit

    Obtendremos una sesión X en la primera tty libre (si no tenemos otra sesión gráfica abierta será la terminal tty7) con un xterm abierto. En ese xterm ejecutaremos el comando:

    $ xhost +nombre_de_host

    Atención

    Nunca usaremos el comando xhost +, ya que permite a cualquier cliente conectarse y tomar el control de las X. Siempre especificaremos un host.

  • A continuación, abriremos una sesión SSH en el servidor desde cualquier terminal del host cliente, ejecutando en el host cliente el comando:
    $ ssh <IP_servidor>

    Por ejemplo:

    $ ssh 192.168.1.3
  • En la terminal SSH, estableceremos el valor de la variable DISPLAY, ejecutando el comando:
    $ export DISPLAY=<IP_host_cliente>:0

    Por ejemplo:

    $ export DISPLAY=192.168.1.2:0
  • Por último, ejecutaremos en la terminal SSH el comando que lanza el window manager (por ejemplo, icewm-session):
    $ icewm-session

    De esta manera obtendremos en la terminal tty7 la sesión X remota.

    En el host cliente tendremos activos los procesos servidor X (Xorg) y xterm, que cuelgan de xinit, y ssh:

    $ pstree
    init-+-
         |-login---bash-+-xinit-+-Xorg
                        |       |-xterm---bash
                        |-ssh

    Y en el servidor tendremos activo el proceso window manager (por ejemplo, icewm-session), que cuelga del demonio sshd:

    $ pstree
    init-+-
         |-sshd---sshd---bash---icewm-session
  • Si ya teníamos en el host cliente una sesión X local abierta, para iniciar una sesión X remota tendremos que especificar el DISPLAY tanto al lanzar xinit:
    $ xinit -- :1
    $ xhost +

    como al exportar la variable DISPLAY en la terminal SSH:

    $ export DISPLAY=192.168.1.2:1
    $ icewm-session

    Obtendremos una sesión X en la primera tty libre (por ejemplo la terminal tty8).

  • De la misma manera, si queremos abrir otra sesión X remota en el host cliente tendremos que especificar el DISPLAY tanto al lanzar xinit:
    $ xinit -- :2 &
    $ xhost +

    como al exportar la variable DISPLAY en la terminal SSH:

    $ export DISPLAY=192.168.1.2:2
    $ icewm-session

    Obtendremos una sesión X en la primera tty libre (por ejemplo la terminal tty9).

    En el host cliente tendremos activos los procesos:

    $ pstree
    init-+-
         |-login---bash-+-xinit-+-Xorg
         |              |       |-xterm---bash
         |              |-ssh
         |-login---bash-+-xinit-+-Xorg
                        |       |-xterm---bash
                        |-ssh

    Y en el servidor tendremos activos los procesos:

    $ pstree
    init-+-
         |-sshd-+-sshd---bash---icewm-session
                |-sshd---bash---icewm-session

8 Comentarios en “Sesión X Window remota con SSH”

  • David dice:

    Muy buen texto, bien explicado. Aunque tengo una pregunta. ¿Desde Windows XP se puede tener acceso por SSH a un host con Gnu/Linux? Gracias.

  • crash-n-burn dice:

    David, es perfectamente posible acceder desde Windows mediante SSH a un host GNU/Linux, sólo necesitas un cliente SSH para Windows, como Putty. Más info en Conexión remota segura en Linux: SSH

  • Mikel dice:

    Hola, estoy intentando seguir los pasos que marcas, pero tengo un problema. Al conectar remotamente por ssh e intentar cambiar el display mediante export DISPLAY=xxx.xxx.xxx:0.0 en realidad aunque por ssh al hacer un echo $DISPLAY vea que se ha cambiado bien el valor, si voy al ordenador al que me había conectado de forma remota mediante ssh, y ejecutar ahí el echo $DISPLAY me sale :0.0.
    Es decir, no lo ha cambiado aunque desde ssh me diga que sí. Si lo cambio de forma presencial el display en el ordenador remoto, sí que me funciona ya todo.
    ¿Sabes a qué se puede deber esto?
    Un saludo,
    Mikel

  • miguel dice:

    ¿y como hago para ver el escritorio de una maquina con XP desde una tty de linux?

    Saludos

  • Iban martin dice:

    He tenido algunos problemillas..
    $ xinit — :1 ———–>funciona
    $ xhost + ———–>funciona
    $ export DISPLAY=192.168.1.2:2 ———–>funciona
    hasta aqui todo bien

    $ startxfc4 ————>No funciona :(
    $sudo startxfc4 ———–>funciona

    Luego me doy cuenta que no tiene permiso en un archivo llamado .ICEauthority
    que esta en el directorio home de usuario. de 600 le cambio a 666
    $ startxfc4 ————>funciona

    ¿Si lo dejo con esos permisos me trae algun otro problema?
    Si cambio de terminal se pierde..¿Existe alguna manera de que no pierda?

    Cuando hago un pstree me sale algo asi.. No como a ti..
    $ pstree
    init-+-
    |-login—bash-+-xinit-+-Xorg
    |-xterm—bash—ssh
    ¿Estoy haciendo algo mal?
    Salu2

  • il Santi dice:

    Muchísimas gracias… me sirvió espectacular, lo único que te faltó es que si ya existe una sesión X iniciada en el Display 0, hay que escribir

    #: xinit — :1 (o 2 o el número tty que se desee)

    y donde corresponda:

    #: export DISPLAY=:1 (o 2 o el número tty que se puso anteriormente)

    Saludos!

  • maro dice:

    GROSOOOOOOO

    Me sirvió de mucho lo del export DISPLAY!!! Muchas Gracias!!!

  • SEG dice:

    Solo les quería comentar que esto me sirvio para conectarme remotamente con sesión gráfica a mi fedora 13 desde mi MAC con snow leopard.

    Así tal cual como viene aqui.

    De hecho no funcionó el google crome por ejemplo (lo despliega en localhost) pero jdownloader lo desplegó remotamente sin problemas…

    Saludos y gracias.

Deja un comentario