Para esta parte das tarefas, ache um colega para fazê-las com você. Os
dois precisam estar em sessões de X11 em sistemas na rede e ter acesso ao
servidor socrates. Os sistema locais utilizados devem ter boa
conectividade com a rede onde está o servidor socrates, para tornar
viáveis na prática estes exercícios. Quaisquer máquinas na rede local do
Instituto ou em qualquer ponto da rede da USP satisfazem a este quesito.
Máquinas residenciais dificilmente serão satisfatórias para a execução
destas tarefas, a não ser que os participantes tenham em casa um dos
serviços de internet rápida que estão disponíveis hoje em dia. Mesmo que
este seja o caso, é necessário também que os sistemas residenciais e os
sistemas de conexão com a Internet estejam bem instalados e configurados.
Os sistemas precisam ter todo o software necessário instalado, enquanto a
rede precisa estar permitindo o tráfego dos protocolos necessários.
- Cada um dos dois deve abrir uma sessão no X11 de um sistema local.
A primeira providência é estabelecer um sistema de comunicação entre
vocês. Para isto, use o talk: um dos dois descubra quais são o username e
o hostname da máquina do outro e digite num terminal
talk <username>@<hostname>
O outro deve responder seguindo as instruções que aparecem na tela. Com
isto, aparecerão no terminal duas janelas, cada uma mostrando o que
digita um dos dois parceiros da conversação. Mantenham esta janela aberta
e reservada para esta finalidade.
- Cada um dos dois parceiros deve abrir a sua sessão X11 para
conexões a partir da máquina do outro, usando o comando
xhost +<hostname-do-outro>
Façam isto, usando o talk para se comunicar e passar as informações
necessárias. Cada um dos dois deve testar o sucesso da operação abrindo
momentaneamente um
xclock -display <hostname-do-outro>
na tela do outro e confirmando com o colega, através do talk, que
está tudo funcionando corretamente.
- Cada um dos dois deve usar os programas xloadimage, xdvi, gv, etc, para mostrar ao outro uma ou mais imagens e
textos. Em todos os casos deve ser usada a opção -display
<hostname-do-outro> e o colega deve confirmar o sucesso da operação
usando o talk.
- O mesmo pode ser feito com aplicativos interativos tais como o emacs, mas é necessário cuidado, responsabilidade e respeito mútuo para
fazer este tipo de coisa, pois o usuário que abre uma janela deste tipo
na tela do outro está permitindo a este outro que escreva em sua conta.
O mesmo é verdade para qualquer programa que permita que se escreva um
arquivo, tais como o xmgr. No caso do emacs e de outros
aplicativos que permitam a abertura de uma shell, trata-se de uma
abertura completa da sua conta ao seu parceiro. Naturalmente, estamos
assumindo que haja completa confiança e respeito entre os dois parceiros,
que irão agir de forma responsável.
Mantendo estes fatos em mente, experimentem um pouco com este tipo de
coisa, usando os muitos aplicativos X11 existentes nos sistemas.
- Como vocês deve ter percebido, esta forma de cooperação através da
rede é um tanto incompleta, devido ao fato de que os dois parceiros não
podem estar vendo o mesmo desktop simultaneamente. Para corrigir isto,
vamos usar o sistema VNC, que é uma extensão do X11 normal. A primeira
coisa a fazer é um dos dois parceiros inicializar um desktop virtual ao
qual ambos poderão se conectar ao mesmo tempo. Valerão aqui as mesmas
observações sobre confiança e responsabilidade que foram feitas
anteriormente. Um dos dois parceiros deve entrar no servidor socrates usando o comando telnet e, uma vez lá, iniciar um desktop
virtual usando o comando
vncserver -alwaysshared -depth 16 -geometry 800x600
onde a opção -depth define a profundidade de cor do desktop que é
criado e a opção -alwaysshared fará com que o servidor aceite
conexões adicionais sem quebrar as conexões existentes, independentemente
de se usar ou não a opção -shared no cliente, como veremos adiante.
O uso do telnet em vez do ssh para esta função específica é
recomendado para evitar problemas devidos ao fato de que o VNC interage
mal com os sistemas de autorização e forwarding do ssh.
Caso o usuário nunca tenha feito este tipo de coisa antes, o servidor
solicitará a definição de uma password de acesso ao desktop. O usuário
deve inventar uma password, que pode ser longa mas não deve conter
caracteres especiais. Não use a sua password de login no sistema, invente
algo bem diferente. O servidor irá informar na tela qual foi o número de
display que foi associado a este desktop virtual. O usuário deve marcar
este número em algum lugar.
- O usuário que inicializou o desktop deve passar para o seu parceiro
o número de display e a password relativos ao desktop. Caso ele já tenha
uma password anterior que não deseje revelar, pode mudar a password para
um valor temporário, usando o comando vncpasswd, restituindo a
password original da mesma maneira ao final dos exercícios.
Feita a transmissão destas informações através do talk, cada um dos
dois usuários pode se conectar ao desktop virtual através do comando
xvncviewer -shared socrates:<numero-de-display>
onde deve-se substituir o número de display fornecido pelo servidor. Cada
um dos dois usuários terá de digitar a password do desktop. Caso o
servidor tenha sido iniciado sem a opção -alwaysshared, é
importante não esquecer a opção -shared, ou o segundo usuário que
entrar causará a queda automática da conexão do primeiro.
- No monitor de cada uma das duas máquinas locais será aberta uma
janela de X11 contendo o desktop virtual! Trata-se de uma janela de um
desktop (o seu desktop local) contendo um outro desktop, que está rodando
no servidor. Este desktop virtual tem o seu próprio cursor gráfico, que é
capturado pelo mouse quando este entra na janela. De agora em diante, é
importante manter as ações dos dois usuários coordenadas através do canal
de comunicação estabelecido pelo talk.
Observem que o controle do mouse e do teclado passa livre e dinamicamente
de um usuário para o outro, com base na atividade destes dispositivos.
Para que um dos dois usuários possa fazer alguma coisa no desktop sem ser
perturbado, é necessário que o outro mantenha o seu mouse fora do desktop
e coloque o foco em alguma outra janela do seu desktop local, por exemplo
na janela onde está rodando o programa talk.
Experimentem um pouco com a mecânica deste processo. Observe que tudo que
um usuário estiver fazendo é agora visível também para o outro, de forma
dinâmica.
- Dependendo do conteúdo dos arquivos de configuração da conta do
usuário que iniciou o desktop, partindo do arquivo .vncrc, é
possível que já existam algumas janelas no desktop virtual. Eliminem
todas as janelas já existentes no desktop, caso haja alguma, dando exit nos terminais ou eliminando editores e outros possíveis aplicativos
com os comandos apropriados de cada um.
- Vamos agora abrir terminais dentro do desktop a partir de fora, um
de cada um dos dois usuários. Primeiramente o usuário que inicializou o
desktop deve abrir o seu terminal e, dentro dele, dar o comando xhost apropriado para permitir conexões a partir da máquina de seu
parceiro. Note que o desktop VNC é de fato um servidor X11 como qualquer
outro, a menos de não estar controlando um monitor diretamente, de forma
que todas as operações relativas a ele devem se processar como de hábito
com um servidor X11. Como já fizemos antes, devemos executar neste caso
xhost +<hostname-do-outro>
Para abrir os terminais basta executar, em algum outro terminal de seus
desktops locais, o comando
xterm -display socrates:<numero-de-display>
onde deve ser substituído o número de display do desktop. É conveniente
usar também uma ou mais das opções -rv, -fn 7x14bold e -geometry 80x24. A fonte discriminada aqui é particularmente
recomendada, dadas as dimensões um pouco reduzidas do desktop que foi
criado.
- Observe que cada um dos dois terminais está rodando na conta do
respectivo usuário, com autorização de escrita. Se quiserem, vocês podem
agora iniciar uma sessão de talk dentro de um destes terminais,
eliminando a necessidade de ter uma sessão de talk externa. Com
ainda maior simplicidade, basta cada um abrir um editor emacs em
modo ``scratch'' e escrever dentro, pois ambos verão o que cada um
escrever. Para abrir um emacs dentro do desktop pode-se usar
emacs -display socrates:<numero-de-display>
tanto na janela externa quanto na janela que está rodando dentro do
desktop. Aqui também deve ser útil usar algumas das opções adicionais
mencionadas anteriormente. Experimentem algumas destas alternativas de
forma a estabelecer um canal de comunicação mais conveniente.
- Utilizem o editor emacs (na realidade, também pode ser
qualquer outro editor) para fazer uma edição de texto da qual ambos
possam participar, se revezando nos trabalhos de digitar e de monitorar o
que o outro está fazendo. Para este tipo de coisa fica particularmente
claro quão útil seria um canal de voz pela rede. Utilizem outros
aplicativos para mostrar de forma compartilhada diversas figuras e
gráficos.
- Tentem rodar alguns screen savers dentro do desktop para ver se
tudo funciona como se espera. Tentem, por exemplo, o comando
xlock -nolock -mode penrose
Experimentem também com outros modos do screen saver. Tentem também jogar
algum jogo se cartas, como o ``free cell'' ou algo parecido. Será que
vocês conseguem cooperar num jogo deste tipo através deste sistema?
- Experimentem tentar mudar o gerenciador de janelas dentro do
desktop. Será necessário achar e eliminar o processo correspondente ao
fvwm que já está rodando e em seguida iniciar algum outro
gerenciador de janelas no background, tal como, por exemplo, o afterstep, o olwm, icewm ou algum outro. Depois de
experimentar um pouco, talvez seja melhor voltar para o fvwm, que
deve estar mais bem configurado para este tipo de desktop.
- Uma das características importantes do sistema VNC é que trata-se
de um sistema de desktops persistentes, ou seja, o desktop permanece em
operação enquanto o servidor onde ele está rodando não cair ou for
rebootado, mesmo se as conexões com os clientes forem interrompidas por
qualquer motivo. Ao voltar, os clientes encontrarão o desktop exatamente
na situação em que o deixaram. Experimentem quebrar suas conexões com o
servidor. Isto pode ser feito de diversas formas: matando-se o processo
do xvncviewer com um [Ctrl]-C, usando-se os botões da barra
superior da janela onde está o desktop ou usando-se o comando kill.
Depois, voltem a estabelecer as conexões e verifiquem que o desktop está
exatamente como o deixaram.