% JLdL 20May01.
%	Copyright (C) 2000-2002 by Jorge L. deLyra.
% Mail: <delyra@latt.if.usp.br>. Web: "http://latt.if.usp.br".
% Este documento pode ser copiado e/ou distribuído livremente.
% Ver os termos e condições nos arquivos do sub-diretório web/.
% This document may be copied and/or distributed freely. See the
% _ terms and conditions in the files in the web/ subdirectory.

\documentclass[12pt]{article}
\usepackage[brazil]{babel}\usepackage[latin1]{inputenc}

\title{ {\huge\bf FMA 215} \\ Aula 5: Uso Local do X11 }

\author{Prof. Jorge L. deLyra}

\date{15 de Abril de 2002}

\begin{document}\maketitle

\section{Alguns Conceitos Relevantes}

 Esta aula versa sobre o uso do sistema de janelas X11 como um sistema de
 janelas local em sua máquina, aquela cujo monitor gráfico você está
 utilizando. Ela ignora completamente o fato de que a sua máquina pode
 fazer parte de uma rede, bem como a capacidade do sistema X11 de utilizar
 esta rede. Vamos examinar a forma de operação deste sistema de janelas,
 bem como algumas utilidades do sistema X11 que servem para mudar algumas
 de suas características de acordo com o seu gosto pessoal.

\begin{description}

 \item[Janelas:] janelas são áreas retangulares dentro da área de display
 do seu monitor, dentro de cada uma das quais está rodando algum programa
 ou aplicativo do sistema. O tamanho e posição de cada janela pode ser
 definido durante a criação da janela e modificado posteriormente. As
 janelas podem se sobrepor umas às outras, ficando algumas na frente e
 outras atrás, parcial ou totalmente encobertas pelas janelas que estão à
 sua frente. Em um sistema verdadeiramente multi-tasking como o Linux
 todas as janelas podem estar verdadeiramente ativas, cada uma rodando o
 seu programa ou aplicativo, ao mesmo tempo.

 \item[Window Manager:] o programa de administração de janelas ou ``window
 manager'' é um programa separado, que facilita a sua interação com as
 janelas. Existem muitos destes programas, cada um com as suas próprias
 características e os seus próprios estilos. Em geral eles colocam
 decorações nas janelas, tais como uma barra superior, bordas e cantos,
 através dos quais pode-se manipular a posição e o tamanho das
 janelas. Também é possível iconizar as janelas, que deixam de ser
 mostradas completas e transformam-se em pequenos símbolos gráficos na
 tela, os ícones. Alguns window managers criam na tela algumas janelas
 especiais com funções ligadas à própria administração de janelas, tais
 como uma caixa ou administrador de ícones e uma barra de botões que
 iniciam aplicativos através de ``clicks'' do mouse.

 \item[Mouse, Teclado e Foco:] enquanto o teclado pode ser utilizado para
 introduzir em cada janela o ``input'' do usuário, por exemplo em janelas
 que contenham terminais e editores de texto, o cursor gráfico do sistema
 X11, conhecido como o ``mouse'', serve para manipular janelas, para mudar
 as suas características, bem como para ativar menus e botões que iniciam
 aplicativos. Posto que o mesmo teclado tem de ser utilizado como input
 para várias janelas diferentes, existe o conceito de {\em foco}, que é a
 associação do teclado a uma determinada janela. Esta associação é, em
 geral, feita com o uso do mouse. A janela selecionada para o foco é, em
 geral, marcada com cores diferentes pelo window manager. Observe que as
 outras janelas continuam ativas, mostrando o output dos programas que
 estiverem rodando nelas, o foco controla apenas o sistema de input a
 partir do teclado.

 \item[Configurabilidade:] uma das características básicas, tanto do
 sistema X11 como um todo quanto da maior parte dos gerenciadores de
 janelas, é um alto grau de configurabilidade por parte do usuário. Isto
 permite que cada um customize tanto a aparência quanto a operação do
 sistema de janelas a seu gosto, para seu maior conforto. Se isto é um dos
 grandes pontos positivos do sistema, é também a origem de uma das grandes
 dificuldades que aparecem na época do aprendizado, pois é impossível
 prever como estará configurado um sistema de janelas que o aluno venha a
 utilizar em suas atividades de aprendizado. Nesta aula vamos assumir que
 o sistema de gerenciamento de janelas utilizado seja o {\tt fvwm},
 configurado como o da sala Pró-Aluno. Observe que há duas versões deste
 software, muito parecidas uma com a outra, chamadas {\tt fvwm1} e {\tt
 fvwm2}, sendo o nome {\tt fvwm} atribuído àquela que for o default do
 sistema, em geral o {\tt fvwm2} nos dias de hoje. Enquanto a maior parte
 dos conceitos básicos e modos básicos de operação de todos os sistemas de
 janelas são muito parecidos, muitos dos detalhes podem variar bastante.

\end{description}

\section{Tarefas}

