Keyboard input (Português)

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

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.

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)