VNC

ago. 7, 2011·
Julio Batista Silva
Julio Batista Silva
· 3 min de lectura

Virtual Network Computing (VNC) es un sistema que permite controlar un computador remoto de forma gráfica mediante el protocolo RFB.

TightVNC, Vino y X11vnc son algunos de los programas de acceso remoto por VNC disponibles para Linux. En este post hablaré de TightVNC.

  1. Instala TightVNC:

    julio@julio-acer ~ $ sudo pacman -S tightvnc
    
  2. Crea los archivos iniciales y define una contraseña de acceso

    julio@julio-acer ~ $ vncserver :1
    You will require a password to access your desktops.
    
    Password:
    Verify:
    Would you like to enter a view-only password (y/n)? n
    
    New 'X' desktop is julio-acer:1
    
    Creating default startup script /home/julio/.vnc/xstartup
    Starting applications specified in /home/julio/.vnc/xstartup
    Log file is /home/julio/.vnc/julio-acer:1.log
    

    Por defecto, el servidor correrá en el puerto TCP 5900+n, donde n es el número del display.

  3. Para iniciar la configuración, mata el servidor que está corriendo

    julio@julio-acer ~ $ vncserver -kill :1
    
  4. Edita el archivo de configuración, de forma similar a .xinitrc

    julio@julio-acer ~ $ vim ~/.vnc/xstartup
    #!/bin/sh
    export XKL_XMODMAP_DISABLE=1 #Evita error al mapear el teclado
    exec startxfce4
    #exec awesome
    
  5. Por seguridad, permite solo conexiones locales; así, si alguien quiere conectarse remotamente, deberá autenticarse por SSH.

    Para permitir solo conexiones locales, inicia vncserver con la opción -localhost: vncserver -localhost :1

  6. Iniciar y finalizar el servidor VNC automáticamente

    1. Iniciar servidor VNC al encender el equipo:

      julio@julio-acer ~ $ sudo vim /etc/rc.local
      su julio -c "vncserver -localhost :1"
      
    2. Apagar servidor VNC al apagar el equipo:

      julio@julio-acer ~ $ sudo vim /etc/rc.local.shutdown
      su julio -c "/usr/bin/vncserver -kill :1"
      

Conectando desde otro computador

$ ssh -p 22 julio@casa.juliobs.com -L 8900/localhost/5901

Donde puse -p 22, cambia al puerto que uses para SSH. La opción -L hace el tunneling SSH. Luego ejecuta vncviewer localhost:8900.

Conectando desde el iPhone

La app iSSH puede conectarse por VNC directamente (RAW), pero como ya expliqué, es más seguro hacer SSH tunneling.

  1. Abre iSSH

  2. Ve a Add Configuration… y deja algo similar a:

    (imagen indisponible)
    
  3. Vuelve a la pantalla inicial y elige la configuración que creaste.

    (imagen indisponible)
    

    Como estamos usando un iPhone 3G, con resolución 480x320 (el iPhone 4 tiene 960x640), puede ser interesante configurar TightVNC para redimensionar la pantalla y ver todo el entorno.

    Inicia el servidor con la opción -geometry. Para modo paisaje:

    julio@julio-acer ~  $  vncserver -localhost -geometry 480x268 :1
    

    Quité unos 52 píxeles de altura para compensar la barra superior.

    Para modo retrato:

    julio@julio-acer ~  $  vncserver -localhost -geometry 320x416 :1
    

A veces quiero controlar el mismo display que se ve en el equipo remoto, o solo monitorear programas que están corriendo. Eso no es posible con TightVNC, pero sí con X11vnc.

  1. Instala X11vnc

    julio@julio-acer ~  $  sudo pacman -S x11vnc
    
  2. Si quieres, define un .Xauthority

    julio@julio-acer ~  $  x11vnc -display :0 -auth ~/.Xauthority
    
  3. Define una contraseña

    julio@julio-acer ~  $  mkdir ~/.x11vnc
    julio@julio-acer ~  $  x11vnc -storepasswd su_contraseña_aqui ~/.x11vnc/passwd
    stored passwd in file: /home/julio/.x11vnc/passwd
    
  4. Igual que en TightVNC, usa la opción -localhost por seguridad.

    Resumiendo, el servidor VNC puede iniciarse con el siguiente script, que quizá quieras poner en .xinitrc:

    julio@julio-acer ~  $  x11vnc -localhost -many -display :0 -auth ~/.Xauthority &>/dev/null &
    

    La opción -many evita que el servidor se apague al finalizar la sesión.

  5. Accede por túnel SSH

    julio@servidor ~  $  ssh -p 22xx -t -L 5900:localhost:5900 casa.juliobs.com 'sudo x11vnc -display :0 -auth /home/julio/.Xauthority'
    
  6. El acceso desde iPhone es igual que con TightVNC, pero usando el puerto 5900.


Problemas:

Aparentemente TightVNC no soporta RandR, necesario para cambiar resolución y abrir algunos programas como Chromium y Firefox. Hay parches en Internet. Otro programa que parece soportar RandR es RealVNC.


Enlaces

Julio Batista Silva
Autores
Senior Cloud Developer
comments powered by Disqus