Portal do Administrador
de Servidores LINUX
01/04/2004 - 23:10:14
Faça uma busca:
Equipe APLINUX | Recomende o site | Enviar um artigo |    
  APLINUX
    Home
    Artigos
    Ferramentas
    Certificação
    Downloads
    Links
    TOP 10
    Contato
    Sobre
    aplinux
  NEWSLETTER
    Digite seu e-mail no
    campo abaixo e
    receba nossas dicas
    e novidades
    diariamente.
    aplinux
  ENQUETE
  O que achou do site?
  Ótimo
  Bom
  Ruim
Ver Resultados
    aplinux
  FACULDADE
    Para os alunos...
    aplinux
  OPINIÃO
    Todas as semanas,     a equipe do APLINUX     vai escrever uma     coluna espondo sua     opinião sobre a notícia     mais comentada pela     comunidade LINUX.
    Confira!!!
    aplinux
  DISTRIBUIÇÕES
    Conectiva
    Slackware
    Debian
    Suse
    aplinux
  VERSÕES ESTÁVEIS
    Kernel 2.6.3
    Bind 9.2.3
    Apache 2.0.48
    Sendmail 8.12.11
    IPTables 1.2.9
    Squid 2.5
    ProFTP 1.2.8p
    OpenSSH 3.8
  ARTIGOS LINUX - Administração Geral
    aplinux
    Executando aplicações gráficas remotamente
    aplinux
Executando aplicações gráficas remotamente

por: Germano Barreiro
23 de julho de 2002

Embora a linha de comando do Linux seja extremamente poderosa e um terminal em modo texto como o SSH possa suprir a esmagadora maioria das necessidades em materia de suporte remoto a uma máquina Linux, não é tão difícil defrontar-se com uma situação em que seja interessante executar remotamente uma aplicação gráfica. Um exemplo disso é o instalador do banco de dados Oracle 9i para Linux, que por não possuir instalação em modo texto (embora possua uma opção de instalação não interativa), levou-me a fazer a pesquisa que resultou neste pequeno roteiro.

Existem aplicativos que disponibilizam acesso remoto ao terminal gráfico de uma máquina, a exemplo do VNC. Entretanto, o próprio servidor X disponibiliza ferramentas que permitem chegar a um resultado bastante próximo se não idêntico, com o detalhe de que não é necessário que o ambiente gráfico esteja configurado na máquina remota. Pois, desde que é sabido que o ambiente gráfico do Linux é separado em dois componentes principais compostos de um servidor (X) e um cliente qualquer (window maker, kde, gnome, etc), nada impede que o servidor X esteja rodando na máquina do seu escritório enquanto o cliente seja executado numa máquina remota em algum outro lugar (que pode ser ate bem longe), mas visivel na sua maquina por estar usando o seu servidor e, portanto, o seu hardware de vídeo, teclado e mouse.

Nas explanações que seguem chamaremos de máquina A o computador onde se deseja visualizar a aplicação gráfica da outra máquina, e B a máquina acessada remotamente que deve executar esta aplicação.


XHost


Esta é uma das formas mais simples de execução de uma aplicação gráfica remotamente, exigindo bem poucos passos. Proceda da seguinte forma:


1. Inicie seu ambiente gráfico favorito em A
2. Abra um terminal e entre com o comando: xhost +B (sendo que, aqui, B pode ser tanto o nome da máquina B quanto seu endereço IP. Exemplos: xhost +servidor23 , xhost +10.1.1.22)
3. Abra um terminal remoto para a maquina B, e configure em B a variável de ambiente DISPLAY para o valor A:0 (de novo, A pode ser o nome ou o endereco IP de A. Exemplos de comandos para o bash: export DISPLAY=desktop12:0 , export DISPLAY=10.1.1.78:0).
4. Em B, usando o mesmo terminal remoto, chame a aplicação gráfica. Para teste, tente o xcalc ou o xclock. A tela da aplicação vai aparecer no desktop de A, mas na verdade estará executando em B. Nao se deixe enganar! :-)


SSH


O ssh, se for corretamente configurado, automatiza completamente este processo de configuração e autenticação da máquina que vai acessar seu servidor X. Para conseguir isso, em A, edite o arquivo de configuração do cliente ssh (atualmente ssh_config para a versao 3.0.2) e ajuste o seguinte parâmetro:


ForwardX11 yes


Na maquina B, edite o arquivo de configuração do servidor (sshd_config) garantindo a presença do seguinte parâmetro:


X11Forwarding yes


É só. Abra uma nova sessão ssh da máquina A para a máquina B e execute qualquer aplicação gráfica, que a interface da mesma aparecerá na sua tela.


EU QUERO TUDO


