Next Previous Contents

5. Configura��o do X

Quando o servidor X est� ativo, ele coloca o teclado do computador em um modo de opera��o chamado raw (cru), em oposi��o ao modo normal, chamado cooked (isto mesmo: cozido). No modo raw o sistema operativo n�o processa seq��ncias acento-letra. O servidor X � uma daquelas raras aplica��es que, por dever de of�cio, tem que tratar o teclado ``em baixo n�vel''.

O X vem equipado com um utilit�rio destinado � configura��o do teclado, chamado xmodmap, que cumpre uma fun��o correspondente � do comando loadkeys, ou seja, l� um arquivo de mapa de teclado do X, expecificando as equival�ncias entre os keycodes e respectivos keysymbols.

Eis um excerto deste arquivo:

    keycode 47 = ccedilla Ccedilla dead_acute dead_doubleacute
    keycode 48 = masculine ordfeminine dead_circumflex dead_caron
    keycode 49 = backslash bar notsign
    keycode 50 = Shift_L
    keycode 51 = dead_tilde dead_circumflex dead_grave dead_breve
Observem que, ao contr�rio do loadkeys, o xmodmap n�o possui um diret�rio padr�o onde o arquivo � procurado.

A configura��o do X n�o interfere de forma alguma com a configura��o do modo de texto. De facto, � poss�vel ter o seu X bem configurado, e no entanto n�o ter realizado qualquer tipo de configura��o ao modo de texto, e vice-versa. Outro ponto importante de se observar � que os c�digos num�ricos das teclas no X n�o correspondem aos do console. A tecla Backspace, por exemplo, tem o n�mero 14 no console, e 22 no X (em um computador do tipo IBM-PC).

As vers�es 3.2 e posteriores do XFree86 permitam definir dead-keys, mas o seu tratamento � responsabilidade da aplica��o, conforme visto na se��o  Modo texto versus Sistema de Janelas X. H� modos de contornar esta limita��o e tornar o tratamento de dead-keys transparente �s aplica��es, conforme mostrado na se��o Contornando os limites do X.

Dividimos a configura��o em duas partes: Uma que deve ser feita antes do login do usu�rio e outra depois.

5.1 Configura��o do xinit

Junto com este documento s�o fornecidos v�rios mapas de teclado para uso no X. Para automatizar o processo de configura��o do teclado basta copiar o arquivo adequado para o diret�rio /usr/X11R6/lib/X11/xinit, onde normalmente ficam os arquivos de in�cio da se��o de trabalho no X. Na distribui��o Slackware esse diret�rio � um link simb�lico para /var/X11R6/lib/xinit e na Debian e na Red Hat para /etc/X11/xinit.

Nas distribui��es Slackware e Red Hat, verifique se no referido diret�rio existe um arquivo chamado .Xmodmap. Se existir, copie o Xmodmap.<alguma-coisa> para ele, ou fa�a um link. Normalmente o arquivo de configura��o xinitrc possui os comandos para carreg�-lo automaticamente. Veja o seguinte trecho:

    #!/bin/sh
    # $XConsortium: xinitrc.cpp,v 1.4 91/08/22 11:41:34 rws Exp $

    userresources=$HOME/.Xresources
    usermodmap=$HOME/.Xmodmap
    sysresources=/usr/X11R6/lib/X11/xinit/.Xresources
    sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap

    # merge in defaults and keymaps

    if [ -f $sysresources ]; then
        xrdb -merge $sysresources
    fi

    if [ -f $sysmodmap ]; then
        xmodmap $sysmodmap
    fi

Na distribui��o Debian o mapa de teclado padr�o do X � /etc/X11/Xmodmap, basta copiar o mapa desejado para aquele arquivo. Ele ser� carregado pelo xinitrc, que por sua vez � um link simb�lico para /etc/X11/Xsession, sempre que iniciar a se��o de trabalho do usu�rio.

5.2 Configura��o do XDM

Existe ainda um pequeno problema: no meu computador, por exemplo, o sistema carrega diretamente o X ao dar boot e o login � feito pelo X Display Manager (xdm). Como o xdm faz o login antes de iniciar a se��o de trabalho, o mapa de teclado n�o ser� carregado, o que pode criar problemas se o usu�rio usa caracteres como ``['' ou ``]'' em sua senha, pois nos teclados ABNT-2 e portugu�s esses s�mbolos s�o gerados por teclas cujos c�digos num�ricos n�o s�o os mesmos do teclado americano.