\begin{enumerate}

 \item Entre em sua conta em uma sessão do sistema X11. Nas máquinas da
 sala Pró-Aluno basta fazer um login, colocando o seu username e a sua
 password na bandeira de login do sistema gráfico que está sempre rodando
 nestas máquinas. Caso ela não esteja visível, devido ao fato de que o
 monitor do sistema esteja num dos terminais de console, para ir para o
 sistema X11 basta digitar a combinação de teclas {\tt [Ctrl]-[F7]}.

 \item Quando você entrar será aberta na tela uma janela contendo um
 terminal {\tt xterm} do sistema X11. Dentro desta janela está rodando uma
 {\em shell}, um aplicativo que serve para fazer a interface entre o
 usuário e o sistema. Se esta shell for terminada, por exemplo com os
 comandos {\tt exit} ou {\tt logout}, toda a sua sessão X11 será
 eliminada, incluindo quaisquer outros programas ou aplicativos que
 estiverem rodando dentro de outras janelas. O sistema de janelas será
 reciclado e aparecerá novamente a bandeira de login. Chamamos esta janela
 de {\em janela raiz} ou {\em janela de login} de sua sessão.

 Para evitar o risco de você eliminar acidentalmente a sua sessão, por
 enquanto vamos evitar usar esta janela especial. Esconda esta janela,
 colocando o cursor gráfico controlado pelo mouse em cima do botão
 contendo um pequeno quadradinho, na barra superior da janela. Observe que
 há outro botão com um quadrado maior, cuidado para não confundir os
 botões. Clique uma vez o botão esquerdo do mouse. Você acaba de realizar
 uma operação de {\em iconização} da janela. Ela não deixou de operar, mas
 deixou de estar visível. Dizemos que ela não está mais aberta e sim
 iconizada. Um pequeno símbolo gráfico deve ter aparecido na pequena
 janela da caixa de ícones, indicando que a janela foi iconizada.
 Verifique este fato, esta caixa está em uma janela com uma pilha de
 botões horizontais à sua direita na tela.

 \item Para abrir uma outra janela na qual você poderá executar estas
 tarefas, clique {\em e segure} o botão esquerdo do mouse enquanto o
 cursor gráfico controlado pelo mouse estiver fora das janelas visíveis,
 ou seja, sobre o fundo que aparece no seu monitor. Aparecerá um menu, que
 permanecerá enquanto você segurar apertado o botão do mouse. Basta agora
 arrastar o cursor do mouse até o primeiro ítem deste menu e soltar o
 botão, o que causará a abertura de uma outra janela contendo um terminal
 {\tt xterm}.

 \item Para ver diretamente qual é a ação e portanto para que serve o
 window manager, vamos eliminá-lo momentaneamente. Para matar o processo
 de seu window manager, execute dentro de seu novo terminal a linha de
 comando abaixo:

\noindent
\begin{verbatim}
kill `ps aux | grep -v grep | grep " fvwm" | cut -c 9-14`
\end{verbatim}

\noindent
 Por enquanto não se preocupe em entender como isto funciona, haverá ampla
 oportunidade para isto mais tarde. Apenas preocupe-se em digitar esta
 linha corretamente, {\em exatamente} como ela aparece acima. Observe que
 são usadas aqui aspas duplas e aspas simples {\em reversas}.

 Verifique atentamente o estado de sua tela depois de fazer isto. Tudo que
 desapareceu de vista era parte do sistema de administração de janelas que
 foi eliminado. Para restituir o sistema de administração de janelas basta
 executar dentro de uma das janelas abertas em seu monitor o comando

 {\tt fvwm \&}

\noindent
 Caso por algum motivo isto não funcione, ou caso não tenha o resultado
 esperado, repita o comando que usou para eliminar o sistema de janelas e
 tente em seguida o comando

 {\tt fvwm2 \&}

\noindent
 ou o comando

 {\tt fvwm1 \&}

\noindent
 Repita este par de operações algumas vezes, eliminando e restituindo o
 sistema de administração de janelas, até perceber completamente todos os
 elementos que fazem parte do sistema de administração de janelas. Observe
 que você pode fazer o terminal ``lembrar'' dos comandos anteriores
 apertando sucessivamente a tecla de cursor que tem sobre ela o símbolo da
 seta ``para cima''. Isto evita que você tenha de digitar muitas vezes
 comandos complexos, o que pode levar a erros frequentes.

 \item Com o window manager rodando, examine os três menus que aparecem
 quando você aperta e segura, um de cada vez, os botões do mouse, enquanto
 o cursor gráfico está no ``background'', no fundo do sistema de janelas.
 Já vimos o menu associado ao botão esquerdo, que serve para abrir janelas
 e iniciar aplicativos. Examine ou outros ítens deste menu. Tenha cuidado,
 pois alguns deles servem para eliminar o sistema de administração de
 janelas, como você já fez acima por outros meios.

 O menu associado ao botão do meio permite que você manipule janelas de
 várias formas diferentes. Mais uma vez, cuidado, pois isto inclui a
 operação de se eliminar uma janela. O terceiro menu, associado ao botão
 direito do mouse, contém uma lista de todas as janelas que existem em seu
 sistema de janelas. Ele também pode ser usado para de-iconizar janelas
 que estejam iconizadas, como veremos adiante.

 \item Já vimos acima como usar um dos menus de background para abrir uma
 janela. Talvez você já tenha experimentado abrir outras janelas usando
 alguns dos outros ítens daquele menu. Vamos agora verificar que a
 operação de abertura de uma janela é uma operação de execução de um
 comando, que pode ser realizada na linha de comando, exatamente como é o
 caso para qualquer comando. Para abrir mais uma janela de terminal,
 execute dentro do terminal que já está rodando o comando

 {\tt xterm \&}

