Keyboard input (Português)

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:
O teclado envia um
scancode
ao computador.
O kernel Linux mapeia o scancode para um
código-chave
, veja
Mapear scancodes a códigos-chave (Inglês)
.
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)