Português do Brasil English
Devin no Facebook  Devin no Twitter  RSS do Site 
Linux    

Executando aplicações gráficas remotamente


Comentários  13
Visualizações  
41,699

Muitas instalações de servidores Linux têm como um requisito não instalar o ambiente gráfico e seus programas. Isso é bem plausível pelo fato de que quando você faz isso, você economiza no tamanho do banco de dados dos pacotes, no espaço em disco, na gerência e atualizações destes pacotes, entre outros. E em um servidor, não ter uma interface gráfica não é tão problemático, pois geralmente ninguém fica na frente da tela utilizando a máquina.

Mas e se por acaso você quiser utilizar algum programa que só funciona através de uma interface gráfica neste servidor? Isto é o que acontece em alguns programas como por exemplo o banco de dados Oracle que possui uma interface gráfica de instalação. Se o servidor não possui uma interface gráfica, então como instalar isso? Ou como utilizar esses programas?

No Linux, o ambiente gráfico (X11/Xorg) possui a capacidade de executar aplicações gráficas remotamente. Isto quer dizer que eu posso executar algo em uma máquina e as telas do programa podem aparecer em outra máquina. No nosso caso isso seria muito útil, não? Se no meu servidor não existir uma interface gráfica, eu posso utilizar a interface gráfica do meu desktop cliente!

Neste tutorial, vamos supor que tenhamos um servidor Linux que só é acessado via SSH e temos um cliente que também é Linux. Também temos como IPs:

  • IP do Servidor: 192.168.0.1
  • IP do Cliente: 192.168.0.2

Método 1: X11 Forwarding via SSH

O SSH possui uma opção que cria um túnel e manda todas as conexões gráficas diretamente por uma sessão encriptada em SSH.

1.1. Configuração do servidor SSH

Para que os programas tenham seus pacotes enviados remotamente, o SSH precisa estar configurado para aceitar isso. A maioria das distribuições já deixam esta configuração feita, mas por via das dúvidas, logue-se via SSH no servidor como root, edite o arquivo /etc/ssh/sshd_config e procure pela linha:

X11Forwarding yes

Certifique-se de que esta opção esteja como “yes” (sim). Se estiver como não ou comentada, deixe como a linha acima. Feito isto, reinicie o serviço de SSH com o seguinte comando:

/etc/init.d/sshd restart

(Nota: Este comando acima pode mudar de distribuição para distribuição, apesar da maioria aceitá-lo. Se for o caso de não funcionar com voce, mude de acordo com a sua distribuição)

1.2. Executando as aplicações

Com a configuração do servidor SSH feita, basta apenas você executar a aplicação remotamente via um comando de ssh. Logue-se em um ambiente gráfico da máquina cliente e em um terminal utilize o comando:

$ ssh -X -C usuario@192.168.0.1

Onde usuario é o nome do usuário no servidor e o IP 192.168.0.1 corresponde ao IP do servidor. Com este comando você entrará na máquina servidor via SSH e todo comando gráfico que você executar estará sendo enviado via túnel SSH para a máquina cliente:

./aplicacao

Vói-la! Agradecimentos ao meu amigo Luiz Paulo Leite Machado por me dar uma força nessa parte do X11 Forwarding!

Método 2: Conexão X11 direta

Outra forma de executar aplicações remotamente é através do próprio servidor X que oferece este tipo de suporte, com o transporte das telas das aplicações via conexões TCP na porta 6000.

2.1. Configuração do Cliente – DisplayManager

Por padrão em muitas distribuições, o servidor X vem desabilitado para acesso remoto (por questões óbvias de segurança). Então a primeira coisa que você deverá fazer é habilitar esse acesso via TCP ao servidor X. Para saber se o seu servidor está aceitando conexões TCP ou não, use o comando ps:

$ ps ax | grep X
2402 tty7     RLs+  11:28 /usr/bin/X :0 -br -audit 0 -auth /var/gdm/:0.Xauth -nolisten tcp vt7

No meu exemplo acima, o treco -nolisten tcp me diz que o servidor não está aceitando conexões TCP. Se esta sua linha não tiver o parâmetro -nolisten, então provavelmente as conexões já estão liberadas.

Se o seu estiver como no exemplo, você terá que mudar a configuração para que as conexões sejam aceitas. Isto vai depender um pouco de qual distribuição e/ou ambiente gráfico você utiliza.