\noindent
 A aparência do terminal que aparece talvez não seja exatamente igual à
 dos que você já abriu antes. O comando {\tt xterm} aceita uma grande
 quantidade de opções. Para eliminar este terminal, coloque o foco nele,
 clicando o botão esquerdo do mouse dentro dele e, em seguida, elimine a
 shell que está rodando dentro dele com o comando {\tt exit}. Para obter
 um terminal com outra aparência, experimente com as opções abaixo:

 {\tt xterm -rv -fn 10x20 \&}

\noindent
 Você pode abrir qualquer tipo de janela do sistema X11 desta forma,
 executando os comandos correspondentes. Caso você já tenha aberto outras
 janelas, com aplicativos de outros tipos, estando agora num estado de
 grande dúvida sobre como vai conseguir fechar estas janelas, você tem
 duas alternativas: você pode iconizar todas as janelas e esquecer sobre
 elas, ou você pode consultar a lista de ``Saídas de Emergência'' para
 descobrir como acabar com elas. Divirta-se!

 \item Para movimentar uma janela, a forma mais fácil é clicar e segurar o
 botão esquerdo do mouse com o cursor deste sobre a parte central, entre
 os dois grupos de botões, da barra superior da janela. Isto fará com que
 o mouse ``agarre'' aquela janela e você poderá mudar a posição da janela
 simplesmente movendo o mouse. Experimente fazer isto.

 Para mudar o tamanho de uma janela a forma mais fácil é usar as margens e
 cantos que o window manager coloca nelas. Se você clicar e segurar o
 botão esquerdo do mouse enquanto o cursor deste estiver sobre uma das
 quatro margens da janela, uma encima, uma embaixo e uma de cada lado, o
 mouse vai agarrar aquela margem e você poderá mudar o tamanho da janela
 simplesmente movimentando o mouse. O mesmo tipo de operação executado
 sobre os quatro cantos da margem da janela permite a mudança simultânea
 de duas margens contíguas, uma horizontal e uma vertical. Experimente com
 estas possibilidades.

 \item Já vimos antes como iconizar janelas, usando o botão da barra
 superior que contém um pequeno quadradinho. Outra forma muito prática de
 iconizar e de-iconizar janelas é usar a caixa de ícones, que também
 denominamos de administrador de ícones ou de ``icon manager''. Este
 administrador está dentro de uma pequena janela à direita da tela,
 contendo uma pilha de botões horizontais, um para cada janela que existe
 em seu sistema de janelas.

 Clicando sucessivamente o botão esquerdo do mouse sobre um destes botões
 iconiza-se e deiconiza-se sucessivamente a janela respectiva. O nome da
 janela aparece escrito dentro do botão. Além disso, quando a janela está
 iconizada aparece na parte esquerda de cada botão um pequeno símbolo
 gráfico, que é o ícone ou, melhor dizendo, o mini-ícone da
 janela. Experimente iconizar e de-iconizar algumas janelas.

 Ao realizar o exercício acima é necessário um certo cuidado, pois a
 janela do próprio icon manager pode estar incluída na lista de botões que
 ele contém e, se clicarmos sobre este botão, ele desaparecerá de vista!
 Ainda bem que temos uma outra forma de de-iconizar janelas, ou teríamos
 nos encurralado num beco sem saída. Podemos de-iconizar uma janela usando
 a ``display list'' que aparece no terceiro menu de background, associado
 ao botão direito do mouse. Basta abrir o menu, clicando e segurando o
 botão direito com o mouse no background, em seguida arrastar o mouse para
 cima do botão de uma janela e soltar o botão para de-iconizar a
 janela. Experimente fazer isto também.

 \item Um tipo de operação muito útil é importante é a de copiar e colar
 texto (``cut-and-paste'' ou, mais precisamente, ``copy-and-paste'') com o
 mouse. Isto é muito útil quando se envia mensagens de mail com perguntas
 e solicitações de ajuda. Colocando dentro da mensagem uma cópia daquilo
 que se vê na tela, incluindo o comando que se tentou executar e a
 resposta ou resultado obtido, documenta-se de forma mais precisa a
 situação, facilitando a resposta à pergunta ou a ajuda pelo seus
 correspondentes.

 O funcionamento do mouse depende, é claro, do hardware correspondente
 estar corretamente instalado e configurado no sistema. Ele tam\-bém pode
 depender de configurações que podem ser modificadas pelo usuário. O que
 descrevemos aqui é a a situação típica de um mouse de três botões
 configurado de forma correta e completa. Muitas vezes mouses de apenas
 dois botões podem estar sendo usados dentro do sistema X11 no Linux,
 sendo o terceiro botão (o do meio) simulado através da ação simultânea
 dos dois botões existentes.

 Você pode marcar regiões de texto dentro de janelas da sua tela usando o
 botão {\em esquerdo} do mouse. Basta apertar e segurar o botão esquerdo
 em uma determinada posição dentro da janela e levar o mouse até outra
 posição enquanto mantém o botão apertado. O texto ficará marcado com
 inversão de cores entre o ponto onde você apertou o botão e o ponto onde
 o soltar. Experimente fazer isto dentro de uma das suas janelas.

 \item Você pode agora fazer uma cópia do texto marcado em alguma janela
 que aceite input do teclado. O output do mouse para fazer este ``paste''
 (colagem) sempre irá para aquela janela que tem o foco, ou seja, o input
 do teclado. Tipicamente, o texto será copiado na posição onde se encontra
 o cursor do teclado dentro da janela. Um tipo de janela que aceita este
 tipo de input é um terminal, mas em geral não é uma boa idéia fazer isto
 nele pois a shell que roda dentro dele tentará executar como se fossem
 comandos as strings que forem escritas no prompt, levando aos mais
 variados erros. Imagine se alguma das strings for mesmo um comando, por
 coincidência, que acabar fazendo algo que você não quer!
 
 O melhor é fazer o paste dentro da janela de um editor de texto. Abra uma
 janela dentro da qual rode um editor como o {\tt jed}, o {\tt pico} ou o
 {\tt emacs}, basta executar o comando correspondente dentro de uma janela
 de terminal {\tt xterm}. Agora você pode colar dentro da janela o texto
 que está marcado dando uma única clicada no botão {\tt do meio} do mouse
 enquanto o cursor do mouse está dentro da janela. Se você der vários
 clicks o texto será copiado várias vezes. Dependendo de como funciona o
 seu editor, o texto será colado na posição atual do cursor do teclado ou
 na posição onde estiver o cursor do mouse. Bem, na verdade o texto é
 sempre colado na posição do cursor do teclado, mas alguns aplicativos
 (como o {\tt emacs}) estão programados para primeiro levar este cursor
 até a posição do cursor do mouse quando acontece o click, outros (como o
 pico) não.

 \item Além destas duas operações, o mouse de três botões do X11 permite
 que você faça mais uma, a de completar uma seleção. Para fazer isto,
 comece selecionando qualquer pequeno trecho de texto como já fez antes.
 Depois de soltar o botão esquerdo do mouse, leve o mouse até alguma outra
 posição e dê uma clicada no botão {\tt da direita}. Com isto a seleção
 será completada, ou seja, todo o texto que está entre a parte já
 selecionada e a posição atual do mouse também será selecionado. Você pode
 agora colar este texto em alguma outra janela ou em alguma outra posição
 desta mesma janela, como já fez antes.

 Para sair do editor que você abriu, consulte o documento sobre as saídas
 de emergência para descobrir qual é o comando que faz isto. Um último
 comentário sobre isto: os sistemas Linux podem rodar um aplicativo
 chamado {\tt gpm} que faz com que o mouse funcione também nos consoles ou
 terminais de caracteres que, em geral, estão associados às teclas {\tt
 [F1]} a {\tt [F6]}. Se isto estiver disponível e configurado
 corretamente, os três botões do mouse devem funcionar nos consoles
 exatamente da forma como foi descrito aqui para o sistema X11. É
 inclusive possível fazer copy-and-paste de um console para o outro, o que
 pode ser muito útil em determinadas circunstâncias. Tente brincar um
 pouco com isto também.

 \item O aplicativo {\tt xset} permite que controlemos várias propriedades
 do sistema de janelas que não estão diretamente relacionadas a janelas,
 desde que cada um destes vários tipos de controle seja suportado pelo
 hardware. Por exemplo, podemos controlar com ele a sensibilidade de
 movimentação do cursor gráfico do mouse. Para entender o que isto
 significa execute primeiro, em um terminal qualquer, o comando

 {\tt xset m 1}

