VNC

ago. 7, 2011·
Julio Batista Silva
Julio Batista Silva
· 3 minutos de leitura
blog iPhone

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. 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
    

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.


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.


Julio Batista Silva
Authors
Senior Cloud Developer

Sou um engenheiro de computação brasileiro baseado na Alemanha, apaixonado por tecnologia, ciência, fotografia e línguas.

Programo há cerca de duas décadas, explorando desde aplicativos móveis e desenvolvimento web até aprendizado de máquina. Atualmente, foco em SRE de nuvem e engenharia de dados.

Sou voluntário nas comunidades de open source e Python, ajudando a organizar a PyCon DE e a PyData Berlin, mentorando e contribuindo com código e traduções.

No meu blog, compartilho dicas de Linux, guias de configuração e notas pessoais que escrevo para referência futura. Espero que outras pessoas também as considerem úteis. O conteúdo está disponível em vários idiomas.

Visite minha galeria para ver algumas das minhas fotografias.

Longe do teclado, você vai me encontrar em shows, tocando clarinete, pedalando, mergulhando ou explorando novos lugares, culturas e culinárias.

Sempre feliz em me conectar! 🙂

comments powered by Disqus