� preciso fazer uma pequena altera��o no arquivo de configura��o Xsetup_0. Esse arquivo deve estar no diret�rio /usr/X11R6/lib/X11/xdm, que na Slackware � um link simb�lico para /var/X11R6/lib/xdm e /etc/X11/xdm na Debian e -- sujeito a confirma��o -- RedHat. Eis o conte�do completo desse arquivo:

    #!/bin/sh
    #
    # /usr/X11R6/lib/X11/xdm/Xsetup_0
    #

    sysresources=/usr/X11R6/lib/X11/xinit/.Xresources
    sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap

    # merge in defaults and keymaps

    if [ -r $sysresources ]; then
        xrdb -merge $sysresources
    fi

    if [ -r $sysmodmap ]; then
        xmodmap $sysmodmap
    fi

    xconsole -geometry 480x130-0-0 -daemon -notify -verbose -exitOnFail

A distribui��o Debian tem um Xsetup_0 um pouco diferente, em /etc/X11/xdm/Xsetup_0, mas basta acrescentar-lhe o seguinte:

    sysmodmap=/etc/X11/Xmodmap
    sysresources=/etc/X11/Xresources

    if [ -f $sysresources ]; then
      xrdb -merge $sysresources
    fi

    if [ -f $sysmodmap ]; then
      xmodmap $sysmodmap
    fi

Se no seu computador o login do usu�rio tamb�m for feito sempre via xdm, n�o � necess�rio mexer no xinitrc, como mostrado na se��o anterior, j� que o mapa de teclado ser� carregado antes do in�cio na se��o do usu�rio.

5.3 Compose

Uma das coisas mais importantes a definir quando vamos utilizar acentua��o por meio de dead-keys � o conjunto de regras de composi��o. Essas regras determinam, por exemplo que a composi��o do caracter ' com a letra e gerar� um .

Ao contr�rio do console, no qual podemos definir as regras de composi��o no pr�prio mapa de teclado, no X essas regras s�o colocadas no arquivo /usr/X11R6/lib/X11/locale/???/Compose, onde ??? � a codifica��o em uso (no nosso caso, iso8859-1).

Para facilitar o uso dos mapas para teclados que n�o t�m o c-cedilhado, como o US+ (veja adiante) � conveniente definirmos uma nova regra de composi��o, permitindo que o seja gerado pela seq��ncia 'C. Se n�o fizermos isso, seremos obrigados a digitar <dead_cedilla-C>, sedo o dead_cedilla produzido pela combina��o AltGR-=, o que n�o � nada confort�vel. Al�m disso, no teclado americano somos obrigados a usar as aspas duplas para gerar o trema.

O arquivo Compose fornecido foi feito procurando imitar ao m�ximo o comportamento do console e possui as seguintes facilidades para gera��o de caracteres:

Para incluirmos as novas regras, basta aplicar uma altera��o � defini��o original. O arquivo Compose.patch pode ser obtido via WWW na p�gina do Portuguese HOWTO. Para aplicar a atualiza��o, copie-o para o diret�rio /usr/X11R6/lib/X11/locale/iso8859-1/, fa�a uma c�pia de reserva do Compose original e invoque o utilit�rio patch:

    cp -p Compose Compose.backup
    patch < Compose.patch

Caso voc� prefira n�o aplicar o ``patch'', um arquivo Compose pronto tamb�m � fornecido. Lembre-se de fazer c�pia do original antes de substitu�-lo!

5.4 Locale

Para os usu�rios brasileiros, pode haver mais uma altera��o a fazer no X. Conforme vimos na se��o  Biblioteca libc, uma vari�vel de ambiente (LANG ou LC_ALL) configura o suporte internacional existente na biblioteca de fun��es padr�o do sistema (libc). A biblioteca de fun��es do X (Xlib) usa a vari�vel LANG para identificar a l�ngua em uso mas at� a revis�o 6.3, na qual � baseado o XFree86, n�o era inclu�da a combina��o ``pt_BR'', correspondente a Portugu�s/Brasil. Como resultado, cada vez que executarmos um aplicativo X com LC_ALL definido como ``pt_BR'' ele emitir� a mensagem ``Warning: locale not supported by Xlib, locale set to C''.

Para incluir o local pt_BR no X11R6.3 basta alterar tr�s arquivos existentes no diret�rio /usr/X11R6/lib/X11/locale. Pegue o arquivo Xlocale.patch via WWW na p�gina do Portuguese HOWTO. Para aplicar a atualiza��o, copie-o para o diret�rio /usr/X11R6/lib/X11/locale, fa�a uma c�pia de reserva dos arquivos a serem alterados e invoque o utilit�rio patch:

    cp -p compose.dir compose.dir.backup
    cp -p locale.alias locale.alias.backup
    cp -p locale.dir locale.dir.backup
    patch < Xlocale.patch

Caso voc� prefira n�o aplicar o ``patch'', arquivos prontos tamb�m s�o fornecidos. Lembre-se de fazer c�pias dos originais antes de substitu�-los!

