VNC

August 7, 2011   

Virtual Network Computing (VNC) é um sistema que permite controlar um computador remoto de forma gráfica pelo protocolo RFB.

TightVNC, Vino e X11vnc são alguns dos programas de acesso remoto por VNC disponíveis para Linux. Neste post falarei do TightVNC.

  1. Instale o TightVNC:

    julio@julio-acer ~ $ sudo pacman -S tightvnc
    
  2. Crie os arquivos iniciais e defina uma senha de acesso

    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 padrão, o servidor rodará na porta TCP 5900+n, onde n é o número do display.

  3. Para iniciar as configurações, mate o servidor que está rodando

    julio@julio-acer ~ $ vncserver -kill :1
    
  4. Edite o arquivo de configuração, de forma semelhante ao .xinitrc

    julio@julio-acer ~ $ vim ~/.vnc/xstartup
    
    #!/bin/sh
    
    export XKL_XMODMAP_DISABLE=1 #Evita erro ao mapear o teclado
    exec startxfce4
    #exec awesome
    
  5. Por segurança, permita apenas conexões locais, para que, se alguém quiser conectar ao computador remotamente, terá que autenticar por ssh.

    Para permitir apenas conexões locais, basta iniciar o vncserver com a opção -localhost: vncserver -localhost :1

  6. Iniciar e finalizar o servidor VNC automaticamente

    1. Inicia servidor VNC ao ligar o computador:

      julio@julio-acer ~ $ sudo vim /etc/rc.local
      su julio -c "vncserver -localhost :1"
      
    2. Desliga servidor VNC ao desligar o computador:

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

Conectando por outro computador

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

Onde coloquei -p 22, mude a porta para o número que você usa para SSH. A opção -L faz o tunneling SSH. e depois execute vncviewer localhost:8900

Conectando pelo iPhone

O APP iSSH possui a opção de conectar por VNC diretamente (RAW), mas como já explicado, é mais seguro fazer SSH tunneling.

  1. Abra o iSSH
  2. Vá em Add Configuration... e deixe parecido com a seguinte configuração:

    (imagem indisponível)

  3. Volte na tela inicial do programa e escolha a configuração que você acabou de criar.

    (imagem indisponível)

    Já que estamos usando um iPhone 3G, com resolução 480x320 (o iPhone 4 possui tela 960x640), pode ser interessante configurar o TightVNC para redimensionar a tela para conseguirmos uma visão completa do ambiente.

    Inicie o servidor com a opção -geometry. Para visão modo paisagem:

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

    Tirei uns 52 pixels da altura, para compensar a parte de cima da tela.

    Para visão modo retrato:

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

    (imagem indisponível)


Algumas vezes também quero poder controlar o mesmo display que está sendo exibido no computador remoto, ou simplesmente monitorar os programas que estão rodando. Isso não é possível pelo TightVNC, mas é facilmente feito pelo X11vnc.

  1. Instale o X11vnc

    julio@julio-acer ~  $  sudo pacman -S x11vnc
    
  2. Se quiser, defina um .Xauthority

    julio@julio-acer ~  $  x11vnc -display :0 -auth ~/.Xauthority
    
  3. Defina uma senha

    julio@julio-acer ~  $  mkdir ~/.x11vnc
    julio@julio-acer ~  $  x11vnc -storepasswd sua_senha_aqui ~/.x11vnc/passwd
    stored passwd in file: /home/julio/.x11vnc/passwd
    
  4. Assim como no TightVNC, use a opção -localhost por segurança.

    Resumindo, o servidor VNC pode ser acessado pelo seguinte script, que você pode querer colocar no .xinitrc:

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

    A opção -many evita que o servidor desligue quando você finaliza a sessão.

  5. Acesse pelo 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. O acesso pelo iPhone é exatamente da mesma forma que o TightVNC, mas aqui usamos a porta 5900.

    (imagem indisponível)


Problemas:

Aparentemente o tightVNC não suporta RandR, que é necessário para mudarmos a resolução da tela e abrir alguns programas como o chromium e firefox. Existem alguns patches na internet para resolver o problema. Um outro programa que parece suportar RandR é o RealVNC.




comments powered by Disqus