No caso de utilizar o GDM (do projeto GNOME), edite o arquivo /etc/X11/gdm/gdm.conf (ou /etc/gdm.conf), procure a seção [Security] e configure a linha:

DisallowTCP=false

Esta linha acima provavelmente estará com o valor true, então mude para false para ele permitir as conexões TCP. Em seguida reinicie o servidor X (pode ser deslogando-se ou apertando CTRL+ALT+BACKSPACE).

No caso de utilizar o KDM (do projeto KDE), edite o arquivo /etc/kde/kdm/kdmrc (ou o kdmrc em outro lugar), procure pela seguinte linha:

ServerArgsLocal=-nolisten tcp

Achando esta linha, comente-a para que o -nolisten tcp não seja executado com o servidor X. Em seguida reinicie o servidor X (pode ser deslogando-se ou apertando CTRL+ALT+BACKSPACE).

2.2. Configuração do Cliente – Permissão

Com o cliente aceitando conexões gráficas via TCP, falta agora permitir que o servidor possa conectar. Para fazer isso podemos usar o comando xhost. Então no cliente, já logado na interface gráfica com um usuário qualquer, use o comando da seguinte forma:

# xhost +192.168.0.1

No exemplo acima eu permiti que o servidor (IP 192.168.0.1) pudesse fazer conexões gráficas na sessão X do meu cliente. Lembrando que esta configuração se perde caso você se deslogue.

2.3. Configuração do Cliente – Firewall

Uma nota bastante importante: verifique se o cliente não está bloqueando o acesso do servidor via firewall. Se um firewall estiver ativo no cliente, certifique-se de que ele aceita conexões vindas do IP do servidor, ou conexões na porta 6000.

2.4. Executando a aplicação

Agora com tudo (ou quase tudo) configurado, é hora de executar a aplicação no servidor e esperar aparecer a janelinha no cliente. Logue-se via ssh no servidor e primeiro digite:

$ export DISPLAY=192.168.0.2:0

Onde o 192.168.0.2 é o IP do cliente onde está a interface gráfica. Esta variável de ambiente DISPLAY é quem diz aos programas gráficos onde jogar suas telas gráficas. Nesse caso, estamos dizendo para jogar na outra máquina.

Nota: O “:0″ depois do IP significa o “display” do servidor remoto. Na maioria dos casos só há uma tela gráfica nas máquinas e o 0 sempre vai funcionar, mas como o servidor X também suporta vários ambientes gráficos rodando na mesma máquina, este número pode aumentar pra 1, 2, 3… dependendo de qual tela é. Na dúvida, use o 0. Se não funcionar, veja em que display executar vendo no comando ps apresentado mais acima.

Configurada a variável, basta apenas executar a aplicação:

./aplicacao

Com isso as telas da aplicação (e só elas) deverão aparecer no cliente!

Método 3: Utilizando o Windows como cliente

Vamos supor agora que você, triste e chorando, não tenha um cliente Linux com um ambiente gráfico. Nesse caso, infelizmente você apenas possui uma máquina com Windows. O que fazer?

Calma, pra tudo há uma solução! Para resolver este problema, você precisará de duas aplicações instaladas em seu Windows:

O Xming é um servidor X livre que vai funcionar como o Xorg no Linux e o PuTTY é o cliente SSH para você acessar o servidor. Antes de começar o processo, estou supondo aqui que você leu as partes anteriores e sabe mais ou menos como funciona o processo de execução remota.

3.1. Xming X Server

Instalando e executando o Xming X Server, um ícone aparecerá no systray. Enquanto este ícone estiver lá, um servidor X estará funcionando localmente no display 0 (localhost:0), exatamente igual à um Linux. Isto vai permitir que você execute aplicações dentro da interface do Windows.

3.2. PuTTY + X11 Forwarding

Para utilizar o mesmo processo de X11 Forwarding, uma vez baixado o PuTTY, execute-o e configure-o primeiro na seção Connection -> SSH -> X11, habilitando a opção X11 Forwarding.

Feito isto, conecte normalmente a sessão SSH ao servidor e toda aplicação gráfica executada irá mandar as telas via o túnel encriptado SSH.

3.3. PuTTY + Conexão X11 Direta

Como o servidor Xming já está configurado para receber as conexões diretas X11, basta apenas você acessar o servidor via SSH com o programa PuTTY e fazer o mesmo que o passo 2.4.