\noindent
 para ver como é um mouse bem calmo e lento. Em seguida, deixe o seu mouse
 muito nervosinho com o comando

 {\tt xset m 10}

\noindent
 Você gostará de saber que é possível retornar ao default com o comando

 {\tt xset m default}

\noindent
 Também é possível definir uma sensibilidade dupla, usando a mais lenta
 para pequenas distâncias e definindo uma mais rápida apenas para
 movimentos do mouse maiores do que uma certa quantidade de pixels da
 tela. Experimente, por exemplo, com a alternativa

 {\tt xset m 5 30}

\noindent
 Ela vai usar sensibilidade $1$ para pequenos movimentos do mouse e $6$
 para movimentos rápidos, que cubram rapidamente mais de $30$ pixels.

 \item O {\tt xset} também pode ser usado para controlar o volume, altura
 e duração do ``bell'' ou ``beeper'', o sinal de som que seu computador dá
 como resposta a alguns tipo de input do teclado. Para ouvir o seu beep
 atual, digite a tecla {\tt [BackSpace]} em seu terminal, sem ter digitado
 nada antes. Provavelmente trata-se de um beep a $50$~\% de volume numa
 altura de $400$~Hz durante $0.1$~seg. Para mudar isto para um som mais
 agudo, tente usar o comando

 {\tt xset b 50 1000}

\noindent
 Note que nem todos os sistemas de hardware são capazes de mudar todas as
 três características do beeper. Tente fazer o som ficar mais longo com o
 comando

 {\tt xset b 50 1000 200}

\noindent
 Se alguns dos números estiver muito fora dos limites do hardware, pode
 ser que o seu beeper fique silencioso. Mais uma vez você se aliviará ao
 saber que você pode retornar aos valores default usando {\tt xset b on}.
 Por outro lado, {\tt xset b off} desliga completamente o beeper.

 \item Outra coisa que podemos fazer com o {\tt xset} é controlar o
 ``screen saver'', o software que apaga sua tela depois de um determinado
 tempo de inatividade, para poupar o fósforo da tela de desgaste
 excessivo. Você pode ligar e desligar o screen saver, determinar o tempo
 de inatividade que leva à sua ativação e se a ação será de apagar
 completamente a tela ou mostrar um ``pattern'' que muda de tempos em
 tempos. Para fazer os testes, vamos iniciar colocando um tempo curto para
 a ativação, para que você possa ver logo o que acontece. Para fixar em
 $5$~segundos o tempo máximo de inatividade permitido, use o comando

 {\tt xset s 5}

 Espere os $5$ segundos e veja o screen saver entrar. Se você digitar
 qualquer tecla ou movimentar o mouse, ele deve sair imediatamente. Outra
 forma de ver o resultado é ligar o screen saver antes do tempo com a
 opção ``activate''. Tente fazer isto usando a combinação de comandos

 {\tt sleep 1 ; xset s activate}

\noindent
 Mais uma vez, não se preocupe com o funcionamento desta sequência de
 comandos. Basta saber que o primeiro comando vai dar um tempo de 1
 segundo, para que não haja de fato atividade de teclado quando o segundo
 é executado, senão o screen saver entra e já sai imediatamente!

 Você também pode mudar o comportamento do screen saver usando o comando

 {\tt xset s noblank}

\noindent
 Experimente fazer isto e ativar novamente o screen saver para ver o
 resultado. Você pode voltar para o comportamento mais usual usando

 {\tt xset s blank}

\noindent
 Para voltar para os parâmetros default, use {\tt xset s default}.

 \item Podemos controlar também o comportamento do teclado, ligando e
 desligando o ``keyclick'' e ativando ou desativando a repetição
 automática de teclas que são mantidas apertadas. Podemos ligar a ação de
 ``keyclick'', um click sonoro que é ouvido a cada tecla digitada, usando
 o comando

 {\tt xset c on}

\noindent
 Há a possibilidade de que isto não funcione devido a limitações do
 hardware. Também podemos controlar o volume do click dando como argumento
 uma percentagem de $0$ a $100$, por exemplo

 {\tt xset c 100}

\noindent
 Uma outra coisa que podemos fazer é ligar e desligar a repetição
 automática das teclas. Em geral ela está ligada, aperte e segure a tecla
 de alguma letra e veja-a sendo repetida na tela. Para desligar a
 repetição automática execute

 {\tt xset r off}

\noindent
 Aperte de novo a tecla da letra e verifique que ela não é mais repetida
 automaticamente. Você pode voltar para o comportamento mais usual usando
 {\tt xset r on}.

 \item Outro aspecto do sistema de janelas que também podemos mudar é a
 aparência do fundo, que também é chamado de ``root window'' ou
 simplesmente de ``root''. Podemos mudar a cor do fundo usando, por
 exemplo, o comando

 {\tt xsetroot -solid blue}

\noindent
 Este comando funciona com a maior parte dos nomes comuns das cores na
 língua Inglesa. O padrão default do X11 para o fundo pode ser obtido
 usando-se o comando {\tt xsetroot} sem argumentos. Trata-se de um
 quadriculado cinza que não ofende muito a vista. Outro tipo de cinza
 neutro de fundo pode ser obtido com

 {\tt xsetroot -gray}

\noindent
 sendo que pode-se usar também, equivalentemente, a opção {\tt -grey}.
 Depois de experimentar um pouco com estas alternativas, deixe o
 background em alguma cor que seja visualmente confortável para você.

 \item Além de cores sólidas e patterns, podemos colocar no fundo imagens
 de nossa escolha, usando para isto o comando {\tt xsetbg}. Escolha uma
 das várias imagens que podem ser encontradas no diretório

 {\tt /usr/local/images/linux/}

\noindent
 ou no diretório

 {\tt /usr/local/images/backgrounds/}

\noindent
 das máquinas da sala Pró-Aluno ou, no caso de não os encontrar lá, no
 servidor {\tt socrates.if.usp.br}. Use, para colocar a imagem no fundo do
 sistema de janelas, o comando

 {\tt xsetbg /usr/local/images/linux/<nome-do-arquivo>}

\noindent
 ou

 {\tt xsetbg /usr/local/images/backgrounds/<nome-do-arquivo>}

\noindent
 Se a imagem for menor do que o tamanho da tela, ela será repetida num
 ``pattern'' do tipo ``tiling'' (azulejamento). Para escalar a imagem de
 forma que ela ocupe toda a tela, use o comando

 {\tt xsetbg -fullscreen <path-completo-para-o-arquivo>}

\noindent
 Também é possível usar o comando {\tt xview} para olhar as imagens dentro
 de uma janela, o que pode ser útil para escolher a imagem. Para eliminar
 a janela com a imagem, basta clicar o botão direito do mouse dentro dela.
 Tanto o {\tt xsetbg} quanto o {\tt xview} são casos particulares do
 comando mais geral {\tt xloadimage}. Dê uma olhada nas páginas de manual
 deste comando, com o comando {\tt man xloadimage}, para explorar as
 muitas opções que ele aceita.

 \item Existem muitas cores diferentes definidas no sistema X11. Qualquer
 uma delas pode ser usada para o fundo, bem como para as cores de
 background e de foreground de cada janela, como veremos adiante. Podemos
 listar todas as cores que estão definidas olhando o arquivo do sistema
 onde elas estão definidas, com o comando de paginação {\tt less}:

 {\tt less /usr/lib/X11/rgb.txt}