Em setembro de 1998 o fix-2 da revis�o 6.4 do X Window System incluiu oficialmente o suporte ao local pt_BR. Infelizmente neste mesmo fix-2 foi introduzida uma falha em uma das fun��es de tratamento de input contexts da Xlib que provoca viola��es de acesso � mem�ria. Uma das aplica��es afetadas � o processador de textos LyX. Uma corre��o provavelmente ser� inclu�da no fix-4. O X11R6.4 dever� ser a base para a vers�o 4 do XFree86.

5.5 Gera��o de mapas com o XKeyCaps

O programa XKeyCaps, criado por Jamie Zawinski � uma interface gr�fica para o xmodmap, que mostra na tela o desenho de um teclado e permite modificar interativamente os s�mbolos gerados por cada tecla e gerar automaticamente o arquivo .Xmodmap correspondente.

Ele pode ser obtido via WWW em http://www.jwz.org/xkeycaps/ e, a partir da vers�o 2.43, j� incoropra tamb�m suporte para o desenho brasileiro (ABNT2), uma contribui��o de Andre Gerhard.

5.6 Contornando os limites do X

Conforme foi explicado na se��o Modo texto versus Sistema de Janelas X, o tratamento de acentos deve ser feito pela aplica��o, mas ainda h� muitos programas que n�o levam isto em considera��o, tais como Netscape Navigator/Communicator e Nedit. Como n�o � poss�vel modificar muitos deles, � preciso encontrar outro tipo de solu��o.

Altera��o da biblioteca Xlib

Linux, assim como a maioria dos sistemas operacionais modernos, usa um sistema de v�nculo de programas a bibliotecas de fun��es chamado ``liga��o din�mica'' (dynamic binding). Deste modo, podemos modificar o comportamento de um programa alterando uma dessas bibliotecas. Maiores informa��es sobre este tema pode ser obtida nos manuais do Linux com os comandos

    man ld.so
    man ldconfig
    man ldd
    man dlopen
Thomas Quinot criou uma altera��o para a biblioteca de fun��es do X (Xlib) introduzindo o tratamento de acentos na fun��o XLookupString, Tudo que se tem a fazer � substituir o arquivo contendo esta biblioteca por outro, que pode ser obtido via internet no endere�o

http://web.fdn.fr/~tquinot/dead-keys.en.html

Existem duas vers�es do arquivo, uma para sistemas onde as bibliotecas do X suportam o uso seguro de threads (Debian 2.x, Red Hat 5.x, etc.) e outra para os sistemas que n�o possuem tal atributo (Slackware, Caldera 1.x). Se voc� n�o sabe o que s�o threads n�o se preocupe com isso, mas saiba que eles permitem criar um programa capaz de se dividir em sub-processos que rodam concorrentemente em um computador. Para analisar sua Xlib rode o seguinte comando:

nm --dynamic /usr/X11R6/lib/libXext.so.6|grep _Xglobal_lock

Se aparecer ``U _Xglobal_lock'' seu sistema suporta threads e o arquivo a obter � libX11-XF3.3.1-TS.tar.gz. Se n�o aparecer, seu sistema n�o suporta threads e o arquivo a obter � libX11-XF3.3.1.tar.gz. Tendo obtido o arquivo, copie-o para um diret�rio tempor�rio e extraia seu conte�do. Mova o arquivo /usr/X11R6/libX11.so.6.1 para outro diret�rio, para preserv�-lo. N�o � suficiente renome�-lo! Remova-o para um diret�rio cujo nome n�o esteja contido no arquivo /etc/ld.so.conf. Depois, mova o novo arquivo para o lugar do antigo e rode o programa ldconfig (isto deve ser feito pelo usu�rio root):

    cp libX11-XF3.3.1-TS.tar.gz /tmp
    cd /tmp
    tar xzf libX11-XF3.3.1-TS.tar.gz
    mkdir /usr/X11R6/oldlib
    mv /usr/X11R6/lib/libX11.so.6.1 /usr/X11R6/oldlib
    mv libX11.so.6.1 /usr/X11R6/lib
    chown root:root /usr/X11R6/lib/libX11.so.6.1
    chmod 755 /usr/X11R6/lib/libX11.so.6.1
    /sbin/ldconfig

� aconselh�vel que a opera��o seja realizada quando nenhuma aplica��o X estiver rodando. A seguir, edite o arquivo de configura��o do servidor X, chamado XF86Config. Este arquivo fica no diret�rio /etc (Slackware) ou /etc/X11 (Debian, Red Hat). Procure a se��o ``Keyboard'' e inclua a op��o ``XkbDisable'', conforme mostrado a seguir:

    Section "Keyboard"
       Protocol        "Standard"
       XkbDisable
    EndSection

A op��o XkbDisable inabilita a extens�o XKEYBOARD do servidor X, o que neste caso serve para sinalizar � fun��o XLookupString que ela deve tratar os acentos. Se quisermos voltar ao comportamento normal, basta retirar a op��o do XF86Config.

