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:

- as que já possuem uma tabela de mapeamento unicode, carregada automaticamente pelo programa `setfont`. Estas fontes têm nomes `lat1u-*.psf`;
- as que não possuem tabela de mapeamento. Neste caso é preciso carregar uma com o programa `loadunimap`. Estas têm nomes `lat1-*.psf` (o ``u'' indica Unicode).

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:

- copie os arquivos com os mapas de teclado fornecidos (veja a seção Ficheiros necessários) para o diretório `/usr/share/keytables/`. Não é necessário descomprimi-los;
- copie o mapa correspondente ao seu teclado para o arquivo `/etc/kbd/default.map.gz`.
- rode o script `/etc/init.d/keymaps.sh`.

### 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