\noindent
 O paginador {\tt less} permitirá que você vá para cima e para baixo no
 arquivo, usando as teclas {\tt [PageUp]} e {\tt [PageDown]} de seu
 teclado. Em geral os nomes das cores são bem sugestivos, mas também
 podemos olhar todo o conjunto na tela, com pequenos retângulos contendo
 exemplos das cores, usando o comando {\tt xcolors}. Se você tentar isto,
 deverá aparecer uma janela um tanto grande, que pode não caber na sua
 tela. Esteja preparado para descobrir como movimentar a janela usando o
 menu de background associado ao botão do meio do mouse. Outra forma,
 talvez mais conveniente, de se escolher uma cor, é o uso do aplicativo de
 seleção de cores {\tt xcolorsel}. Tente experimentar com as alternativas.

 \item Como veremos adiante, também é possível escolher as fontes, ou
 seja, os tamanhos e formatos, das letras do texto que aparece nas janelas
 de terminais e editores. Para listar todas as fontes que estão definidas
 em seu sistema, use a pipeline de comandos

 {\tt xlsfonts | less}

\noindent
 Não se preocupe com a sintaxe, basta saber que o primeiro comando produz
 uma lista muito comprida, que não vai caber em seu terminal, enquanto o
 segundo comando é um paginador que permite que você vá para cima e para
 baixo nesta lista, usando as teclas {\tt [PageUp]} e {\tt [PageDown]} de
 seu teclado. Os nomes das fontes são frequentemente bem menos sugestivos
 que os das cores, de forma que pode ser muito útil usar o aplicativo de
 seleção de fontes

 {\tt xfontsel}

\noindent
 Tente explorar as possibilidades deste aplicativo. Note que os nomes
 nativos das fontes são muito longos e complexos. Devido a isto estão
 definidos alguns ``alias'' ou sinônimos curtos para aquelas que são
 usadas com mais frequência. Estes aliases aparecem no final da lista
 produzida pelo {\tt xlsfonts}. Já o aplicativo {\tt xfontsel} lida apenas
 com os nomes completos das fontes.

 \item A maior parte dos aplicativos X11 aceita as opções {\tt -bg}, {\tt
 -fg} e {\tt -fn} que permitem que você determine, respectivamente, a cor
 do background, a cor do foreground (ou seja, das letras) e o tamanho e
 formato da fonte para as letras do texto. Você pode usar os aplicativos e
 alternativas das tarefas anteriores para escolher tanto as cores quanto
 as fontes. Como um exemplo meio extremado das possibilidades, você pode
 tentar

 {\tt xterm -bg cyan -fg red -fn 9x15bold}

\noindent
 Isto é muito diferente do padrão que em geral usamos por aqui, que é

 {\tt xterm -bg black -fg white -fn 10x20}

\noindent
 Como as cores default para o background e para o foreground são,
 respectivamente, white e black, podemos obter o mesmo efeito usando a
 opção {\tt -rv} (reverse video), que troca as características default do
 background com as do foreground. Assim, o comando acima é equivalente a

 {\tt xterm -rv -fn 10x20}

\noindent
 Explore um pouco todas estas possibilidades e decida que tipo de arranjo
 prefere usar de forma permanente para seus terminais e editores.

 \item Uma operação que se pode fazer no sistema X11 e que é muito útil
 tanto em terminais quanto em editores é a de se copiar e colar texto com
 o uso do mouse. Para experimentar com isto, vamos usar um editor que tem
 suporte para este tipo de operação: o {\tt emacs}. Digite {\tt emacs} em
 seu terminal e veja uma nova janela ser aberta em seu sistema X11,
 contendo o editor. Escreva algum texto dentro da janela que aparece, mas
 nada que seja importante, pois o conteúdo desta janela não será salvo
 quando você sair do editor.

 Para selecionar uma porção de texto, basta clicar e segurar o botão
 esquerdo do mouse no início do texto e, em seguida, arrastar o cursor do
 mouse até uma nova posição, soltando então o botão. Todo o texto entre a
 posição inicial e a posição final será selecionado e será marcado como
 tal. Levando agora o cursor até uma nova posição e clicando uma única vez
 o botão do meio do mouse, o texto selecionado será colado ou repetido na
 nova posição.

 Uma outra forma de selecionar o texto é a seguinte: clique uma vez o
 botão esquerdo do mouse na posição inicial, leve o mouse até a posição
 final e clique uma vez o seu botão direito. Todo o texto entre as duas
 posições será selecionado. Para colar o texto, o procedimento é o mesmo
 de antes. Experimente algumas vezes com estas possibilidades e, depois
 disto, saia do editor digitando dentro dele as combinações de teclas {\tt
 [Ctrl]-X} seguida da combinação {\tt [Ctrl]-C}. Lembre-se de que o
 conteúdo que você colocou dentro do editor não será salvo. Mais adiante
 teremos oportunidade de conhecer melhor este editor.

 \item Deve existir em sua tela uma outra janela associada ao window
 manager, contendo botões aproximadamente quadrados com pequenos símbolos
 e nomes abreviados de aplicativos. Tente clicar os botões do mouse em
 alguns destes botões. Em alguns casos isto causará o aparecimento de
 novas janelas contendo programas e aplicativos, alguns aqueles com os
 quais você já interagiu nestas tarefas. Explore as possibilidades e
 lembre-se de consultar o documento ``Saídas de Emergência'' para
 descobrir como se livrar de algumas delas. No futuro você aprenderá como
 definir o seu próprio conjunto de botões, contendo os seus programas e
 aplicativos X11 preferidos.

 \item Nesta mesma janela dos botões ou, talvez, numa janela separada,
 deve haver ainda uma outra estrutura de interesse, contendo um conjunto
 de sub-janelas com as proporções aproximadas da sua tela. Trata-se do
 {\em pager} e, de fato, cada uma destas pequenas janelas corresponde a
 uma página do seu desktop. Dentro de pelo menos uma delas devem aparecer
 pequenas janelinhas representando as posições atuais das janelas que
 estão abertas em seu sistema de janelas.

 O gerenciador de janelas {\tt fvwm} suporta o uso simultâneo de várias
 páginas de desktop diferentes. É como se você tivesse não apenas um mas
 vários sistemas de janelas diferentes, todos rodando ao mesmo tempo. Em
 cada um deles você pode ter um conjunto diferente de janelas ativas. Um
 click do mouse sobre uma das janelinhas do pager o levará ao desktop ou,
 como às vezes é chamada, à página de desktop correspondente. Algumas
 janelas como, por exemplo, as do icon manager e do pager, vão acompanhar
 você em seu passeio pelo conjunto das suas páginas e desktops diferentes,
 estando sempre disponíveis.

 Experimente com estas possibilidades e, depois disto, abra de novo aquela
 janela inicial de terminal que você iconizou no início destas tarefas. Dê
 um {\tt exit} ou {\tt logout} neste terminal para terminar a sua sessão
 X11, fechando desta forma, automaticamente, todas as janelas que tiver
 aberto durante esta sua extenuante sessão de tarefas.

