Mar 162013
 

Buenas,

hay una famosa aplicación privativa que se ha popularizado en los últimos años para acceder a un ordenador desde otro remoto de forma sencilla [1]. Lo malo es que como privativa que es tiene algunos inconvenientes, el primero de ellos que durante un largo periodo de tiempo no ha habido cliente que funcionase en (al menos algunas de) las distros de 64 bits en GNU/Linux y como no se dispone del código fuente no era posible compilarla. El otro aspecto a valorar es que precisamente se trata de una aplicación a la que le das permiso para acceder a todo tu ordenador y a transmitirlo por Internet y realmente no puedes saber lo que está haciendo por la misma razón de no estar publicado su código.

Lo que uno tal vez no se espera es que es muy sencillo conectarse a un escritorio remoto con aplicaciones libres en GNU/Linux. Basta con unas preguntas en Blogdrake y FotoLibre o seguir este resumen de cómo lo hice yo.


Lo primero que debemos hacer es entender lo que necesitamos. Queremos conectarnos al ordenador de otra persona desde el nuestro. En mi caso se trata de poder resolver las dudas que le surgen a veces a mi madre y que no siempre acierta a describirme por teléfono. Así que cuando me llama, yo me conecto a su ordenador, veo lo que tiene en pantalla e incluso puedo trabajar en su ordenador desde el mío como si estuviera en su casa. Basta con utilizar el protocolo VNC para el que en GNU/Linux hay muchos servidores y clientes.

Las necesidades pues son tres:

1) Necesitamos un programa en el ordenador remoto que nos envíe la información de éste. Este será el servidor. Para ello utilizaremos el programa x11vnc que viene en los repositorios de cualquier distro.

Una vez instalado dispone de multitud de opciones pero a nosotros nos basta con lanzarlo desde la consola del equipo al que nos queremos conectar con este comando

Código:
$ x11vnc -bg -forever -passwd laclaveelegida

Si añadimos la opción -gui nos aparecerá una ventana desde la que  configurar cualquier parámetro, pero no es necesario para un funcionamiento normal.

En el router del usuario remoto deberemos abrir los puertos 5900 y 5901.

2) Necesitamos conocer la IP del ordenador remoto para poder conectarnos a él desde el nuestro. Como sabéis la casi totalidad de las conexiones domésticas a Internet se realizan con IP dinámica, es decir, la identificación de tu conexión en Internet cambia cada vez que enciendes o apagas el router.
La persona que se encuentra en el ordenador remoto puede hacer una búsqueda en Internet con las palabras "cual es mi ip" y le saldrán diferentes páginas en las que se la digan. Dicha persona debería hacerte saber esa dirección para que en el siguiente paso tú te conectes, pero esto implica ya un mínimo de conocimientos de la otra persona que no siempre podemos asegurar.

Cada vez quedan menos servicios gratuitos que nos proporcionen una forma de acceder a un ordenador con IP dinámica, pero de momento al menos en http://no-ip.org podemos disponer de hasta tres direcciones dinámicas gratuitas. Si nos creamos un usuario ahí, podremos acceder a nuestro ordenador a través de una dirección del tipo http://miusuario.no-ip.org sin tener que preocuparnos de cuál es esa IP que va cambiando con el tiempo.

Eso sí, el truco es que desde el ordenador remoto hay que conectarse a no-ip.org cada vez que cambiamos de IP, es decir si apagamos y encendemos el router. Pero afortunadamente esto se puede automatizar de varias formas. En nuestro caso, podemos descargar un programa desde la página de no-ip.org que realice ese trabajo por nosotros. Luego seguimos las instrucciones para instalarlo (hay una guía diferente para Ubuntu).

Consiste básicamente como pone ahí en descomprimir el archivo, compilarlo con un $ make y un # make install y luego ejecutarlo como root con la opción -C (mayúscula) para configurarlo.

Haciendo /usr/local/bin/noip2 -C desde root, se genera el fichero de configuración en /usr/local/etc/no-ip2.conf que luego utilizaremos para realizar la llamada.

Yo necesité cambiarle el propietario al programa y al fichero de configuración mediante un chown usuario:usuario porque si no sólo lo podía ejecutar desde root.

A continuación, ya se puede ejecutar el cliente y cada vez que lo lanzas, actualiza la dirección tutusuario.no-ip.org con la IP del router en ese momento.

Código:
/usr/local/bin/noip2 -c /usr/local/etc/no-ip2.conf

3) En el ordenador desde el que queremos conectarnos al remoto, es decir desde el nuestro, necesitaremos un cliente de VNC que sea capaz de entenderse con el servidor x11vnc que hemos instalado en el ordenador remoto. Para ello usaremos el programa Tigervnc que también se encuentra en casi todos los repositorios.

Una vez que en el ordenador remoto se ha lanzado el servidor x11vnc, en el nuestro deberemos lanzar el visor de Tigervnc que sin embargo se llama vncviewer

Código:
$ vncviewer [ip del ordenador remoto/dns-dinámica]

Por ejemplo, si tenemos una dirección de no-ip.org, sería

