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.
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 arquivohumor.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-sehumor.html
.
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.
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
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
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.
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.
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
É 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...
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:
/usr/share/keytables/
. Não é necessário descomprimi-los./etc/kbd/default.map.gz
./etc/init.d/keymaps.sh
.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.
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.