O sistema X Window é um ambiente de trabalho gráfico disponível para o NetBSD e para muitos outros sistemas Unix (e não Unix). Com efeito, o X é mais que um simples ambiente gráfico. Graças ao uso do protocolo X, o sistema X Window é "network transparent" (transparente à rede) e é capaz de executar aplicações distribuídas (cliente-servidor). Isto significa, a uma primeira aproximação, que é possível lançar um programa em um host "client" e visualizar-lhe o output gráfico em um outro host "server" de modo totalmente transparente (transparente significa, nesse caso, que não é necessário modificar a aplicação para obter este resultado). O sistema X Window é produto do "X Consortium" e a edição corrente é a X11R6. A versão do X usada pelo NetBSD é a XFree86, uma implementação open source livremente redistribuível do sistema X Window.
Quando começamos a usar o X encontramos alguns termos cujo significado pode parecer inicialmente obscuro. Os elementos de base do X são:
Hardware de vídeo suportado pelo XFree86.
Um servidor X interfaciando-se com o hardware. O servidor X fornece um modo padrão para abrir janelas, efetuar operações gráficas (por exemplo, utilizar fontes para a visualização do texto) e para ler o input do mouse, do teclado ou de outros periféricos. X é transparente à rede e, portanto, é possível acionar cliente X em uma máquina e o servidor de X correspondente (isto é, o monitor com o hardware de vídeo) em outra.
Um window manager (gerenciador de janelas) que utiliza o servidor X. O window manager é basicamente um tipo especial de cliente X a que é permitido manipular o posicionamento e o aspecto das janelas. Pode-se "decorar" as janelas com "widgets" padrões, que geralmente permitem deslocar, redimensionar, reduzir a ícone, etc., as janelas. Um gerenciador de janelas pode ser dotado também de outras funcionalidades (fechar as janelas, encerrar os programas, mostrar o menu dos programas, etc.) ou de efeitos especiais (sombreamento, decorações, etc.) e assim por diante.
Um desktop manager ou gerenciador das telas de trabalho (opcional). KDE e GNOME são dois exemplos de desktop managers. Trata-se de conjuntos de programas (suites) mais ou menos integrados e coordenados, projetados para fornecer ao usuário um conjunto de aplicações de base dotadas de uma interface comum. O gerenciador da área de trabalho (desktop manager) pode permitir o acesso ao sistema de arquivos utilizando a metáfora do desktop (mesa de trabalho), pode dispor de um browser de navegação no help, terminais que substituem o clássico xterm, aplicativos de gerenciamento de áudio, ambiente de desenvolvimento, editor e assim por diante.
Todos os outros aplicativos (clientes X de terceiros) instalados no sistema. Estes "falam" com o servidor X e com o gerenciador de janelas (geralmente o desktop manager não está envolvido de modo particular naquilo que os aplicativos executam).
Recapitulando, para que se possa utilizar o ambiente gráfico é necessário:
o sistema XFree86;
um gerenciador de janelas (o XFree86 já dispõe de um gerenciador de janelas simples chamado twm. Não é muito sofisticado mas muitos o acham mais que suficiente);
quem prefere um ambiente mais estruturado deverá instalar também um desktop manager, embora isso não seja uma necessidade absoluta. Os desktop managers oferecem características que podem facilitar a aproximação ao sistema de usuários provenientes de outros ambientes, como os Macintosh ou uma das tantas versões do MS-Windows.
Nota: aqui já deveria estar claro que os desktops como GNOME e KDE têm seu próprio window manager, embora também possam usar um externo compatível.
Normalmente se utiliza apenas um window manager por vez em cada servidor X (mas é possível ativar mais de um servidor X em um mesmo computador).
Se você não escolheu uma configuração mínima para a instalação do NetBSD, ao fim da instalação o X, na sua encarnação do XFree86, já está presente no sistema e pronto para funcionar, contanto que se crie o arquivo de configuração, o temido /etc/XF86Config. Para se ter uma idéia do aspecto deste arquivo pode-se dar uma olhada em /usr/X11R6/lib/X11/XF86Config.eg. A estrutura do arquivo de configuração está descrita formalmente em XF86Config(4/5), que pode ser examinado com:
# man XF86Config
Antes de configurar o sistema é aconselhável uma atenta leitura da documentação do XFree86 em /usr/X11R6/lib/X11/doc: há arquivos README específicos para as placas de vídeo e para o mouse, e também um README.NetBSD. Aconselho começar com a leitura do QuickStart.doc. O tempo dedicado à leitura destas informações não é de modo algum desperdiçado. O conhecimento da própria configuração e de como utilizá-la com o X é de grande importância para se aproveitar da melhor maneira o próprio hardware.
O arquivo /etc/XF86Config pode ser escrito manualmente com qualquer editor ou usufruindo de algum programa que o crie automaticamente, partindo da configuração especificada pelo usuário. Os programas mais conhecidos são xf86config e XF86Setup. O primeiro funciona em modo texto e já vem instalado no X. O segundo é um programa gráfico que pode ser encontrado na coleção de pacotes.
Ambos os aplicativos requerem ao usuário especificar a configuração do próprio sistema e, em particular:
o tipo de mouse e o device driver a utilizar
o tipo de teclado e o seu layout
o tipo de placa de vídeo
o tipo de monitor
Antes de escrever o arquivo de configuração, à mão ou com um dos dois programas já mencionados, é necessário que se obtenha estas informações.
No que diz respeito ao mouse, é necessário verificar se ele é do tipo serial ou PS/2 e se estamos usando o dispositivo wsmouse, que exige um protocolo diferente. Para o mouse serial é preciso escolher o protocolo correto e especificar a porta serial. Por exemplo, para um mouse na primeira porta serial:
Section "Pointer" Protocol "Microsoft" Device "/dev/tty00" EndSection
Para um mouse no dispositivo wsmouse:
Section "Pointer" Protocol "wsmouse" Device "/dev/wsmouse0" EndSection
No campo "Device" também se pode especificar /dev/mouse, contanto que se crie o symbolic link apropriado no sistema. Por exemplo:
# ln -sf /dev/wsmouse0 /dev/mouse
Mesmo que você já tenha configurado o teclado para o wscons, para poder usar o X é necessário efetuar uma configuração do teclado específica para esse ambiente. Isso, em todo caso, não tem nada de complexo.
Na falta de contraindicações convém utilizar o protocolo XKB, selecionando o tipo de teclado e a sua disposição.
A configuração do teclado é um dos pontos fracos de todos os programas de configuração automática. Geralmente convém deixar definida a configuração original para o inglês americano e depois retocar manualmente o arquivo de configuração gerado pelo programa. Por exemplo:
# XkbDisable # XkbKeymap "xfree86(us)" XkbModel "pc102" XkbLayout "it" XkbVariant "nodeadkeys"
Substituindo pc105 por pc102 no XkbModel podem ser utilizados até mesmo os símbolos dos teclados Windows.
É fundamental especificar corretamente os valores da freqüência horizontal e vertical do monitor. Uma definição correta protege o monitor de configurações incompatíveis da placa de vídeo, evitando que seja danificado. No diretório da documentação está presente um arquivo com as especificações de um grande número de monitores.
A placa de vídeo pode ser escolhida no banco de dados dos programas de configuração. Uma vez escolhida a placa, o próprio programa cuida das configurações restantes.
Uma vez escolhida a placa é preciso definir o servidor a ser utilizado. Os programas de configuração normalmente são capazes de escolher o servidor adequado com base na placa gráfica selecionada. Algumas placas, entretanto, são suportadas por mais de um servidor. Nesse caso é preciso decidir com base na documentação. Servidores diferentes têm geralmente características e níveis de suporte para as placas de vídeo. Um exemplo típico é a placa S3 Virge que é suportada tanto pelo servidor SVGA quanto pelo servidor S3V.
Ao se finalizar, o programa de configuração cria o arquivo /etc/XF86Config, que pode ser examinado e modificado a mão.
Antes de executar o X convém:
verificar se o link simbólico /usr/X11R6/bin/X aponta para o servidor certo:
# ls -l /usr/X11R6/bin/X
Para assegurar que tudo corra bem executar:
# X -probeonly
verificando atentamente o output.
Neste ponto pode-se executar o X com o comando:
# startx
Se o X não se inicializa, será preciso compreender o motivo observando as mensagens sobre a tela e corrigindo o arquivo de configuração.
Se o X inicializa-se mas alguma coisa não funciona (por exemplo, o mouse), pode-se sair do X com a combinação de teclas Ctrl+Alt+Backspace (não disponível para todas as versões de hardware). Se tudo vai bem, entretanto, adentramos o ambiente X com o gerenciador de janelas nativo que é o twm. Trata-se de um window manager simples mas eficaz, tanto que muita gente não sente a necessidade de procurar outros e continuam a usá-lo. Naturalmente, é possível instalar um outro window manager, assim como personalizar a aparência do twm. Por exemplo, tente dar o seguinte comando em um xterm:
# xsetroot -solid DarkSeaGreen
Há vários maneiras de personalizar a configuração (isto é, o aspecto das janelas) do X já na inicialização. Uma das mais simples é criar um arquivo .xinitrc no próprio diretório raiz, copiando o arquivo pré-configurado do sistema e o modificando.
# cp /usr/X11R6/lib/X11/xinit/xinitrc ~/.xinitrc # vi .xinitrc
Eis um exemplo de modificação que inicializa o gerenciador de janelas, mostra um relógio em baixo à direita e abre dois terminais gráficos (xterms). Além do mais, define uma cor para o fundo.
a primeira parte é igual ... # start some nice programs twm & xclock -geometry 50x50-1-1 & xterm -geometry 80x34-1+1 -bg OldLace & xsetroot -solid Bisque4 & exec xterm -geometry 80x44+0+0 -bg AntiqueWhite -name login
Com esse tipo de configuração, para sair do X é necessário que o último xterm (aquele com o nome de "login") seja fechado.
Além das preferências pessoais quanto à disposição das janelas e das cores, parece-me evidente que somente com estas pequenas modificações o ambiente de trabalho torna-se mais agradável.
Para melhorar ainda mais o aspecto do desktop podem ser instalados alguns programas utilitários da coleção de pacotes, entre os quais:
mostra todas as cores definidas em rgb.txt.
permite utilizar um pixmap como fundo do X.
protetor de tela para o X.
nenhum desktop pode dizer-se completo sem este programa que mostra o bitmap do demônio que simboliza os *BSD, selecionável em duas grandezas. A imagem pode ser deslocada à vontade.
Quem não se contenta com o twm pode instalar um outro gerenciador de janelas entre os muitos disponíveis na coleção de pacotes. Entre os mais populares estão: fvwm2, olwm/olvwm (Open Look Window Manager), WindowMaker, Enlightenment e AfterStep.
A seguir vejamos, a título de exemplo, a instalação do WindowMaker. Para adicionar o programa utilizemos o pacote pré-compilado windowmaker-0.61.tgz, que depende de uma série de pacotes que devem ser instalados. Como sempre, seja o pkg_add seja o make install administrarão automaticamente todas as dependências e, portanto, na realidade não é necessário individuá-los e instalá-los manualmente.
# cd /usr/pkgsrc/x11/windowmaker # make depends-list xpm-3.4k jpeg-6b pkglibtool-1.2p2 giflib-3.0 libproplist-0.9.1 tiff-3.5.2
Nota: as dependências poderiam ser vistas também com:
# pkg_info -f windowmaker-0.61.0.tgz | grep depends
Depois de ter instalado os pacotes exigidos acrescentemos o WindowMaker e, já que estamos nisso, também alguns temas:
# pkg_add windowmaker-0.61.0.tgz wmthemes-0.6x.tgz
O WindowMaker agora está instalado e para inicializá-lo basta modificar o .xinitrc e/ou o .xsession, substituindo a chamada ao window manager anterior (twm) com a chamada ao comando wmaker. Por exemplo:
# start some nice programs # start WindowMaker wmaker & xclock -geometry 50x50-1-1 & xdaemon2 -geometry +0-70 & ...Nesse exemplo também o programa xdaemon, que "personaliza" o desktop, é executado automaticamente.
Antes de inicializar o WindowMaker, é necessário executar o programa de configuração:
$ wmaker.inst $ startx
A título de exemplo sobre como são personalizados os recursos dos programas X, vejamos como mudar as fontes de caracteres (fonts) pré-instaladas no XTerm.
Para personalizar os recursos utilizados por um programa, no nosso caso o XTerm, pode-se agir em nível global, modificando-se o arquivo /usr/X11R6/lib/app-defaults/Xterm. É preferível, entretanto, modificar o arquivo ${HOME}/.Xresources, até porque, fazendo assim, a configuração não se perde no caso de uma atualização do X ou do sistema operacional.
Uma vez tomada essa decisão, é preciso escolher uma nova fonte de caracteres usando os programas xfontsel e xlsfonts. Também é bom consultar o arquivo que define os codinomes (aliases) das fontes de caracteres, que é o /usr/X11R6/lib/X11/fonts/misc/font.alias. Por exemplo, descobre-se que o tipo pré-instalado de fonte de caracteres "fixed" é na realidade o codinome de "-misc-fixed-medium-r-semicondensed-13-120-75-c-60-iso8859-1". Mesmo as fontes de caracteres como, por exemplo, "9x15" são na realidade codinomes.
Uma vez escolhida a fonte de caracteres, antes de a instalar no .Xresources, pode-se testá-la com um comando similar ao seguinte:
$ xterm -fn '-bitstream-courier-medium-r-normal-*-15-*-*-*-*-*-*-*'Uma vez encontrado o tipo desejado de fonte de caracteres, que vamos supor seja "9x15", o inserimos no arquivo .Xdefaults com uma linha do seguinte tipo:
XTerm.VT100.font: 9x15Para tornar imediatamente efetiva a mudança, executa-se o comando:
$ xrdb -merge ~/.XresourcesNa próxima reinicialização do NetBSD não será mais necessário executar o comando precedente porque o arquivo .xinitrc comumente realiza automaticamente a fusão (merge) do .Xresources com o funcionamento do X.
Nota: note-se que
XTerm.VT100.font: 9x15é diferente deXTerm*font: 9x15No segundo caso o caracter "*" age como caracter curinga (wildcard) e, portanto, a diretriz tem efeito sobre todas as fontes de caracteres (por exemplo, também sobre aquelas dos menus). A escolha de uma das duas formas depende, portanto, do efeito que se quer obter.
Examinando a página do manual do XTerm (como também da maior parte dos programas do X) encontram-se indicações sobre os recursos que são passíveis de personalização.
Quase todos os programas X (aqueles escritos com os assim chamados "X Toolkit Intrinsics"), aceitam algumas opções comuns da linha de comando, tais como:
-display display
-geometry geometry
-bg color, -fg color
-fn font
-xrm resourcestring
Quando se utiliza sempre o X para trabalhar, pode ser mais agradável inicializá-lo diretamente com a inicialização do computador e ter um login gráfico. Nada mais simples:
Criar o arquivo .xsession no próprio diretório home. Este arquivo faz as vezes do ~/.xinitrc e pode ser também simplesmente um link para esse último.
Modificar o /etc/rc.conf desse modo:
xdm=YES xdm_flags="" # x11 display managerAlternativamente pode-se acrescentar a seguinte linha no fim do /etc/rc.local:
/usr/X11R6/bin/xdmEste método pode ser utilizado para inicializar, por exemplo, o kdm ou o gdm no lugar do xdm.
Os arquivos de configuração do xdm encontram-se em /usr/X11R6/lib/X11/xdm. Em Xservers o X é inicializado no terminal virtual vt05. Se se quer inicializá-lo em um outro terminal esse é o momento certo para vermos isso. Para um bom funcionamento do xdm, a fim de se evitar que dois processos entrem em conflito pelo teclado, convém inicializar o xdm em um terminal virtual em que o getty não está ativo. Na prática se no Xservers temos:
:0 local /usr/X11R6/bin/X :0 vt04
no /etc/ttys é oportuno ter:
ttyE3 "/usr/libexec/getty Pc" vt220 off secure
(note-se que vt04 corresponde a ttyE3, porque a numeração dos vt começa em 1, enquanto que a dos ttyE começa em 0).
Para tornar a tela de login do xdm um pouco menos "miserável", basta intervir no arquivo de configuração do xdm. Por exemplo, pode-se mudar a cor do fundo adicionando ao arquivo Xsetup_0 a seguinte linha:
xsetroot -solid SeaGreen
Ou, no lugar da cor, como fundo pode-se por uma imagem, usando xpmroot. Por exemplo:
xpmroot /path_to_xpm/netbsd.xpm
Jogando com os arquivos de configuração, podem-se obter muitos efeitos agradáveis.