Código:
$ vncviewer mimadre.no-ip.org

Primero saldrá una pequeña ventana que nos pedirá la clave que se ha introducido en la llamada al servidor, la de $ x11vnc -bg -forever -passwd laclaveelegida.

Entonces nos aparecerá en pantalla una nueva ventana como esta en la que podéis apreciar el escritorio de mi madre visto desde el mío.

Un par de capturas más sólo de la ventana que contiene el visor del escritorio remoto.

Paso final: Automatizarlo

Si el usuario del ordenador remoto tiene una cierta experiencia y es capaz de usar la consola, bastará con que le indiquemos que lance el servidor x11vnc y el cliente de no-ip.org para poder conectarnos a su maquina. Si como en el caso de mi madre esto es demasiado pedir, podremos lanzar dichos comandos desde el fichero /etc/rc.local que se ejecuta al inicio del sistema. Basta con editarlo como root y añadirle las dos llamadas que necesitamos, lanzar el servidor y ejecutar el cliente de no-ip.org para que actualice la IP dinámica. Así es como queda el fichero en mi caso. Las primeras líneas ya existían, yo sólo he añadido las nuevas órdenes.

Código:
[mila@localhost ~]$ cat /etc/rc.local
#!/bin/sh
#
### BEGIN INIT INFO
# Provides: rc.local
# X-Mandriva-Compat-Mode
# Default-Start: 2 3 4 5
# Short-Description: Local initialization script
# Description: This script will be executed at the end of the boot process.
#              You can put your own initialization stuff in here if you don't
#              want to do the full Sys V style init stuff.
### END INIT INFO

touch /var/lock/subsys/local

#___ no.ip.org ___
/usr/local/bin/noip2 -c /usr/local/etc/no-ip2.conf

#___ arrancar servidor vnc ___
/usr/bin/x11vnc -bg -forever -passwd laclaveelegida

Así, cada vez que me llama por teléfono, simplemente le digo, espera, me pongo en mi ordenador y tecleo $ vncviewer mimadre.no-ip.org y entonces ya empieza a explicarme eso de que "no le funciona". Guiño

Saludos,
Colegota

[1] Programa privativo Teamviewer 8 llega a Linux en MuyLinux.

  11 Respuesta a “Escritorio remoto (y libre) en GNU/Linux”

  1. Este software también es muy bueno. Funciona bien y es muy estable. Ammy Admin (http://www.ammyy.Com) no requiere registrarse, instalación o configuraciones específicos. Funciona detrás de puertas de enlace NAT y LAN

    • Gracias por la información, pero al no ser software libre no te puedes fiar de lo que hace dentro de tu ordenador.

      Saludos,
      Colegota

  2. Veo que usas KDE y mi pregunta es que ventajas le ves a usar este método al tradicional krfb/krdc
    http://www.kde.org/applications/system/krfb/
    http://www.kde.org/applications/internet/krdc/

    Saludos

    Jose

    • El principal motivo para usar ese método es que fue el que encontré en mis búsquedas. 😉 Me funcionó y no seguí buscando.

      Así de entrada le veo la ventaja de no necesitar KDE y ser usable en otros entornos, pero el que muestras tiene muy buena pinta.

  3. Muchísimas gracias por el tuto. Me resultó muy útil y es lo que estaba buscando.

    Abrazo!

  4. Muchas gracias colegota, me gustaría saber si tienes idea de cómo podría hacerse este mismo proceso pero a través de una VPN (¿sabes si supera demasiado la complejidad de este artículo?) Como sea, muchas gracias, voy a seguirlo al pie de la letra. Gracias por tu blog, hace rato lo sigo, creo que viene bien tu ayuda en GNUsocial, puedes buscarme

    • Gracias a ti David por comentar.
      No he trabajado para nada el tema de las VPN por lo que siento no poder ayudarte. Es algo que tengo pendiente y que algún día abordaré… creo. 😉
      Ya te sigo en GNU Social.

  5. Estoy en la aventura de seguir tus instrucciones pero me encuentro que la instalación de TigerVNC es un poquito complicada, me podrías ayudar?

    Veo estas instrucciones para realizarlo en el archivo «Building»

    > cd {build_directory}

    If performing an out-of-tree build:
    > mkdir unix
    > cp -R {source_directory}/unix/xserver unix/

    > cp -R {xorg_source}/* unix/xserver/
    (NOTE: {xorg_source} is the directory containing the Xorg source for the
    machine on which you are building TigerVNC. The most recent versions of
    Red Hat/CentOS/Fedora, for instance, provide an RPM called
    "xorg-x11-server-source", which installs the Xorg source under
    /usr/share/xorg-x11-server-source.)

    Pero no comprendo varias de las etiquetas, por ejemplo, a qué se refiere con «{source_directory}»? A la fuente del programa? a las fuentes en el sistema? Sabes además cuál es la fuente de Xorg en Mint 17.2?

  6. Muchas gracias por la receta, me va a venir de lujo para controlar una raspberry desde mi ordenador principal.

 Deja Un Despiste

Puedes utilizar estas etiquetas HTML y atributos: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(necesario)

(necesario)