A esta altura os mais ambiciosos perguntarão se existirá uma maneira de executar um gerenciador de janelas inteiro em B, mas visualizando em A. Sem dúvida é possível, pois um gerenciador de janelas não é mais que uma coletânea de aplicações gráficas que executam conjuntamente, todas utilizando o mesmo servidor X. Entretanto, isto dá algum trabalho a mais, exigindo vários passos. Quando o script startx é chamado, ele executa automaticamente o servidor X e o cliente que voce tiver configurado na mesma máquina. Porém, no nosso caso, o servidor estará rodando em A e o cliente, ou gerenciador de janelas, em B. E deverá, de novo, haver um mecanismo de autenticação de B para A, pois razões de segurança impedem o servidor X de permitir que toda e qualquer máquina na rede o acesse. Uma das maneiras de se conseguir isso e configurando o arquivo .Xauthority na pasta home do usuário nas duas máquinas, o que é feito através da aplicação xauth. Neste exemplo, vamos supor que voce já tenha o ambiente gráfico rodando localmente na sua máquina, com seu gerenciador de janelas, e que deseje ter acesso a uma segunda tela gráfica onde seja visível o gerenciador de janelas da máquina remota. Segue o procedimento:


1. Em A, abra um terminal e entre com o comando: xauth add A:1 . `mcookie`
Isto vai adicionar no arquivo .Xauthority uma chave que B usará para se autenticar no servidor X que, mais tarde, estará rodando no display 1 da máquina A (daí o porque de A:1). Relembrando, A pode ser tanto o nome quanto o endereço IP da máquina. O aplicativo mcookie é um gerador de números randômicos que criará a chave de autenticação. O ponto entre A:1 e `mcookie` diz que será usado o protocolo MIT-MAGIC-COOKIE-1 para a autenticação entre as máquinas.


2. Em A, de o comando: xauth .Dentro do terminal de xauth, de o comando: list .. Se o primeiro comando foi bem sucedido, voce deverá ver algo como:
A/unix:0 MIT-MAGIC-COOKIE-1 c9745c19da3cc1576987358dbbe0c9a8
A:0 MIT-MAGIC-COOKIE-1 c9745c19da3cc1576987358dbbe0c9a8
A/unix:1 MIT-MAGIC-COOKIE-1 256d116b1b3846364b6d642d68605069
A:1 MIT-MAGIC-COOKIE-1 21f6140d2540db28a9331cd666b1134a


Note que a última linha representa exatamente a chave que acabou de ser adicionada e que será usada por B para se autenticar em A.


3. Ainda dentro do aplicativo xauth em A, de o comando: extract arquivo-chave A:1
O argumento arquivo-chave pode ser qualquer nome de arquivo válido. A:1 é exatamente como aparece o primeiro campo da última linha após o comando list.
4. Entre com o comando exit para sair do xauth. Você verá que o arquivo arquivo-chave foi gerado no diretório atual. Coloque esse arquivo na pasta home do usuário na máquina B.
5. Abra um terminal para a máquina B e, a partir da pasta home do usuário, entre com o comando: xauth . Dentro da linha de comando do xauth, dê o comando: merge arquivo-chave
6. Dê o comando list para ter certeza que a chave foi adicionada. Você a verá na última linha.
7. Dê o comando exit para sair e salvar o .Xauthority.A configuração até aqui só precisa ser feita uma vez. Nas próximas vezes que for usado o terminal gráfico remoto, inicie diretamente o passo 8
8. Em A, inicie o servidor X com o comando: X :1 -auth ~/.Xauthority & Você verá aparecer uma tela cinza com um cursor do mouse em forma de X. Para voltar ao seu gerenciador de janelas, digite CTRL+ALT+F7.
9. Em B, ajuste a variável DISPLAY para A:1, como explicado anteriormente.
10. Finalmente, chegou a hora de executar o gerenciador de janelas em B. Nao chame o script startx, pois como já foi dito aqui ele chama tanto o cliente quanto o servidor para executarem localmente. Muitos gerenciadores de janelas são iniciados através de algum script, e deve-se tomar cuidado que os mesmos nao sobreescrevam o valor de DISPLAY. Segue o procedimento para o kde, o windowmaker e o gnome:
10.1 Wmaker: apenas entre com o comando wmaker , que é o aplicativo que inicia este gerenciador de janelas.
10.2 KDE3: de o comando startkde
10.3 GNOME: de o comando gnome-session
Pronto. Se voce digitar CTRL+ALT+F7, estará acessando seu gerenciador de janelas da sua máquina local (A). Se digitar CTRL+ALT+F8, verá o gerenciador de janelas da máquina remota (B), e qualquer aplicativo chamado a partir deste estará executando na máquina remota.
Para parar, simplesmente de logout do gerenciador de janelas e depois use o comando kill para encerrar o servidor X que estava servindo a máquina B.
Referências:
man pages do servidor X,
Remote X Apps – Mini HOWTO (http://www.ibiblio.org/pub/Linux/docs/HOWTO/mini/other-formats/html_single/Remote-X-Apps.html)