Página seguinte Página anterior Índice

3. Configuração do console (modo texto)

O documento de referência sobre a configuração do console do Linux é o Keyboard and Console HOWTO, de Andries Brouwer, que pode ser encontrado nos repositórios do LDP. Conforme lá descrito, a configuração da fonte de caracteres e mapa de teclado é feita usando o pacote KBD, encontrado em todas as distribuições de Linux.

3.1 Mapas de teclado

Cada tecla do PC possui um código numérico. Ao pressionarmos uma delas o processador controlador do teclado envia ao computador esse código de varredura, também conhecido como scancode, junto com um sinal de que a tecla foi pressionada ou solta. As seqüências de eventos são então processadas pelo driver de teclado e armazenadas em uma fila de caracteres que é lida pelas aplicações por meio da chamada de funções do sistema operativo.

Um mapa de teclado é um arquivo de texto que estabelace as correspondências entre o scancode de tecla e o caracter (ou seqüência de caracteres) a gerar quando ela for pressionada, chamado keycode. Por exemplo:

# atribuição da tecla '-' do teclado numérico à tecla com código 74
keycode  74 = KP_Subtract     

# atribuição da tecla '4' do teclado numérico à tecla com código 75
keycode  75 = KP_4            

# etc...

keycode  76 = KP_5            # tecla 5
keycode  77 = KP_6            # tecla 6
keycode  78 = KP_Add          # soma
keycode  79 = KP_1            # tecla 1
keycode  80 = KP_2            # tecla 2

Além das teclas alfabéticas, numéricas e de símbolos, existem outras chamadas modificadoras que permitem gerar códigos que não correspondem a nenhum sinal gráfico: Shift Control Alt e Meta. Esta última normalmente não é encontrada em teclados de PCs, apenas em estações de trabalho de fabricantes como Sun, SGI, HP e Digital (eles não gostam de ser chamados de ``DEC''). O editor de texto Emacs usa muito a tecla Meta.

