De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Ricardo Iramar dos Santos
Data de Publicação: 14 de Junho de 2005
A muito tempo utilizo o RealVNC (chamemos de VNC daqui para frente) e não só eu mas o mundo inteiro tem visto uma grande evolução deste software que tanto nos ajuda no dia a dia.
No ínicio, eu utilizava o vncserver que na verdade é um script em Perl. O vncserver executa o Xvnc que cria uma outra sessão do X no ambiente do VNC. Porém não era póssível acessar via VNC sessões do X já iniciada utilizando o vncserver.
Então um amigo me apresentou o x0vncserver (esse sim é um binário) que compartilha a sessão do X com quase todas as opções do Xvnc.
Em um belo dia, navegando pelo site http://www.realvnc.com, encontrei uma documentação sobre como carregar o módulo do VNC no X. A implementação foi mais simples do que eu imaginava. Além disso descobri que era possível acessar minha máquina remotamente usando somente um browser com suporte a java.
Pensando nessas soluções resolvi escrever uma documentação completa à respeito. Então comecei a ler mais a respeito sobre o VNC e lendo a man page do Xvnc percebi que também era possível usar o Xvnc também com o inetd.
Nesta documentação será abordada todas essas formas de utilização do VNC para Unix. Em todos os exemplos estarei utilizando a versão 4.1.1 do VNC, Slackware 10.1 e Perl 5.8.6. Porém, vou tentar ser o mais genérico possível para atender a outras versões do VNC assim como outras distribuições Linux.
Agora chega de conversa e mãos à obra.
Faça o download do pacote de instalação completo do VNC Free Edition for Linux (x86) versão 4.1.1 e descompacte da seguinte forma.
agent@smith:~/binários/vnc$ tar zxvf vnc-4_1_1-x86_linux.tar.gz vnc-4_1_1-x86_linux/ vnc-4_1_1-x86_linux/README vnc-4_1_1-x86_linux/vncinstall vnc-4_1_1-x86_linux/LICENCE.txt vnc-4_1_1-x86_linux/vnc.so vnc-4_1_1-x86_linux/vncviewer vnc-4_1_1-x86_linux/vncpasswd vnc-4_1_1-x86_linux/vncconfig vnc-4_1_1-x86_linux/x0vncserver vnc-4_1_1-x86_linux/Xvnc vnc-4_1_1-x86_linux/vncviewer.man vnc-4_1_1-x86_linux/vncpasswd.man vnc-4_1_1-x86_linux/vncconfig.man vnc-4_1_1-x86_linux/x0vncserver.man vnc-4_1_1-x86_linux/Xvnc.man vnc-4_1_1-x86_linux/vncserver vnc-4_1_1-x86_linux/vncserver.man vnc-4_1_1-x86_linux/java/ vnc-4_1_1-x86_linux/java/index.vnc vnc-4_1_1-x86_linux/java/vncviewer.jar vnc-4_1_1-x86_linux/java/logo150x150.gif agent@smith:~/binários/vnc$
Agora execute os comandos abaixo para a instalação.
agent@smith:~/binários/vnc$ cd vnc-4_1_1-x86_linux agent@smith:~/binários/vnc/vnc-4_1_1-x86_linux$ su Password authentication bypassed. root@smith:/home/agent/binários/vnc/vnc-4_1_1-x86_linux# ./vncinstall /usr/local/bin /usr/local/man Copying Xvnc to /usr/local/bin Copying Xvnc.man to /usr/local/man/man1/Xvnc.1 Copying vncviewer to /usr/local/bin Copying vncviewer.man to /usr/local/man/man1/vncviewer.1 Copying vncpasswd to /usr/local/bin Copying vncpasswd.man to /usr/local/man/man1/vncpasswd.1 Copying vncconfig to /usr/local/bin Copying vncconfig.man to /usr/local/man/man1/vncconfig.1 Copying vncserver to /usr/local/bin Copying vncserver.man to /usr/local/man/man1/vncserver.1 Copying x0vncserver to /usr/local/bin Copying x0vncserver.man to /usr/local/man/man1/x0vncserver.1 Copying vnc.so to /usr/X11R6/lib/modules/extensions root@smith:/home/agent/binários/vnc/vnc-4_1_1-x86_linux#
Se você pretende acessar sua máquina usando um browser com suporte a java execute os comandos abaixo.
root@smith:/home/agent/binários/vnc/vnc-4_1_1-x86_linux# mkdir -p /usr/local/vnc/classes root@smith:/home/agent/binários/vnc/vnc-4_1_1-x86_linux# cp java/* /usr/local/vnc/classes root@smith:/home/agent/binários/vnc/vnc-4_1_1-x86_linux#
Agora vamos criar o arquivo que contém a senha do VNC, porque não queremos que todo mundo acesse nosso ambiente. Digite os comandos abaixo e escolha uma senha com seis ou mais caracteres.
root@smith:/home/agent/binários/vnc# exit exit agent@smith:~/binários/vnc$ vncpasswd Password: Verify: agent@smith:~/binários/vnc$
Por padrão a senha é gerada no arquivo $HOME/.vnc/passwd.
Se você esta usando VNC provavelmente não irá mais precisar do recurso de acesso remoto do X que por padrão vem habilitado na maioria das distribuições. Caso for utilizar o VNC com inetd não desabilite essa opção, veja porque no item Utilizando o VNC com inetd.
Para desabilitar tal opção, caso use GDM assim como eu, basta alterar a opção DisallowTCP para true (exemplo: DisallowTCP=true) no arquivo /etc/X11/gdm/gdm.conf.
Caso você utilize o script startx para iniciar o X, basta editar a linha serverargs="", no próprio arquivo startx, para serverargs="-nolisten tcp". Se você utiliza kdm ou xdm edite a linha :0 local /usr/X11R6/bin/X para :0 local /usr/X11R6/bin/X -nolisten tcp do arquivo /etc/X11/xdm/Xservers.
Para um melhor entendimento este item foi subdividido em itens menores conforme as formas de utilização do VNC.
Como a maioria das opções do arquivo Xvnc é válida para todos os itens abaixo, segue abaixo a descrição das opções que acho mais relevantes.
-desktop [nome] Específica o nome que irá aparecer na janela do vncviewer. O padrão é x11. -rfbport [porta] Específica a porta em que VNC irá escutar, ideal se o firewall da sua empresa bloqueia a porta padrão. O padrão é 5900 mais o número do display. -httpd [diretório] Executa um mini servidor HTTP com diretório raiz informado. Este diretório raiz deve conter as classes java para o viewer, que por padrão ficam em "/usr/local/vnc/classes". Esta opção permite você acessar seu ambiente remotamente com um browser que tenha suporte a java. -httpPort [porta] Específica a porta na qual o servidor HTTP irá escutar. O padrão é 5800 mais o número do display. -rfbauth [arquivo], -PasswordFile [arquivo] Específica o arquivo de senhas que o VNC deve consultar quando receber uma requisição. Você deve especificar o arquivo que foi gerado através do arquivo vncpasswd conforme procedimento acima (exemplo: "/home/agent/.vnc/passwd"). -SendCutText Habilita o compartilhamento da área de transferência entre o ambiente do VNC para a máquina que esta executando o vncviewer. Esta opção é habilitada por padrão. Para que esta opção funcione é necessário executar o vncconfig no ambiente do VNC. -AcceptCutText Idem a anterior porém no sentido inverso. -DisconnectClients Desconecta o usuário atual do ambiente VNC quando uma nova requisição não compartilhada é feita. O padrão é ativado. Se está opção for definida como "false", novas requisões não compartilhadas serão recusadas enquanto o primeiro usuário estiver ativo. Quando está opção for combinada com a opção "NeverShared" só será possível ter um único usuário por vez. -NeverShared Independente da configuração do client, não permite conexões compartilhadas. O padrão é desativado. -AlwaysShared Independente da configuração do client, sempre permite conexões compartilhadas. O padrão é desativado. -SecurityTypes [opção] Define o modo de autenticação. Atualmente só existem as opções "None" e "VncAuth". O valor padrão é "VncAuth". Se você configurar esta opção com "None" não será necessário informar nenhuma senha no momento da requisição, isto é, qualquer um terá acesso ao seu ambiente VNC. Portanto só configure com "None" estão opção se você tiver certeza do que está fazendo. -QueryConnect Pergunta ao usuário do ambiente VNC se deve aceitar ou não conexões externas no momento da requisição. Se você for usar o módulo do VNC ou vncserver é necessário executar o vncconfig no ambiente VNC, entretando não é necessário para o x0vncserver. -localhost Aceita somente requisições locais. Ideal se você for acessar o ambiente através de um túnel SSH. Veja a documentação "Tunelando com OpenSSH" em http://agentsmith.powerlinux.com.br/docs/doc7.html.
Necessariamente você não precisa fazer nenhum configuração inicial para usar o vncserver.
Quando o vncserver é executado pela primeira vez ele checa a existência dos arquivos $HOME/.vnc/passwd (caso um alternativo não seja informado pela opção -rfbauth ou -PasswordFile) e $HOME/.vnc/xstartup. Caso algum desses arquivos não exista o vncserver irá criar um arquivo padrão. No caso do arquivo $HOME/.vnc/passwd você precisa informar a senha de acesso ao ambiente do VNC.
agent@smith:~$ vncserver You will require a password to access your desktops. Password: Verify: New 'smith:1 (agent)' desktop is smith:1 Creating default startup script /home/agent/.vnc/xstartup Starting applications specified in /home/agent/.vnc/xstartup Log file is /home/agent/.vnc/smith:1.log agent@smith:~$
Por padrão o vncserver utiliza o display :1, sendo assim o Xvnc irá escutar na porta 5901. Se você deseja saber quais opções que foram passadas para o Xvnc execute o comando abaixo.
agent@smith:~$ ps aux | grep Xvnc agent 436 0.1 1.4 9528 7404 pts/0 S 17:00 0:00 Xvnc :1 -desktop smith:1 (agent) -httpd /usr/local/vnc/classes -auth /home/agent/.Xauthority -geometry 1024x768 -depth 16 -rfbwait 30000 -rfbauth /home/agent/.vnc/passwd -rfbport 5901 -pn
O arquivo xstartup padrão de longe não é a melhor opção, pois o mesmo executa o twm como gerenciador de janelas. Se você deseja que seja iniciado o mesmo gerenciador de janelas que é iniciado pelo script startx substitua o arquivo xstartup com o conteúdo abaixo.
#!/bin/sh [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources vncconfig -iconic & sh /etc/X11/xinit/xinitrc
Se você possui um configuração personalizada para seu usuário altere a linha sh /etc/X11/xinit/xinitrc para sh $HOME/.vnc/xinitrc.
Você também pode utilizar todas as opções descritas no iten Utilização para o arquivo Xvnc.
agent@smith:~$ vncserver --help usage: vncserver [:<number>] [-name <desktop-name>] [-depth <depth>] [-geometry <width>x<height>] [-pixelformat rgbNNN|bgrNNN] <Xvnc-options>... vncserver -kill <X-display>
Além das opções descritas no item Utilização você pode especificar as dimensão da nova sessão do X com a opção -geometry. Essa opção não pode ser usada com as outras formas de utilização do VNC descritas nos outros itens.
-geometry [largura]x[altura] Define as dimensões da uma nova sessão do X criada pelo vncserver. O padrão é 1024x768.
Essa opção é util quando você sabe as dimensões do ambiente onde o vncviewer será executado. Desta forma você pode definir as dimensões da nova sessão do X seja menor do que as dimensões do ambiente da máquina onde será executado o vncviewer.
Para que a nova sessão do X não escute na porta 6000 você também pode adicionar a opção -nolisten tcp no final do comando do vncserver.
O VNC utiliza como padrão o arquivo $HOME/.vnc/[hostname][display].log para armazenar seus logs. O $HOME/.vnc/[hostname][display].pid armazena o id do processo do Xvnc, este número é utilizado pelo comando vncserver -kill.
Para finalizar o ambiente VNC e a sessão do X basta executar vncserver -kill seguido do display.
agent@smith:~$ vncserver -kill :1 Killing Xvnc process ID 436
Para usar o x0vncserver você será obrigado a usar no mínimo a opção -rfbauth [arquivo] ou -PasswordFile [arquivo] caso você deseje que seu ambiente seja protegido por uma senha ou -SecurityTypes None para um acesso direto sem senha.
Se você estiver localmente na máquina na qual deseja compartilhar o ambiente VNC basta executar o comando abaixo em um terminal qualquer. Não feche este terminal pois se não o processo do VNC será finalizado também. Você pode criar um atalho em seu gerenciador de janela para não precisar deixar um terminal aberto ou colocar esse comando no arquivo ~/.xprofile para ser executa na inicialização da sessão do X.
agent@smith:~$ x0vncserver PasswordFile=~/.vnc/passwd &
Ou se você estiver remotamente via SSH será necessário especificar o display com a opção -display :0 da seguinte forma.
agent@smith:~$ x0vncserver PasswordFile=~/.vnc/passwd -display :0 &
Caso você use GDM e ao tentar usar o x0vncserver é retornado o erro Xlib: Invalid MIT-MAGIC-COOKIE-1 key configure a váriavel XAUTHORITY de acordo com o arquivo utilizado pelo GDM da seguinte forma.
agent@smith:~# XAUTHORITY=/var/lib/gdm/\:0.Xauth x0vncserver PasswordFile=/home/agent/.vnc/passwd -display :0 &
Se você iniciou a sessão do X via startx e também tiver problemas do tipo Xlib: connection to ":0.0" refused by server utilize o comando xhost + como root antes de executar o x0vncserver.
Você também pode utilizar as opções descritas no item Utilização.
agent@smith:~$ x0vncserver -h usage: x0vncserver [<parameters>] Parameters can be turned on with -<param> or off with -<param>=0 Parameters which take a value can be specified as -<param> <value> Other valid forms are <param>=<value> -<param>=<value> --<param>=<value> Parameter names are case-insensitive.
Para finalizar o x0vncserver basta executar o comando abaixo.
agent@smith:~$ killall -9 x0vncserver [1]+ Killed x0vncserver PasswordFile=~/.vnc/passwd -display :0
Atualmente utilizo o VNC desta forma, ela é ideal para quem não usa uma máquina compartilhada. Caso sua máquina seja compartilhada com outros usuários utilize o VNC com inetd conforme item Utilizando o VNC com inetd.
Edite o arquivo /etc/X11/xorg.conf ou XF86Config e insira a linha Load "vnc" na sessão Module.
Section "Module" ... Load "vnc" EndSection
Neste mesmo arquivo na sessão Screen insira as opções do Xvnc descritas no item Utilização conforme desejar.
Section "Screen" ... # VNC Configuration # Option "SecurityTypes" "None" Option "SecurityTypes" "VncAuth" Option "UserPasswdVerifier" "VncAuth" Option "PasswordFile" "/home/agent/.vnc/passwd" Option "Httpd" "/usr/local/vnc/classes" Option "Desktop" "Agent Smith VNC" EndSection
Agora reinicie o X (Ctrl+Alt+Backspace ou killall -1 X) para carregar o módulo do VNC. Para descarregar o módulo edite o arquivo xorg.conf ou XF86Config novamente e comente a linha Load "vnc" colocando um # no início.
O VNC com inetd é ideal para máquinas utilizadas por vários usuários ao mesmo tempo, pois permite multiplos logins com usuários diferentes ao mesmo tempo. Para isso você precisa ter um gerenciador de login gráfico com suporte à XDMCP. Além disso o Xvnc será executado somente a cada requisão externa.
Existem dois modos no qual o VNC pode ser utilizado com o inetd chamados nowait e wait.
No modo nowait a cada requisão externa em uma mesma porta o Xnvc é executado. O Xvnc nunca irá escutar a porta diretamente, portanto não será possível efetuar requisições externas compartilhadas. Entretanto, utilizando o vncconfig é possível efetuar requisições reversas (do servidor para o cliente) colocando o vncviewer em modo de escuta, veja em detalhes no item Utilizando o vncconfig mais abaixo. Quando a conexão com o vncviewer é finalizada ou interrompida o processo do Xnvc também é finalizado.
Para habilitar esse modo edite o arquivo /etc/inetd.conf e insirá a seguinte linha.
5900 stream tcp nowait nobody /usr/local/bin/Xvnc Xvnc -inetd -query localhost -once securitytypes=none
Neste exemplo a cada requisição externa o Xvnc será executado e o usuário terá acesso da tela de login gráfico via XDMCP, desta forma não precisamos configurar uma senha para o ambiente do VNC (securitytypes=none).
Para parar de usar o VNC basta comentar a linha do inetd.conf e reiniciar o inetd (/etc/rc.d/rc.inetd restart ou killall -1 inetd).
No modo wait, na primeira requisão, o inetd faz com que o Xvnc seja executando escutando a porta diretamente. Isto significa que para cada porta existirá somente Xvnc executando. Portanto novas requisições compartilhadas poderão ser aceitas pelo Xvnc. Mesmo quando a conexão com o vncviewer for finalizada ou interrompida o processo do Xnvc continuará rodando. O processo do Xnvc somente será finalizado quando o usuário efetuar um logoff da sessão do gerenciador de login.
Para habilitar esse modo edite o arquivo /etc/inetd.conf e insirá a seguinte linha.
5900 stream tcp wait agent /usr/local/bin/Xvnc Xvnc -inetd -query localhost -once passwordFile=/home/agent/.vnc/passwd
Neste modo é necessário especificar um arquivo de senha pois o Xvnc continuará rodando até que o usuário efetue o logoff. Se você fechar a janela do vncviewer o Xvnc ainda continuará rodando podendo ser acessado posteriormente por qualquer usuário que tenha acesso a rede. Além disso o Xvnc poderá receber requisições compartilhadas.
Para parar de usar o VNC basta comentar a linha do inetd.conf e reiniciar o inetd (/etc/rc.d/rc.inetd restart ou killall -1 inetd).
O vncconfig possuí duas finalidades. A principal é para controlar um Xvnc que já esta em execução e a outra é habilitar o compartilhamento da área de transferência.
Segue abaixo as opções para a função principal do vncconfig.
-connect [nome ou ip]:[porta] Faz um conexão reversa com um vncviewer que esta escutando em [nome ou ip]. Se a opção :[porta] não for especifícada a padrão (5500) será utilizada. -disconnect Desconecta todos os clientes conectados ao ambiente VNC. [-set] [opção do Xvnc]=[valor] Especifíca um valor para o Xvnc que esta em execução. Essa opção não serve para todas as opções do Xvnc. -list Lista todos as opções que Xvnc suporta. -get [opção do Xvnc] Imprime na tela o valor atual da opção do Xvnc. -desc [opção do Xvnc] Imprime na tela um pequena descrição da opção do Xvnc.
Segue abaixo as opções para o compartilhamento da área de transferência.
-display [display] Especifíca o display em que o ambiente VNC esta sendo executado. -nowin Não exibe a janela de compartilhamento da área de transferência. -iconic Executa a janela de compartilhamento da área de transferência minimizada.
O vncviewer é o cliente para acesso ao ambiente do VNC. Quando executa sem nenhuma opção é exibido uma janela para que você forneça as informações do ambiente VNC que se deseja conectar.
Você também pode especifícar essas opções via linha de comando da seguinte forma vncviewer [opções] nome ou[:display].
É possivel executar o vncviewer em modo de escuta da seguinte forma vncviewer [opções] -listen [porta]. Nesse modo a requisição será feita através do servidor onde se encontra o ambiente VNC em execução.
Cado você não especifíque o modo de condificação e a quantidade de cores o vncviewer irá testar a velocidade entre o cliente e o server e selecionará a mais adequada. Uma vez conectado você poderá alterar algumas dessas opções através do menu do vncviewer precionando a tecla F8.
Segue abaixo as principais opções que você pode utilizar com vncviewer via linha de comando.
-listen [porta] Especifíca a porta em que o o vncviewer irá escutar. A porta padrão é 5500. A conexão remota deve ser inicia a partir do ambiente VNC utilizando o vncconfig (exemplo "vncconfig -connect 192.168.0.2:5500"). -Shared Envia uma requisição compartilhada. Por padrão o ambiente VNC fecha todas as outras conexões quando recebe uma nova requisição não compartilhada. -ViewOnly Faz com que os eventos de teclado e mouse não sejam enviados para o ambiente VNC. Essa opção é util quando se deseja somente visualizar somente o que outro usuário já conectado esta fazendo, por isso é ideal que essa ela seja utilizada em conjunto com a opção "-Shared". -FullScreen Inicia a sessão em modo tela cheia.
Outras opções do vncviewer podem ser vistas em sua man page (man vncviewer).
Para acessar um ambiente via browser, caso o servidor tenha suporte, basta digitar o endereço seguido de dois pontos e a porta na barra de endereços (exemplo http://192.168.0.2:5800). O unico pré-requisito é que o browser precisa ter suporte a java.
O VNC é mais fácil de usar do que ele ja aparenta ser. Além de fácil existe diversas formas seguras de utilização.
A única implementação que falta para o VNC é implementar a transferência de arquivos entre o servidor e cliente. Isso já existe para os projetos http://ultravnc.sourceforge.net e http://www.tightvnc.com porém só para Windows.
Dúvidas, críticas e sugestões devem ser enviadas para agent.smith@globo.com.
Quer saber mais um pouco sobre o autor desta documentação? Acesse minha home page em http://agentsmith.powerlinux.com.br.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários