By João Peterson on 1 Aug 2023 | 15:00 .
Categories | Linux | Tutorials | Keyboards
Tempo de leitura: #
Visualizações: #
Se você deseja remapear teclas específicas no linux, ou até criar macros e outras modificações, verá que é um trabalho não muito trivial. Em um post passado mostro como remapear a tecla caps lock para ser usada com a teclas direcionais para criar uma navegação com pgup, pgdown, homme e end, mas acaba que na prática tal técnica acaba nao sendo tão suave quanto deveria ser, e ainda por cima só funciona em ambiente gráfico, não funcionando nas tty’s.
Para resolver essas e outras fui de atrás de uma melhor solução, e encontrei o keyd, um daemon que remapeia e realiza várias funcionalidades com mínima e elegante configuração, e quer funciona tanto nos terminais quanto em ambiente gráfico, pois de fato emula um teclado virtual.
Instalação
Archlinux (aur)
$ yay -S keyd
Colocando rodar
Para colocar rodar basta:
$ sudo systemctl enable --now keyd
Configuração
A man page do keyd é bastante explicativa, portanto para o exemplo a seguir vamos emitir algumas explicações e focar no resultado desejado, então para seu caso de uso recomendo a leitura na íntegra do manual.
Em meu caso de uso, tenho um teclado que quando usado no linux emite teclas multimedia quando deveria emitir as teclas funcionais f1, f2 e etc. Como no teclado há apenas a linha de teclas numéricas, quando eu pressiono fn+1
, ele deveria emitir f1
, mas emite brightnessdown
, que diminuí o brilho da minha tela. Para fazer funcionar, precisei remapear ester eventos para as teclas de função.
Para isso basta criar o seguinte arquivo:
/etc/keyd/gmk67.conf
:
###
# GMK76 remap config file
###
[ids]
# all interface (BT, USB, 2.4Ghz dongle)
k:05ac:024f
[main]
# Maps capslock to escape when pressed and control when held.
# capslock = overload(control, esc)
# Remaps the escape key to capslock
#esc = capslock
brightnessdown = f1
brightnessup = f2
scale = f3
dashboard = f4
kbdillumdown = f5
kbdillumup = f6
previoussong = f7
playpause = f8
nextsong = f9
mute = f10
volumedown = f11
volumeup = f12
# activates nav while held, but a tap is a normal capslock
capslock = overload(nav, capslock)
[nav]
up = pageup
down = pagedown
left = home
right = end
[meta]
mute = playpause
volumedown = volumedown
volumeup = volumeup
Onde pode se ver que as ações de multimedia foram remapeadas para as teclas de função correspondentes.
Para descobrir os códigos de cada ação multimedia, eu executei o seguinte comando para monitorar o teclado e verificar estas:
$ sudo keyd monitor
Por fim, para ativar a configuração, basta salvar o arquivo e realizar o seguinte comando:
$ sudo keyd reload
Nota se ainda no arquivo de config as opções de navegação que eu desejo, home, end e pgup e down nas teclas direcionais, isso é feito a partir do mecanismo de layers do keyd. Cada layer no keyd é uma separação lógica de teclas que são remapeadas somente dada a condição, a layer main é onde tudo acontece mas podem definidas layers separadas, que podem ser ativadas por comandos, como o pressionar de um modificador, como ctrl, shift e etc. A tecla capslock é remapeada para o action de overload, que permite que quando capslock seja apenas tocada, execute a função de capslock normal, mas quando segurada, ativa a layer nav, layer que remapeia as teclas direcionais para as desejadas.
Utilização com GMK67
Para o teclado GMk67 em específico, eu fiz algumas alterações para que o controlador de volume funcionasse. A config pode ser encontrada nesse gist: Using GMK67 keyboard in linux. Mas aqui está a config do keyd:
[ids]
*
[main]
# Maps capslock to escape when pressed and control when held.
# capslock = overload(control, esc)
# Remaps the escape key to capslock
#esc = capslock
brightnessdown = f1
brightnessup = f2
scale = f3
dashboard = f4
kbdillumdown = f5
kbdillumup = f6
previoussong = f7
playpause = f8
nextsong = f9
mute = f10
volumedown = f11
volumeup = f12
# activates nav while held, but a tap is a normal capslock
capslock = overload(nav, capslock)
[nav]
up = pageup
down = pagedown
left = home
right = end
[meta]
mute = playpause
volumedown = volumedown
volumeup = volumeup
Conclusão
keyd é com certeza um dos melhores sistemas de remapeamento, emula um teclado virtual, funciona tanto em terminal quando ambiente gráfico, configuração simples e várias funcionalidades, que aqui não foram exploradas. Melhor do que isso provavelmente só montando um teclado customizado e utilizando um firmware como QMK para se ter mais controle ainda.
Definitivamente leia o manual, um dos melhores software linux, é até chato ver que este não está presente em repositórios oficiais nas distribuições.