\end{enumerate}

\section{Problemas e Dicas}

\begin{enumerate}

 \item Existem outras opções que são aceitas de forma quase universal
 pelos aplicativos X11. Uma das mais úteis é a opção {\tt -geometry}, que
 permite determinar o tamanho e a posição da janela que é criada. Olhando
 as páginas de manual de aplicativos X11, descubra como esta opção
 funciona e use-a para iniciar uma janela do {\tt xcolors} que caiba
 dentro da área de display da sua tela. Experimente usar a mesma opção
 para abrir um {\tt xterm} de tamanho determinado. Observe a mudança no
 significado de alguns dos números que devem aparecer como argumentos
 desta opção.

 \item Existem dois aplicativos X11, chamados {\tt xcutsel} e {\tt
 xclipboard}, que ajudam com as operações de seleção, cut, copy e paste de
 texto, mesmo para aplicativos que não tenham suporte interno para estas
 operações. Descubra como utilizá-los. Como sempre acontece nestas
 situações, uma olhada nas páginas de manual destes comandos pode ser
 muito útil: para isto execute os comandos {\tt man xcutsel} e {\tt man
 xclipboard}.

 \item Existem vários aplicativos que nos permitem mostrar na tela imagens
 em muitos formatos diferentes, além de nos permitir manipular estas
 imagens. Um dos mais simples e úteis é o {\tt xv}, que pode ser usado,
 inclusive, para colocar imagens no background de formas mais criativas.
 É este o aplicativo que utilizamos na sala do Projeto Pró-Aluno para
 colocar na tela a imagem de background da bandeira de login do sistema
 X11. Aprenda a usar este aplicativo e experimente um pouco com as várias
 possibilidades que ele oferece.

 \item O aplicativo {\tt xv} não tem uma página de manual usual, em vez
 disso a extensa documentação referente a ele encontra-se no diretório
 {\tt /usr/doc/xv-doc/}, estando disponível em formato PS e em formato
 HTML. Existem outros aplicativos X11 que permitem que você examine na
 tela documentos nestes formatos. Você pode olhar a documentação do {\tt
 xv} usando o aplicativo {\tt gv} para o formato PS ou o browser {\tt
 netscape} para o formato HTML. Este último você já deve ter usado nas
 aulas anteriores. Basta você colocar na janelinha de endereçamento do
 browser a linha de endereçamento

 {\tt file:/usr/doc/xv-doc/html/index.html}

\noindent
 para ver na tela a documentação.

\end{enumerate}

\section{Uma Lista de Comandos Relevantes}

