quarta-feira, 17 de setembro de 2008

Nx Server - Uma ferramenta de acesso remoto realmente útil





Imagem: screenshot de uma máquina remota sendo executada daqui de casa.


Os testes mencionados no testo foram realizados com o servidor e o cliente NX sendo executados no sistema Ubuntu, um sistema baseado no Debian.

O NX Server é um programa incrível. Ele permite que os usuários de uma máquina a acessem remotamente através da Internet ou de uma rede local, como se estivessem sentados em frente à própria máquina. O NX abre uma sessão remota do X, que é, resumidamente, a parte responsável pela interface gráfica dos sistemas Linux, e permite que o usuário abra uma janela de comunicação remotamente, utilizando o seu mouse, teclado e monitor como se a máquina tivesse sendo acessada fisicamente.

Para garantir a segurança desta comunicação, o NX utiliza um túnel SSH para criptografar as informações trocadas e utiliza um sistema proprietário de compressão de imagens, que permite um acesso remoto fluido e com alta usabilidade.

CONFIGURAÇÃO DO SERVIDOR NX:


Para Configurar o Servidor NX na máquina a ser acessada, precisamos fazer o download dos seguintes pacotes no servidor:


# wget http://64.34.161.181/download/3.1.0/Linux/nxclient_3.1.0-6_i386.deb http://64.34.161.181/download/3.1.0/Linux/nxnode_3.1.0-6_i386.deb\ http://64.34.161.181/download/3.1.0/Linux/FE/nxserver_3.1.0-5_i386.deb

Em seguida, devemos instalar os pacotes nessa ordem:

# dpkg -i nxclient_2.0.0-98_i386.deb
# dpkg -i nxnode_2.0.0-98_i386.deb
# dpkg -i nxserver_2.0.0-74_i386.deb


O NX utiliza o SSH para a transferência de dados, portanto o SSH tem que estar instalado e configurado.
 
# apt-get install ssh

O NX é configurado por default pra inicializar junto com a máquina, mas se houver algum problema, podemos iniciá-lo com:

# /usr/NX/bin/nxserver --start

e desabilitá-lo com:

# /usr/NX/bin/nxserver --stop

A porta padrão utilizada pelo NX é a porta 22, já que ele usa o SSH para as transferências. Podemos mudar pra outra porta editando o "/etc/ssh/sshd_conf" no servidor e modificando a porta 22 pra qualquer outra. Em seguida precisamos informar ao NX server que a porta foi alterada. Para isso, basta editar o "/usr/NX/etc/node.cfg" e mudar o "SSHD_PORT=22" para o valor desejado. Depois é só reiniciar o servidor SSH e o Servidor NX:

# /etc/init.d/ssh restart
# /usr/NX/bin/nxserver --restart


CONFIGURAÇÃO E USO DO CLIENTE NX:

Na máquina cliente, precisamos somente instalar o nxclient:
 
# wget http://64.34.161.181/download/3.1.0/Linux/nxclient_3.1.0-6_i386.deb
# dpkg -i nxclient_2.0.0-98_i386.deb



Vamos ao que realmente interessa, que é a criação das conexões e a otimização do NX. Existem versões do cliente NX para várias distribuições Linux, Windows e Solaris, todas de download gratuito. Na maioria das distribuições Linux, ao instalar o cliente NX, são criados ícones no "Iniciar > Internet". Da primeira vez, use o "NX Connection Wizard" para criar a conexão inicial. Se o ícone não tiver sido criado, use o comando "/usr/NX/bin/nxclient -wizard" (usando seu login de usuário, não o root):


m1c949193

Além do Ip do servidor, você precisa informar a porta que ele escutará. O NX usa o SSH para estabelecer a conexão, por isso a porta padrão é a 22. Se você manteve a configuração padrão do SSH, esta é apenas uma opção que vai passar despercebida, mas se você configurou o servidor SSH (no servidor) para escutar em outra porta, é necessário especificar a porta configurada.

De volta à configuração do cliente, estão disponíveis ainda opções com o nível de compressão dos dados e do tamanho da janela. Usando a opção "LAN", que é destinada a conexões via rede local, não existe perda de qualidade de imagem, mas, ao usar as demais opções, destinadas a conexões mais lentas, as imagens são comprimidas via JPG, o que garante uma atualização mais rápida, porém com uma certa perda de qualidade. Conforme você vai usando, os pixmaps vão sendo retransmitidos e substituídos por cópias sem compressão, fazendo com que a imagem vá ficando mais nítida.

