Cómo iniciar un servidor vnc para la visualización real (scraping) con TigerVNC

VNC es una aplicación para compartir escritorios (Virtual Network Computing) que permite conectar y controlar el escritorio de un ordenador (remoto o local) a través de una conexión de red.

Sin embargo, en los sistemas linux, muchas aplicaciones de servidor VNC sólo permiten conectarse a un escritorio virtual y no al real. Este howto te ofrece una solución, para conectarte mediante el servidor TigerVNC a la sesión real activa en tu escritorio Linux.

Requisitos

  • Un entorno de escritorio linux completamente funcional
  • privilegio de root (para instalar el servidor TigerVNC)
  • conocimientos básicos del shell de linux

Para obtener los últimos paquetes, es posible que quieras actualizarte.

user@hostname:~$ sudo apt-get update

Este howto ha sido probado en Debian/GNU Linux 9.5 (stretch) y Ubuntu 18.04

Instalar TigerVNC

Primero tienes que instalar el servidor TigerVNC.

user@hostname:~$ sudo apt-get install tigervnc-scraping-server

Ten en cuenta que en la mayoría de los sistemas basados en Debian, hay un pequeño paquete llamado tigervnc-scraping-server, que debes instalar. No tienes que instalar el servidor principal de TigerVNC (nombre del paquete: tigervnc-standalone-server) para tener la funcionalidad de conectarte a la sesión de escritorio en curso, sólo si prefieres conectarte también a un escritorio virtual.

El servidor TigerVNC proporciona una aplicación más pequeña (x0vncserver) para dar acceso a la sesión activa.

A continuación, crea un directorio .vnc en tu casa:

user@hostname:~$ mkdir -p ~/.vnc

Crea una contraseña para tu sesión vnc:

user@hostname:~$ vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n

Iniciar el servidor VNC

Una breve descripción del x0vncserver:

x0tigervncserver is a TigerVNC Server which makes any X display remotely accessible via VNC, TigerVNC or compatible viewers. Unlike Xvnc(1), it does not create a virtual display. Instead, it just shares an existing X server (typically, that one connected to the physical screen).

Ahora que has instalado con éxito el servidor TigerVNC en tu ordenador y has creado una contraseña con el comando vncpasswd, podemos empezar a iniciar nuestro servidor vnc. Asegúrate de que estás en la sesión activa, y escribe (como usuario):

user@hostname:~$ x0vncserver -passwordfile ~/.vnc/passwd -display :0

Wed Oct 10 22:17:16 2018
Geometry: Desktop geometry is set to 1920x1080+0+0
Main: XTest extension present - version 2.2
Main: Listening on port 5900

La opción -passwordfile ~/.vnc/passwd lee el archivo de contraseñas creado anteriormente con el comando vncpasswd. La segunda opción -display :0 significa que quieres conectarte a la sesión en la pantalla :0, que suele ser la sesión activa.

Ahora puedes acceder a tu escritorio real con cualquier aplicación de visualización vnc en el puerto vnc 5900 por defecto.

Puedes detener este proceso cuando quieras pulsando Ctrl-c.

Si quieres ejecutarlo en segundo plano, escribe:

user@hostname:~$ x0vncserver -passwordfile ~/.vnc/passwd -display :0 >/dev/null 2>&1 &

Ahora toda la salida estándar y los errores se redirigen a /dev/null y con la & al final, se ejecutará en segundo plano. Sin embargo, ya no podrás detener el servidor vnc pulsando Ctrl-c, sino que tendrás que matar su identificador de proceso (ver más abajo la sección «Detener el servidor vnc»).

Para más opciones y sintaxis, consulta el manual de x0vncserver.

Detener el servidor VNC

Si tu servidor vnc se ejecuta en segundo plano, tienes que conocer el id del proceso para poder detenerlo.

user@hostname:~$ ps -fu user | grep [x]0vncserver
user    1328    1   0 23:11 pts/2    00:00:00    /usr/bin/x0vncserver -display :0 -passwordfile /home/user/.vnc/passwd -rfbport 5900

La salida será así, fíjate en el pid 1328. Para detener el servidor vnc, tenemos que «matar» este proceso.

