Jump to content
From ArchWiki

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Reason: Uses italics or templates in section headings. (Discuss in Talk:Keyboard input (Português))

Related articles

- Extra keyboard keys
- Input remap utilities
- Linux console (Português)/Keyboard configuration (Português)
- Keyboard shortcuts (Português)

Para modificar o mapeamento de teclas, é essencial saber como uma tecla pressionada resulta em um símbolo:

1. O teclado envia um scancode ao computador.
2. O kernel Linux mapeia o scancode para um código-chave, veja Mapear scancodes a códigos-chave (Inglês).
3. O leiaute de teclado mapeia o código-chave para um símbolo ou para um keysym, dependendo de quais teclas modificadoras (Inglês) forem pressionadas.
   - Para o console Linux, veja Linux console
   - Para Xorg e Wayland, veja Configuração Xorg/Teclado (Inglês)

A maioria de suas teclas já deve ter um código-chave, ou pelo menos um scancode. Teclas sem um scancode não são reconhecidas pelo kernel; como exemplo, teclas adicionais de teclados e mouses específicos para jogos.

No Xorg, alguns keysyms (por exemplo, `XF86AudioPlay`, `XF86AudioRaiseVolume`) podem ser ser mapeados para ações — lançar uma aplicação externa, i.e. Veja Keyboard shortcuts (Português)#Xorg para maiores detalhes.

No console Linux, alguns keysyms (e.g. `F1` to `F246`) podem ser mapeados para certas ações, como, por exemplo, alternar para um console diferente ou imprimir alguma sequência de caracteres na tela. Veja Linux console (Português)/Keyboard configuration (Português)#Criando um mapa de teclado personalizado para maiores detalhes.

## Identificando scancodes

### Usando `showkey`

A maneira tradicional de se captar um scancode é por meio do utilitário showkey(1). `showkey` espera uma tecla ser pressionada ou, alternativamente, cancela a execução automaticamente caso nenhuma tecla seja pressionada em 10 segundos. Para que `showkey` funcione corretamente, há a necessidade de se estar em um console virtual (Inglês) e não em um ambiente gráfico ou logado por meio de uma conexão de rede. Dito isso, execute o seguinte comando:

    # showkey --scancodes

e tente pressionar teclas no teclado; você deve ver scancodes sendo impressos no output.

### Usando `evtest`

Para teclados USB, aparentemente é necessário usar o comando evtest(1) contido no pacote evtest em vez do comando showkey [1], vejamos:

    # evtest /dev/input/event12

    ...
    Event: time 1434666536.001123, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70053
    Event: time 1434666536.001123, type 1 (EV_KEY), code 69 (KEY_NUMLOCK), value 0
    Event: time 1434666536.001123, -------------- EV_SYN ------------

Dica: Caso não saiba qual número de evento tem o dispositivo de seu interesse, você pode executar `evtest` sem parâmetros e ele irá mostrar uma lista de dispositivos com seus respectivos números de evento e, com essa informação, você pode indicar o número necessário como parâmetro.

Use o campo "value" de `MSC_SCAN`. Esse exemplo demonstra que `Numlock` possui scancode 70053 e código-chave 69.

### Usando `dmesg`

Nota: Esse método apenas identifica teclas desconhecidas.

Você pode capturar o scancode de uma tecla ao pressionar a tecla desejada e observar a saída de `dmesg`. Por exemplo, se resultar em:

    Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0

então o scancode necessário é `0xa0`.

## Identificando códigos-chave

Os códigos-chave do Linux são definidos em `/usr/include/linux/input-event-codes.h` (veja as variáveis `KEY_`)

### Identificando códigos-chave no console

Similarmente ao método de captação de scancode, os código-chaves para console virtual (Inglês) são indicados pelo utilitário showkey(1). `showkey` espera uma tecla ser pressionada ou, alternativamente, cancela a execução automaticamente caso nenhuma tecla seja pressionada em 10 segundos. Tal qual [[Mapeamento de Teclas (Português)#Usando `showkey`]], também há a necessidade de se estar num console virtual e não em um ambiente gráfico. Dito isso, execute o seguinte comando:

    # showkey --keycodes

e tente pressionar teclas no teclado; você deve ver scancodes sendo impressos no output.

### Identificando códigos-chave no Xorg

This article or section needs expansion.

Reason: xev também reporta keysyms. Mencione que você precisa focar a janela "Event Tester". (Discuss in Talk:Keyboard input (Português))

Os códigos-chave utilizados pelo Xorg são reportados pelo utilitário xev(1), incluído no pacote xorg-xev. Dito isso, para executar `xev`, há a necessidade de se estar em um ambiente gráfico e não no console virtual.

Com o seguinte comando você pode iniciar `xev` e demonstrar apenas as partes relevantes:

    $ xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'

Aqui seria um exemplo de saída:

    38  a
    55  v
    54  c
    50  Shift_L
    133 Super_L
    135 Menu

Xbindkeys (Inglês) é outro wrapper para `xev` que reporta códigos-chave.

Se, ao pressionar uma tecla e nada aparecer no terminal, significa que ou a tecla pressionada não possui um scancode, o scancode não está mapeado a um código-chave, ou que algum outro processo está capturando o pressionar da tecla. Se você suspeita que um processo escutando o servidor X está capturando o pressionar da tela, você pode tentar executar `xev` em uma sessão X limpa:

    $ xinit /usr/bin/xterm -- :1

## Configuração de teclados compatíveis com VIA

VIA (Inglês) é um programa para remapear teclas diretamente em teclados compatíveis. Se o seu dispositivo for um desses, para que o teclado seja detectado pelo navegador e possibilite a configuração online, será necessário uma regra udev (Inglês) customizada, alterando a permissão dos dispositivos acessados por meio do driver hidraw.

Nota: Esse método pode implicar em risco à segurança do sistema.

Escreva esse texto em `/etc/udev/rules.d/99-viia.rules` em seu editor de texto de preferência:

    KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl"

E, finalmente, para que surja efeito com a mudança, é necessário recarregar udev com o seguinte comando:

    # udevadm control --reload

## Ver também

- kbd-project - Website oficial do utilitário `showkeys` (Inglês)
- wev - Visualizador de eventos para Wayland, similar ao `xev` para Xorg (Inglês)
- interception-tools - conjunto de utilitários para controlar e customizar o comportamento de entrada dos mapeamentos de tecla (Inglês)
- kmonad - um daemon de remapeamento e revinculação avançada de teclas (Inglês)
- Hawck - outro daemon revinculador de teclas (Inglês)
- keyd - daemon simplista de revinculação de teclas (Inglês)
- Vial - programa independente para configuração de teclados com suporte a VIA (Inglês)

Category:

- Input (Português)

Hidden categories:

- Pages or sections flagged with Template:Style
- Pages or sections flagged with Template:Expansion