Na segunda janela, temos outra opção importante, que é a seleção do ambiente gráfico usado. O cliente NX não é capaz de detectar automaticamente o ambiente gráfico usado no servidor, de forma que você precisa especificá-lo na criação da conexão. Ao acessar um servidor Linux com o KDE, escolha "Unix > KDE" e, ao acessar um servidor com uma distribuição baseada no Gnome, use o "Unix > Gnome":
5f0af460
A opção "Select size of your remote desktop" permite especificar o tamanho da janela com a conexão remota. A opção "Available area" faz com que a janela ocupe todo o espaço útil do desktop, sem cobrir a barra de tarefas (o ideal na maioria das situações), mas você pode também especificar uma resolução qualquer, como "1000x700" ou "800x480". Não é necessário se prender às resoluções mais usadas, você pode utilizar qualquer valor.

O cliente NX se encarrega de criar ícones no desktop para as conexões criadas, o que facilita o acesso a elas:
1f11af9
Entretanto, para ter acesso ao botão "Configure...", que dá acesso ao painel de configurações, você precisa abrir a conexão usando o ícone "NX Client" no menu, ou o comando "/usr/NX/bin/nxclient -wizard".
Ao acessar o menu de configuração, você tem acesso a um conjunto extra de opções. A primeira dica é a opção "Remember my password" na aba "General", que permite memorizar a senha de acesso. Marcando a opção "Use custom settings" você tem acesso a um menu com opções adicionais relacionadas à compressão da imagem:

4e8cc44e
m49134060
Aqui você tem a opção de ajustar o nível de compressão do JPG (os níveis mais altos são úteis em conexões via modem), usar compressão via RGB (um formato sem perda) ou desabilitar completamente a compressão usando a opção "Use plain X bitmaps". Esta última opção consome mais banda da rede (o que não chega a ser um problema em uma rede de 100 megabits), mas em troca usa menos processamento, tanto no servidor quanto no cliente. Ela é uma boa opção para uso em rede local, onde temos bastante banda disponível.

Na aba "Advanced" temos a opção "Disable ZLIB stream compression", mais uma opção interessante para melhorar o desempenho das conexões via rede local em clientes com pouco processamento.
A opção "Disable encryption of all trafic" faz com que o NX deixe de utilizar o SSH como meio de transporte e passe a transmitir todos os dados da conexão de forma insegura. Embora reduza o volume de processamento usado, ela não é uma boa opção, pois, além de eliminar a principal vantagem do NX (a segurança das conexões), ela complica a configuração do firewall no servidor e nos clientes.

Originalmente, o NX transmite todos os dados através de túneis criados através do SSH, de forma que você precisa apenas manter a porta 22 aberta no firewall do servidor para que tudo funcione. Os clientes não precisam de portas abertas e podem inclusive acessar o servidor através de um proxy.

Entretando, ao desativar a encriptação o NX passa a utilizar o SSH apenas para fazer autenticação e estabelecer a conexão inicial, mas depois utiliza um conjunto de portas entre a 5000 e a 5200 para a transmissão dos dados. Com isso, os clientes precisam não apenas estarem diretamente conectados ao servidor, mas também ficarem com as portas de 5000 a 5200 abertas no firewall, ou seja, é muito mais simples manter a opção desativada, deixando que o NX encripte todo o tráfego.

Logo abaixo temos as opções relacionadas aos caches, que comentei brevemente no início do post. Uma observação sobre ocache feito no HD (on disk) é que ele é permamente, ou seja, o espaço continuará sendo ocupado até que você use a opção "Remove all cache files". Se você acessa servidores remotos com frequência, sobretudo se o faz através de conexões lentas, o cacheem disco é bastante útil, pois reduz consideravelmente o volume de dados que precisam ser transferidos a partir da segunda conexão. Entretanto, se você acessa através da rede local, então o cache no HD só atrapalha, pois transferir os dados através da rede é mais rápido do que lê-los no HD. Nesse caso, configure-o com o valor "0", o que desativa o recurso.

O cache na memória, por outro lado, ajuda tanto em conexões locais quanto em conexões remotas. Se seu computador tem bastante memória disponível, é interessante reservar 64 MB ou mais.

