Remapeando teclas no linux usando keyd + config GMK67

By on 1 Aug 2023 | 15:00 .

Categories | | |

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.

Referências