Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Uso de VNC: Escritorio remoto. Compartir escritorio.

VNC (Virtual Network Computing/Computer) permite utilizar una sesión gráfica de un equipo desde otro. Hay servidores y clientes disponibles para los principales SO como GNU/Linux, Mac, Windows…
La sesión gráfica puede ser la misma que se utiliza desde la consola del equipo u otra diferente, siempre que lo permita el sistema operativo. Así se puede compartir una sesión, útil para dar soporte remoto, por ejemplo; o bien se puede utilizar una sesión totalmente independiente.

Siendo VNC (incluido su protocolo) software libre, existen múltiples versiones del servidor (vncserver) y del cliente (vncviewer). No es el objeto de este artículo comentar las ventajas e inconvenientes de cada uno. Las diferentes versiones tienen diferentes optimizaciones, algunos permiten claves de “solo lectura”… Pero en lo principal siguen el estándar y no se diferencian.

Con GNU/Linux, en algunas situaciones, en vez de usar VNC puede ser mejor usar ssh con reenvío de las X (ssh -X servidor; ver Túneles SSH).

Servidor

Por un lado tenemos x11vnc que se usa para compartir una sesión gráfica y por tanto se ha de lanzar desde una sesión con entorno gráfico.
Por otro lado tenemos vncserver que genera diferentes instancias de las X. Se usa por tanto para generar nuevos escritorios independientes.

Compartir escritorio (x11vnc)

Se instala con el previsible:

# aptitude install x11vnc

Y su uso más sencillo es:

$ x11vnc -many

Aunque esto es inseguro.

Para mejorar un poco la situación se recomienda crear una clave (por omisión en ~/.vnc/passwd):

$ x11vnc -storepasswd

Y después lanzar el servidor

$ x11vnc -usepw

Si queremos poner la clave en otro fichero podemos usar:

$ x11vnc -storepasswd /path/to/file
$ x11vnc -rfbauth /path/to/passfile

Generar nuevos escritorios (vncserver)

vncserver es provisto por diferentes programas, como tightvncserver y vnc4server. Podemos instalarlos así (solo es necesario uno):

# aptitude install tightvncserver
# aptitude install vnc4server

Para generar un nuevo escritorio simplemente hacemos:

$ vncserver
New 'servidor:1 (usuario)' desktop is servidor:1

Starting applications specified in /home/usuario/.vnc/xstartup
Log file is /home/usuario/.vnc/servidor:1.log

Nota: Si no existe una clave , por ejemplo la primera vez que se utiliza, solicita al menos una nueva clave. Puede generarse una clave añadida que permita únicamente ver el escritorio pero no interactuar.

You will require a password to access your desktops.

Password: 
Warning: password truncated to the length of 8.
Verify:   
Would you like to enter a view-only password (y/n)? n

Para matar un escritorio hacemos:

$ vncserver -kill :1

Si queremos optimizar la conexión, lo que generalmente ocurre si la conexión no se realiza en una red local, podemos hacer:

$ vncserver :1 -geometry 1024×768 -depth 16 -pixelformat rgb565

Cliente (vncviewer)

El uso del cliente es independiente de si el servidor está compartiendo un entorno gráfico (x11vnc) o generando uno independiente (vncserver).
De nuevo existen múltiples versiones del cliente que proveen el programa vncviewer. Por ejemplo:

# aptitude install xtightvncviewer

Para conectar con el servidor hacemos:

$ vncviewer servidor:puerto
Connected to RFB server, using protocol version 3.8
Enabling TightVNC protocol extensions
Performing standard VNC authentication
Password: 

A la hora de indicar el puerto podemos simplemente indicar el número del escritorio. Este número lo indica el servidor y suele ser el 0 para el escritorio disponible en consola (compartido por x11vnc), el 1 el primer escritorio generado por vncserver…
En todo caso el servidor lo indica en su ejecución (en el ejemplo de arriba “servidor:1″).

Esto no siempre funciona bien fuera de una red local por lo que es mejor indicar el puerto. Por omisión el puerto utilizado es el 590x (5900 para el :0, 5901 para el :1…).

Si conectamos a un equipo a través de una red lenta podemos hacer:

$ vncviewer -encodings “copyrect hextile” servidor:5901

VNC a través de túnel SSH

El protocolo VNC es inseguro. Aunque algunas versiones de servidor vnc implementan capas de SSL, el sistema más estándar es utilizar un túnel ssh:

$ ssh servidor -N -f -L 5901:localhost:5901
$ vncviewer -encodings "copyrect hextile" localhost:5901

Como para VNC la conexión es a un puerto local, por defecto no comprime la comunicación (indica “Same machine: preferring raw encoding”), por eso forzamos la compresión con el parámetro -encodings “copyrect hextile” (ver un poco más arriba como optimizar desde el lado del servidor -vncserver-).

Categoría: GNU/Linux, Redes