Next Previous Contents

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 `ã'.

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.

Loadunimap

Carrega um mapa de tradução de Unicode para a fonte de tela. O mapa padrão, chamado ``def.uni'' considera que estamos usando a fonte normal do IBM-PC. Este comando não é necessário quando usamos uma fonte com caracteres definidos no padrão Unicode, pois o programa setfont carrega automaticamente a tabela de mapeamento adequada. O comando a seguir carregará o mapa de tradução para as fontes latin-1:

    loadunimap lat1

3.4 Carregamento de uma fonte de caracteres

O pacote KBD contém dois tipos de fontes com codificação latin-1:

Nas versões mais novas do KBD os arquivos são comprimidos com gzip. É preciso carregar uma fonte que tenha os caractres latinos acentuados no padrão ISO 8859-1 e também os símbolos semigráficos. As fontes de nome iso01.* não possuem esses símbolos. A fonte mais recomendada é a 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.

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

    # O comando a seguir é totalmente desnecessário
    # com a fonte lat1u-16.psf.
    # loadunimap lat1u

    # Remova o comentário da linha abaixo se estiver usando uma fonte sem
    # tabela de mapeamento de Unicode para tela:
    # loadunimap lat1

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!

Red Hat

Edite o arquivo /etc/sysconfig/i18n e veja se contém o seguinte:

    LANG=pt_BR
    LINGUAS=pt_BR
    LC_CTYPE=ISO-8859-1
    LC_ALL=pt_BR
    SYSFONT=lat1u-16
    SYSTERM=linux-lat

Conectiva Red Hat Linux

Se você selecionar a língua correta durante a instalação não há nada mais a fazer. A configuração é feita extatamente como do Red Hat.

S.u.S.E.

Edite o arquivo /etc/rc.config e procure uma linha que começa com ``FONT='' (linha 64, em minha máquina com S.u.S.E. verão 5.6) e coloque

    FONT=lat1u-16.psf

Edite os scripts boot.setup e single contidos no diretório /etc/rc.d. Procure a linha contendo o comando /usr/bin/loadunimap e remova-a ou ponha no seu início um ``#'' para deixá-la como comentário. Veja comentários sobre este comando na seção  Carregamento de uma fonte de caracteres.

Testando a fonte

Experimente algumas teclas como ``,.|!"#$%&/()=?'', etc. e use o comando showfont para mostrar a fonte em uso.

3.5 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.

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 existe um script rc.keyboard.
    if [ -x /etc/rc.d/rc.keyboard ]; then
      /etc/rc.d/rc.keyboard start
    fi

Debian.

Certifique-se de ter instalado o pacote kbd e depois faça o seguinte:

Red Hat.

Certifique-se de ter instalado o pacote kbd. Copie os arquivos com os mapas de teclado fornecidos (veja a seção Ficheiros necessários) para o diretório /usr/lib/kbd/keytables/ (ou /usr/lib/kbd/keymaps/i386/qwerty/, a pertir do Red Hat 5.2). Não é necessário descomprimi-los.

Edite o arquivo /etc/sysconfig/keyboard e coloque o nome do mapa a usar na variável KEYTABLE, como por exemplo

    KEYTABLE="abnt2"

Conectiva Red Hat Linux.

O CRHL já vem com os mapas de teclado para Português. Se você selecionou o teclado correto durante a instalação, não há mais nada a fazer. Caso contrário, edite o arquivo /etc/sysconfig/keyboard e coloque

    KEYTABLE="nome"
Onde ``nome'' é br-abnt2, pt ou us-acentos caso o desenho do seu teclado seja ABNT-2, português ou americano.

S.u.S.E..

Certifique-se de ter instalado o pacote kbd. Copie os arquivos com os mapas de teclado fornecidos (veja a seção Ficheiros necessários) para o diretório /usr/lib/kbd/keytables/. Não é necessário descomprimi-los.

Descomprima o mapa de teclado adequado, copiando para o arquivo /etc/default.keytab, usando por exemplo um comando como

    zcat /usr/lib/kbd/keytables/pt.map.gz > /etc/default.keytab

Testando o teclado

Experimente pressionar a tecla c-cedilhado (se o teclado não tem esta tecla, digite 'c). Verifique se todas as letras acentuadas, maiúsculas e minúsculas são geradas corretamente e aparecem na tela. Se aparecer algum caracter estranho verifique se carregou o mapa de teclado e a fonte de caracteres corretos, pois provavelmente uma dessas operações foi mal sucedida.

Se ao invés de c-cedilha minúsculo aparecer um maiúsculo é provável que uma tabela de mapeamento Unicode incorreta esteja a ser carregada. Este problema ocorrerá na distribuição S.u.S.E. se não se fizerem as alterações nos scripts do sistema mencionadas anteriormente.

3.6 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.


Next Previous Contents