m3cfee73c
718fafb5
Na aba "Services", você tem a opção de ativar o compartilhamento de arquivos e impressoras entre o servidor e o cliente (Enable SMB print and file sharing), que permite que você acesse arquivos compartilhados na sua máquina de dentro da sessão remota e também imprima em impressoras compartilhadas na sua máquina. Esta opção é bastante interessante, pois permite que você trabalhe nos arquivos da sua máquina, usando os programas instalados no servidor.

Para que a opção funcione, é necessário que você crie os compartilhamentos no cliente (no caso dos clientes Linux você pode usar o Samba), mantenha o servidor Samba instalado e ativo no servidor e cadastre os compartilhamentos que serão mapeados usando o botão "Resources > Add".

A opção "Enable CUPS printing" logo abaixo é similar, permitindo que você imprima em uma impressora instalada na sua máquina a partir do servidor, mas ela é destinada a clientes Linux usando o Cups. Finalmente, a opção "Enable multimedia support" compartilha o dispositivo de som, permitindo que os fluxos de áudio gerados dentro da sessão do NX sejam tocados nas caixas de som do seu computador. Com isso, ao ouvir um MP3, o som será transportado via rede e tocado no seu computador e não no servidor.

Continuando, além de abrir um desktop completo (como no VNC), o NX pode ser configurado para abrir um aplicativo específico. Isso é especialmente útil quando você tem clientes Windows que precisam executar um aplicativo específico a partir de um servidor Linux. Para isso, abra a janela de configuração e, na aba "General", selecione a opção "Desktop > Unix > Custom" e clique no botão "Settings":

69baacbe
50cfa809
Na janela que será aberta, marque a opção "Run the following command" e especifique o comando do aplicativo que você deseja que seja executado, como, por exemplo, "firefox" ou "gimp". Marque também a opção "Floating window" ao invés de "New virtual desktop". Com isso, o aplicativo remoto será aberto na sua máquina como se fosse um aplicativo local, inclusive aparecendo na barra de tarefas.

Este recurso é especialmente interessante em clientes Windows, já que perite executar aplicativos Linux instalados no servidor de forma transparente, lado a lado com os programas do Windows:
1b14abf2
Um detalhe interessante é que se você abrir um terminal usando a opção "Run the console", você poderá chamar qualquer outro aplicativo instalado no servidor a partir dele. No screenshot anterior, por exemplo, configurei o cliente NX para abrir uma janela do Konsole, que usei para abrir o Gimp, o Kopete e o Kaffeine. Como pode ver, todos estão sendo executados integrados ao desktop do Windows, com janelas próprias e botões na barra de tarefas.

Ao criar uma nova conexão, o cliente NX oferece a opção de criar um ícone no desktop. Ao clicar sobre o ícone criado, é aberto o aplicativo configurado, que é exibido no cliente como se fosse um aplicativo nativo, aparecendo na barra de tarefas. É uma boa forma de executar aplicativos Linux no Windows e impressionar seus amigos, ou "quebrar o gelo" dentro de projetos de migração, implantando os aplicativos Linux que serão futuramente usados, inicialmente dentro do Windows (através do NX) e, depois, nativamente.

Alguns trechos e imagens foram retirados de: http://www.guiadohardware.net

2 comentários:

Leonardo disse...

Sou das antigas , mas ao inves de usar um prgma externo , nao era mais facil , na maquina remota , exportar a variavel DISPLAY para um device que nao seja o seu ?

pHd² disse...

Realmente é mais fácil exportar o display para outro device. Porém, após a configuração do NX server na máquina, o processo de se conectar e utilizar a máquina remotamente se torna muito mais prático e eficiente. A grande vantagem de utilizar um programa como o NX é a compactação dos quadros de imagem enviados, visto que ao exportar a variável DISPLAY, os quadros de imagem seriam enviados sem nenhum grau de compressão, desperdiçando muita banda e diminuindo a resposta do sistema. O nx permite que você ajuste a taxa de compressão dos quadros para se adequar a sua banda passante. Como um exemplo de acesso remoto sem compactação, que é muito lento, podemos por exemplo testar o uso do SSH com o parâmetro "-X", que permite o acesso gráfico de um programa remotamente. Para o uso em LANs, exportar o display realmente não representaria um problema sério, mas para acessar uma máquina da empresa de casa por exemplo, com uma conexão limitada, fica complicado enviar tanta informação sem perder um pouco da qualidade no acesso remoto.

Obrigado pelo comentário, e grande abraço!

Postar um comentário