Configure o mapa de teclado do X conforme explicado nas se��es anteriores deste documento. Para testar o resultado, rode o programa xedit e digite alguns caracteres acentuados.

Altera��o no kernel do Linux

Esta se��o � baseada em contribui��o enviada por Bruno Barberi Gnecco e na documenta��o do diacrd. Podem haver ainda alguns erros e se algu�m os detectar, por favor avise-me.

Seguindo a regra geral do mundo *nix, existe sempre mais de um modo se resolver o mesmo problema. Conforme vimos anteriormente, existem dois modos de opera��o do teclado, chamados raw e cooked. Estes modos de opera��o podem ser mudados com o programa kbd_mode, integrante do pacote kbd, o que n�o � recomend�vel fazer a n�o ser para restaurar o estado do console ap�s um desastre com o servidor X, por exemplo. No modo raw o kernel n�o processa os diacr�ticos (acentos).

Cedric Adjih criou uma altera��o para o kernel que permitia tratar os acentos mesmo em modo raw, inicialmente voltada para o teclado de desenho franc�s. En�as Queiroz, Andr� D. Balsa e Claudemir Todo Bom fizeram melhorias e o adaptaram para os teclados internacional, portugu�s e ABNT. O tratemanto de acentos � feito parte pelo kernel, parte por um processo que roda em retaguarda (daemon) chamado diacrd, conforme descrito a seguir:

O diacrd pode ser obtido via FTP an�nimo no endere�o

ftp://metalab.unc.edu/pub/Linux/system/keyboards
H� vers�es diferentes, de acordo com o tipo de teclado e, pelo menos por enquanto, n�o se pode reconfigur�-lo sem recompilar. Para fazer a instala��o, de acordo com o arquivo ``README'', deve-se fazer o seguinte (pelo usu�rio root):

Se a gera��o de acentos funcionar, � preciso tornar permanentes as altera��es necess�rias. Pode-se faz�-lo incluindo a carga do diacrd no arquivo /etc/rc.d/rc.local (Slackware).

Se algum dos leitores tiver criado um script de ativa��o do diacrd para a distribui��o Debian ou Red Hat, por favor envie-o para que seja inclu�do aqui.
Mais informa��es sobre o diacrd podem ser encontradas no ``Dead keys Mini-HOWTO'' de Claudemir Todo Bom, dispon�vel em http://linux.unicamp.br/docs/diversos/deadkeys.html.

Compara��o entre as duas solu��es

Em termos de resultados pr�ticos, a Xlib modificada e o diacrd s�o equivalentes. H� por�m algumas diferen�as entre as duas solu��es que merecem aten��o.

Diacrd exige uma altera��o no kernel do Linux para resolver um problema que o kernel j� resolve, o que n�o deixa de parecer um tanto redundante. A depend�ncia de um processo de usu�rio (o daemon kerneld) � uma desvantagem, pois se esse programa deixar de funcionar perde-se o suporte � acentua��o no X. Trata-se de uma solu��o ainda em desenvolvimento e, segundo o conte�do da documenta��o que o acompanha, o ideal seria que todo o tratamento fosse feito pelo kernel, sem depender de outro programa.

At� o momento da publica��o deste HOWTO, o diacrd ainda n�o era compat�vel com a vers�o 2.2 do kernel do Linux.

A solu��o via Xlib �, pelo menos em teoria, totalmente transparente �s aplica��es e permite reconfigura��o em tempo de execu��o, bastando alterar o mapa de teclado do X e as regras de composi��o. J� o diacrd precisa ser recompilado se quisermos trocar o tipo de teclado, mas � poss�vel que novas vers�es incorporem algum recurso de reconfigura��o.

O diacrd s� funciona no teclado do pr�prio computador. Se quisermos usar um display remoto, seja um terminal X, seja um outro computador, n�o teremos suporte � acentua��o. A troca da Xlib, por outro lado, enquadra-se plenamente na filosofia do X de que o servidor prov� mecanismo, deixando a cargo da aplica��o a defini��o de pol�ticas. Exemplo da vantagem deste paradigma � poder usar as t�cnicas descritas na se��o Configura��o do X em outros sistemas operativos e com terminais X.

A solu��o via Xlib parece-me mais ``limpa'' e � minha predileta, mas, como sempre, fica a crit�rio do usu�rio ou do administrador do sistema qual alternativa escolher. De qualquer modo, sempre � bom lembrar qua ambas as solu��es s�o remendos. Considerando-se a r�pida evolu��o que est� a ocorrer no campo do software livre, com o desenvolvimendo de ambientes de trabalho como KDE, GNOME e GNUStep, podemos supor que em breve nenhum desses remendos ser� mais necess�rio.


Next Previous Contents