Portal do Administrador de Servidores LINUX 01/04/2004 - 23:10:14 |
|
|||
APLINUX |
Home |
Artigos |
Ferramentas |
Certificação |
Downloads |
Links |
TOP 10 |
Contato |
Sobre |
aplinux |
NEWSLETTER |
aplinux |
ENQUETE |
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) |