O arquivo de mapa permite também especificar teclas especiais chamadas ``teclas mortas'' (deadkeys). Quando pressionadas elas não resultam no aparecimento de um caracter na tela, limitando-se a alterar o comportamento da tecla pressionada a seguir para que, por exemplo, ao se digitar um ~ seguida de um a, seja gerado um `ã'.

Ao contrário do que possa imaginar algum leitor incauto, deadkeys não são aquelas usadas para escrever ghostscripts! Vale a pena ler, no entanto o arquivo humor.txt que faz parte do pacote Ghostscript e, dependendo da distribuição pode estar no diretório /usr/lib/ghostscript/doc ou /usr/doc/ghostscript. Nas versões mais recentes do Aladdin Ghostscript os documentos estão em formato html e o arquivo chama-se humor.html.

3.2 Mapas de tradução de tela

Um mapa de tradução de tela permite especificar qual o caracter X a ser exibido na tela, quando um programa deseja exibir um caracter Y. Desta forma, poderíamos fazer com que ao escrever o caracter com o código do c-cedilhado na tela, fosse na realidade exibido um outro caracter de código diferente mas cuja imagem na nossa fonte de caracteres correspondesse à imagem de um c-cedilhado.

Este mapeamento é necessário apenas quando queremos usar uma fonte cujos caracteres não possuem códigos diretamente correspondentes aos do conjunto usado no mapa de teclado.

3.3 Comandos do pacote KBD

Loadkeys

Permite carregar um mapa de teclado. Por exemplo, o comando a seguir carrega o mapa armazenado no arquivo portugal.map.

   loadkeys /usr/lib/kbd/keytables/portugal.map
   
Setfont

Permite o carregamento de uma fonte de caracteres de tela, possibilitando a alteração das fontes utilizadas em modo de texto. O comando a seguir, por exemplo, irá carregar uma fonte com o conjunto Latin-1:

   setfont lat1u-16.psf
   
Showfont

mostra todos os caracteres existentes na fonte que está atualmente em uso no console.

O X também tem um comanto chamado showfont, que serve para mostrar as características de uma determinada fonte, mas não os caracteres em si. Para esta última finalidade se usa o comando xfd. Se o programa showfont do pacote KBD for invocado em um emulador de terminal X, como xterm, ele gerará um erro ``GIO_SCRNMAP: Invalid argument'', mas não provocará nenhum dano.

Mapscr

Permite carregar um mapa de tradução de tela. Suponhamos que exista o arquivo /etc/portugal.trad. Se executarmos o comando

   mapscrn /etc/portugal.trad
   
então a partir deste momento as traduções lá definidas serão usadas.

3.4 Ativação do modo Unicode

Nota: a configuração descrita nesta seção não é obrigatória quando se carrega uma fonte contendo definições de caracteres no padrão Unicode, pois o programa setfont carrega automaticamente a tabela de mapeamento adequada.

Para colocar o console no modo Unicode permitindo o uso dos acentos e caracteres semigráficos, pode ser usado o comando

echo -n -e '\033(B'

A ativação do modo Unicode deve ser feita para cada terminal virtual, mas é muito mais fácil criar um arquivo /etc/issue que contenha as seqüências de configuração. Isso pode ser feito usando este pequeno script:

#!/bin/sh
ESC=`echo -n -e '\033'`
echo "${ESC}(B${ESC}[H${ESC}[J${ESC}[37m${ESC}[44m${ESC}[K" > /etc/issue
echo "      Welcome to \n (\s \m \r) \l${ESC}[K" >> /etc/issue
echo "      \d \t (\U)${ESC}[K" >> /etc/issue
echo "${ESC}[K${ESC}[37m${ESC}[40m" >> /etc/issue
echo >> /etc/issue
Esse arquivo contém seqüências de escape para o agetty, que é usado nas distribuições Slackware e Debian. Ele faz apresentar no topo da tela um quadro colorido com várias informações úteis. No meu computador, por exemplo, aparece a seguinte mensagem em letras brancas sobre um fundo azul:

      Welcome to doncarlo (Linux i586 2.0.33) tty5
      Fri Jul 17  1998 03:12:37 (4 users)
Outras distribuições usam programas diferentes para ativar o login do usuário, o que pode obrigar a fazer alterações. Se algum dos leitores tiver um arquivo adequado para outros *getty (mingetty, getty-ps, mgetty, etc.) por favor envie-me uma cópia para que seja incluida aqui.

Na Slackware é importante também editar o arquivo /etc/rc.d/rc.S e comentar as linhas com os comandos que geram um novo /etc/issue cada vez que o o sistema é iniciado.

Uma alternativa ao método anterior é colocar no início do /etc/rc.d/rc.S a seguinte seqüência de comandos:

# Inicializacao das consolas
#

# activacao do modo de mapeamento Latin-1
#
for tty in /dev/tty[1-9]*
do
        echo -n -e "\\033(B" > $tty
done

3.5 Carregamento de uma fonte de caracteres

É preciso carregar uma fonte que tenha os caractres latinos acentuados no padrão ISO 8859-1 e também os símbolos semigráficos. Isso pode ser feito com o comando

setfont lat1u-16.psf
As versões mais antigas do pacote KBD mantinham essas fontes no diretório /usr/lib/kbd/consolefonts, que foi trocado depois da versão 0.92 por /usr/share/consolefonts. Dependendo da sua distribuição e do quanto ela esteja atualizada o diretório poderá ser um ou outro.

Para automatizar o processo de carga da fonte na Slackware foi criado o script /etc/rc.d/rc.font, contendo o seguinte:

#!/bin/sh
#
# /etc/rc.d/rc.font
#
# Seleciona uma das fontes de caracteres disponiveis em
# /usr/lib/kbd/consolefonts.
#
setfont lat1u-16.psf

Na distribuição Debian , edite o arquivo /etc/kbd/config e coloque uma linha contendo

CONSOLE_FONT=lat1u-16.psf
esse arquivo é processado pelo script /etc/rc.boot/kbd. Execute-o para ativar a nova fonte sem ter que dar ``reboot''. Lembre-se sempre: Linux não é Windows!

Na distribuição Red Hat, edite o arquivo /etc/sysconfig/consolefont e coloque

FONT=lat1u-16.psf

Experimente algumas teclas como ``,.|!"#$%&/()=?'', etc...

3.6 Carregando um mapa de teclado

A seguir é necessário carregar o mapa de teclado adequado. Até a versão 0.92 do pacote KBD esses mapas ficavam no diretório /usr/lib/kbd/keytables passando mais tarde para /usr/share/keytables. Dependendo da distribuição você terá um diretório ou outro. Os mapas para diversos tipos de teclados são apresentados mais adiante.

Para automatizar o processo de configuração do teclado na Slackware foi criado o script /etc/rc.d/rc.keyboard, contendo o seguinte:

#!/bin/sh
#
# /etc/rc.d/rc.keyboard
#
# Seleciona um dos mapas de teclado disponíveis no diretório
# /usr/lib/kbd/keytables
#
loadkeys abnt2
e acrescentei as seguintes linhas ao /etc/rc.d/rc.S, imediatamente antes do tratamento do /etc/rc.d/rc.keyboard:
# Carrega uma fonte de caracteres se existe um script rc.font.
if [ -x /etc/rc.d/rc.font ]; then
  /etc/rc.d/rc.font start
fi

# Carrega um mapa de teclado se sexiste um script rc.keyboard.
if [ -x /etc/rc.d/rc.keyboard ]; then
  /etc/rc.d/rc.keyboard start
fi

Na distribuição Debian, instale pacote kbd e depois faça o seguinte:

Na distribuição Red Hat, edite o arquivo /etc/sysconfig/keyboard e coloque o nome do mapa a usar na variável KEYTABLE, como por exemplo

KEYTABLE="/usr/lib/kbd/keytables/abnt-2.map"

Experimente pressionar a tecla c-cedilhado (se o teclado não tem esta tecla, digite 'c). Se aparecer caracter estranho verifique se carregou o mapa de teclado e a fonte de caracteres corretos, pois provavelmente uma dessas operações foi mal sucedida.

3.7 Verificando erros

Mas, e se alguns dos caracteres continuarem a não aparecer? Bem, antes de mais nada verifique se a fonte e o mapa de teclado adequados foram carregados. Um caso especial é quando queremos usar uma fonte que não segue a codificação ISO Latin-1 (é o caso da fonte padrão do console do PC). Teríamos então de convencer a tela a mostrar os caracteres certos em cada caso.

Poderíamos recorrer ao comando mapscrn. O arquivo com a tabela de tradução teria no entanto de ser criado por nós, seguindo um processo moroso de tentativa e erro até encontrar o caracter cuja imagem desejávamos. Ou, de uma forma mais fácil, poderíamos usar o comando showfont.

Se usarmos a fonte de caracteres correta, o uso deste último comando será desnecessário. É até recomendável que não se use tal recurso, pois embora ele permita criar uma tabela de caracteres ``personalizada'' em um computador, será difícil que um documento acentuado produzido nessa máquina possa ser lido em outra que não tenha a mesma configuração.


Página seguinte Página anterior Índice