VNC

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

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

Soy un ingeniero informático brasileño radicado en Alemania, apasionado por la tecnología, la ciencia, la fotografía y los idiomas.

Llevo programando cerca de dos décadas, explorando desde apps móviles y desarrollo web hasta aprendizaje automático. Hoy me enfoco en SRE en la nube e ingeniería de datos.

Soy voluntario en las comunidades de open source y Python, ayudando a organizar PyCon DE y PyData Berlin, dando mentorías y contribuyendo con código y traducciones.

En mi blog comparto consejos de Linux, guías de configuración y notas personales que escribí como referencia futura. Espero que también sean útiles para otras personas. El contenido está disponible en varios idiomas.

Visita mi galería para ver algunas de mis fotografías.

Fuera del teclado, me encontrarás en conciertos, tocando el clarinete, en bicicleta, buceando o explorando nuevos lugares, culturas y cocinas.

¡Siempre feliz de conectar! 🙂

comments powered by Disqus