Redirecionando o X (X11 Forwarding) no GNU Linux
Colaboração: Sandro do Prado Gambini
Data de Publicação: 30 de Julho de 2006
Muitos já tabalharam com o redirecionamento do X, ou seja, em uma máquina servidora (que pode ser qquer distro GNU/Linux) setamos a variável de sistema $DISPLAY para o ip_cliente:0.0 e ao executarmos qualquer programa que se utiliza do ambiente gráfico X, a interface do programa vai ser aberta na máquina especificada em $DISPLAY.
Para isto antes temos que certificar que o X da máquina cliente está apto a receber conexões remotas. Em distribuições voltadas para o desktop como o Kurumin e o Ubuntu, geralmente o X é aberto com a opção -no listen tcp, que desabilita a opção de receber conexões remotas. Uma forma de verificarmos isto é através do comando ntstat, veja:
kurumin@cliente:~$ netstat -atn Conexões Internet Ativas (servidores e estabelecidas) Proto Recv-Q Send-Q Endereço Local Endereço Remoto Estado tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN
Quando o X está apto a receber conexões remotas veremos a porta 6000 em estado "LISTEN" e quando não estiver apto, simplesmente não aparecerá essa porta em escuta. Caso a porta não esteja em LISTEN (escutando), como no exemplo acima, teremos que verificar como o gerenciador de display executa o X.
Nas distros que possuem o KDE como ambiente gráfico, o gerenciador de display utilizado é o KDM (KDE Display Manager), como no Kurumin e nas distros que utilizam o Gnome normalmente é utilizado o GDM (GNOME Display Manager), como no Ubuntu por exemplo. Existe ainda o XDM (X Display Manager) que é o gerenciador implementado pelo próprio X.
Para saber como o KDM e o GDM vão executar o X temos que verificar os seguintes arquivos:
- No KDM, no arquivo /etc/kde3/kdm/Xservers
temos a seguinte linha que inibe o redirecionamento do X:
:0 local@tty1 /etc/X11/X -dpi 75 -nolisten tcp vt7
esta linha deve ser substituída pela linha abaixo::0 local@tty1 /etc/X11/X -dpi 75 vt7
observem que foi retirado o parâmetro "-nolisten tcp" - No GDM em /etc/gdm/gdm.conf
Procure pela sessão
[security]
e altere a opção:DisallowTCP=True
para:DisallowTCP=false
Resumindo, vamos supor um ambiente de rede com um Servidor, ip 192.168.1.1 e uma máquina Cliente, ip 192.168.1.2 e vamos executar um programa no Servidor e visualizá-lo no Cliente, ou seja redirecinando o X:
- Temos que certificar que a porta tcp:6000 está aberta (LISTEN);
kurumin@cliente:~$ netstat -atn Conexões Internet Ativas (servidores e estabelecidas) Proto Recv-Q Send-Q Endereço Local Endereço Remoto Estado tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN
- Acrescentar à lista de controle de acesso do X local(cliente), o ip do servidor
kurumin@cliente:~$ xhost +192.168.1.1 192.168.1.1 being added to access control list
ou ainda desabilitar o controle de acesso do X local(cliente):kurumin@cliente:~$ xhost + access control disabled, clients can connect from any host
- Abrir uma conexão com o Servidor:
kurumin@cliente:~$ telnet 192.168.1.1
oukurumin@cliente:~$ ssh usuario@192.168.1.1
- Já no Servidor basta apontar a variável $DISPLAY para o cliente (para o ssh não precisa):
kurumin@Server1:~$ export DISPLAY=192.168.1.2:0.0
- E finalmente executar o programa desejado:
kurumin@Server1:~$ mozilla &
Com isso o navegador mozilla firefox será executado no servidor porém será visualizado na máquina local.