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 [email protected]
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:
- Xming X Server for Windows – http://sourceforge.net/projects/xming
- PuTTY – http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
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.