\begin{description}\setlength{\itemsep}{0ex}

 \item[\tt emacs <arquivo>]: edita o arquivo, ou seja, faz uma cópia dele
 em memória e coloca uma cópia dele na tela, onde você pode examinar e
 modificar o conteúdo; é um poderoso editor de texto, muito grande e um
 pouco lento, mas com capacidades imensas e bem fácil de aprender e usar.

 \item[\tt exit]: termina a sessão, ou seja, a shell; é um comando
 built-in da shell.

 \item[\tt fvwm]: um administrador de janelas (window manager) altamente
 configurável pelo usuário; existem duas versões muito parecidas, chamadas
 {\tt fvwm1} e {\tt fvwm2}, uma mais antiga e outra mais recente, cujos
 arquivos de configuração adotam sintaxes um pouco diferentes, de forma
 que as configurações de uma podem não funcionar muito bem com a outra; em
 geral aquela versão que é o default do sistema se chamará simplesmente
 {\tt fvwm}.

 \item[\tt less <arquivo>]: trata-se de um paginador, que mostra o arquivo
 uma página de cada vez; o tamanho da página é o tamanho vertical do seu
 terminal.

 \item[\tt logout]: termina uma sessão de login, ou seja, uma shell
 inicial, de login; é um comando built-in da shell.

 \item[\tt man <nome-de-comando>]: mostra a página de manual do comando;
 para sair, basta digitar a letra {\tt q} (de ``quit'').

 \item[\tt sleep n]: pausa o processamento por {\tt n} segundos.

 \item[\tt xclipboard]: é um aplicativo X11 que auxilia em operações de
 ``copy'' e ``paste'' de porções de texto.

 \item[\tt xcolors]: é um aplicativo X11 que mostra todas as cores que
 estão definidas no sistemas X11.

 \item[\tt xcolorsel]: é um aplicativo X11 que auxilia na seleção de cores
 entre as que estão definidas no sistemas X11.

 \item[\tt xcutsel]: é um aplicativo X11 que auxilia em operações de
 seleção e ``cut'' de porções de texto.

 \item[\tt xfontsel]: é um aplicativo X11 que auxilia na seleção de fontes
 entre as que estão disponíveis no sistemas X11.

 \item[\tt xloadimage]: mostra uma imagem dentro de uma janela ou no fundo
 da tela do sistema X11.

 \item[\tt xset]: um aplicativo X11 que permite o controle de várias das
 características de operação do hardware associado, tais como o mouse, o
 teclado, o beeper e o monitor.

 \item[\tt xsetbg]: coloca uma imagem no fundo da tela do sistema X11.

 \item[\tt xsetroot]: coloca uma cor sólida ou um pattern no fundo da tela
 do sistema X11.

 \item[\tt xterm {[-e <programa>]}]: é um aplicativo X11 que abre uma
 janela de terminal; em geral uma shell é executada dentro do terminal;
 com a opção {\tt -e <programa>} o programa discriminado é executado em
 lugar da shell.

 \item[\tt xview]: mostra uma imagem dentro de uma janela.

\end{description}

\section{Arquivos de Configuração}

 Como vimos nesta apostila, sistema X11 é um sistema complexo, composto de
 muitos elementos diferentes. O sistema todo é altamente configurável por
 parte do usuário, devido ao fato de que cada um destes elementos é
 individualmente configurável. Existem vários mecanismos diferentes pelos
 quais se pode configurar os aplicativos e sub-sistemas do sistema X11.
 Alguns destes mecanismos são globais, estabelecendo defaults que estarão
 valendo para todas as instâncias de um determinado aplicativo. Outros se
 aplicam apenas a uma determinada janela ou a um aplicativo que é iniciado
 de uma determinada forma.

 Aos poucos você irá aprendendo a configurar os diversos aspectos do
 sistema de janelas, por ora vamos apenas mencionar alguns dos arquivos e
 métodos de configuração mais básicos. Uma das formas de configuração
 consiste do uso de opções ao se executar os comandos, com os quais você
 pode escolher cores, fontes e tamanhos; através da definição de aliases
 da shell registrados de forma permanente nos arquivos de inicialização da
 shell você pode tornar suas escolhas permanentes, automaticamente
 implementadas em todas as suas sessões X11.

 A entrada na sua sessão X11 pode ser controlada através de um arquivos de
 inicialização chamado {\tt .xsession} que deve ser colocado na raiz da
 sua conta. Este arquivo deve ser escrito na forma de um ``script'' de
 shell, pois ele será executado para você pelo sistema toda vez que você
 entrar em uma sessão X11. O arquivo deve ser executável, ou seja, ter as
 autorizações de execução ligadas. Veremos como escrever scripts de shell
 mais adiante, por ora basta dizer que basicamente trata-se de uma lista
 de comandos, um por linha, a serem executados pela shell.

 Através deste sistema você pode controlar que janelas e aplicativos são
 iniciados em sua sessão X11, incluindo sub-sistemas como o administrador
 de janelas. Você também pode ajustar neste arquivo as características do
 teclado, do beeper e do mouse, como fizemos durante esta aula. Como
 trata-de de um arquivo escrito na linguagem de programação de uma shell
 (pode ser qualquer shell), é possível fazer configurações condicionais,
 dependentes por exemplo do nome do sistema no qual se está entrando, ou
 das características do monitor que está sendo usado como terminal.

 Quase todos os aplicativos do sistema X11 podem ter suas configurações
 default modificadas através de entradas com uma sintaxe específica num
 arquivo chamado {\tt .Xresources} na raiz da sua conta. A sintaxe e os
 detalhes relativos a nomes de variáveis e seus significados podem ser
 encontrados nas páginas de manual dos aplicativos, em uma sessão que em
 geral tem o nome de ``resources''. Outro sub-sistema que provê extensa
 configurabilidade é o sistema de administração de janelas {\tt fvwm}. Em
 vez de ser configurado por um único arquivo ele é configurado por uma
 coleção de arquivos que devem ser colocados dentro de um diretório
 chamado {\tt .fvwm/} na raiz da sua conta.

 Se você quiser começar a examinar estas possibilidades e a brincar um
 pouco com as configurações da sua conta, a estratégia certa é achar um
 colega que já tenha um arquivo ou conjunto de arquivos cujo efeito seja
 agradável para o seu gosto pessoal, copiar o arquivo ou os arquivos para
 a sua conta e modificá-los aos poucos na base de tentativa e erro para ir
 verificando o efeito de cada parte e escolhendo o que lhe agrada mais. É
 claro que não custa nada fazer perguntas aos colegas que já têm mais
 experiência com este jogo. Este é um caso em que se aplica a máxima de
 que ``quem tem boca vai ao Linux''.

\end{document}

###