user@hostname:~$ kill -9 1328

La opción -9 del comando kill enviará la señal KILL al id del proceso para que se detenga.

Script para ejecutar el servidor VNC

Hay un script para iniciar y detener la aplicación x0vncserver en github. Para probarlo, descarga también el paquete psmisc:

user@hostname:~$ sudo apt-get install git psmisc

A continuación, descarga el script startvnc mediante el comando git:

user@hostname:~$ git clone https://github.com/sebestyenistvan/runvncserver
Cloning into 'runvncserver'...
remote: Enumerating objects: 77, done.
remote: Counting objects: 100% (77/77), done.
remote: Compressing objects: 100% (57/57), done.
remote: Total 77 (delta 25), reused 60 (delta 18), pack-reused 0
Unpacking objects: 100% (77/77), done.

Tu salida será similar a la de arriba.

Copia el script startvnc del directorio runvncserver a tu casa:

user@hostname:~$ cp ~/runvncserver/startvnc ~

Cambia los permisos a ejecutable, para poder ejecutar el script:

user@hostname:~$ chmod +x ~/startvnc

A continuación, ejecuta el script.

user@hostname:~$ ./startvnc

Usage: ./startvnc start|stop|restart|status

Este script sólo funcionará si tienes un directorio .vnc en tu casa y has creado un vncpasswd (busca el archivo ~/.vnc/passwd). Ya hemos creado antes el directorio .vnc y la contraseña.

Para iniciar el servidor vnc en la pantalla real, sólo tienes que escribir:

user@hostname:~$ ./startvnc start
Starting VNC Server on display :0 [ok]

Puedes probar, si tu servidor vnc se está ejecutando con la opción:

user@hostname:~$ ./startvnc status
Status of the VNC server: [running] (pid: 1328)

Algunos ejemplos:

Utilizar TigerVNC

O comprobando el puerto TCP 5900 de tu sistema con el comando fuser (del paquete psmisc):

user@hostname:~$ fuser -vn tcp 5900
                  USER      PID     ACCESS      COMMAND
5900/tcp:         user      1328    F....       x0vncserver

Obtendrás una salida como ésta si el servidor vnc se está ejecutando en el puerto 5900.

Comprueba el puerto con el comando fusor

Puedes encontrar más instrucciones para este script en el archivo readme:

user@hostname:~$ less runvncserver/README.md

El script creará un archivo de registro, donde se almacenará la salida. Si algo va mal o no puedes iniciar o detener el x0vncserver, echa un vistazo al archivo de registro en ~/.vnc/logfile

Inicia el servidor VNC automáticamente

Si quieres acceder a la sesión de escritorio activa automáticamente, tienes que editar el archivo .xsessionrc en tu directorio personal.

user@hostname:~$ echo "/home/user/startvnc start >/dev/null 2>&1" >> ~/.xsessionrc

Sustituye user por tu nombre de usuario y se ejecutará automáticamente al iniciar la sesión X. El script registra su actividad en ~/.vnc/logfile, si algo va mal, puedes comprobar el archivo de registro allí.

Inicio automático del servidor VNC

Notas

Este tutorial no se ocupa de configurar un escritorio virtual VNC.

Seguridad

Ten en cuenta que el x0vncserver no utiliza encriptación por defecto, así que úsalo con cuidado en Internet. Si quieres utilizarlo de forma remota, puedes hacer un túnel a través de ssh. Sin embargo, hay otros howtos donde puedes encontrar una solución para encriptar tu sesión VNC.

O puedes echar un vistazo al paquete ssvnc.

Visores de VNC

Si buscas visores de VNC, hay muchos, por ejemplo

  • gvncviewer
  • tigervnc-viewer
  • xtightvncviewer
  • xvnc4viewer

Geometría

El x0vncserver en la pantalla real utilizará la misma geometría que el escritorio en ejecución en la pantalla :0. Así que si estableces la opción -geometría a un tamaño inferior, no se escalará, sólo verás una fracción del tamaño del escritorio.

Comentarios

No dudes en escribir tus comentarios. Si has probado este tutorial o incluso el script en otro sistema.

Escritorio compartido a través de VNC

También te podría gustar...