Configurando a tecla Capslock como tecla modificadora para uso em atalhos

By on 4 Apr 2023 | 18:20 .

Categories | | |

Tempo de leitura: #

Visualizações: #

Olá, novamente com mais um post rápido, recentemente adquiri um teclado mecânico novo, de tamanho reduzido 67%, layout americano, o quê me deixa levemente frustrado pois além de ter que me acostumar com um layout diferente, eu perdi as funções de Fn que tinha no meu teclado Dell embutido no notebook, onde a tecla Fn fica a esquerda no teclado, a direita da tecla Ctrl, se encontra agora no teclado novo a direita, o que e péssimo pois a utilizava em conjunto com as teclas direcionais, as setinhas, para ter os macros de Home, End, PgUp e PgDown, que me ajudavam a navegar meu código verticalmente bem como para o início e fim da linha.

A solução ideal seria ter um teclado mecânico customizado com firmware QKM, mandando assim os scancodes certos para o computador, e meu teclado não suporta firmware customizado Tester(68), mas por hora resolvi fazer o seguinte, utilizar o Capslock como tecla modificadora e criar bindings para as teclas de navegação.

Fundamentação

Segundo a archwiki, nossos teclados físico enviam scancodes para o computador, o mesmo possuí rotinas de interrupção a nível de kernel que lidam com esses dados de entrada, o kernel então, nesse caso o linux, mapeia esses scancodes para keycodes, que serão então repassados via eventos para os terminais virtuais, tty’s, e display managers, como xorg (ou apenas X), que então mapeiam novamente esse keycodes para keysyms, símbolos que representam caracteres e ações, como o alfabeto, números, modificadores, pontuação, comandos de mídia (controle de volume por exemplo) e mais.

Portanto se quisermos alterar a função do caps lock, para nosso display manager (xorg), devemos utilizar as ferramentas específicas para isto. Há formas de alterar o keycode repassado para os consoles e display managers, mas não será o caso aqui. Também há possibilidade de explorar a criação de um arquivo layout custom para nosso teclado, mas acabei julgando muito complicado e se formos para este lado, que façamos então um teclado com firmware customizado.

Para isso iremos utilizar o comando xmodmap.

Já para depois, fazermos keybinds com o caps lock e as setinhas iremos utilizar um utilitário que executa comandos quando combinações de teclas são aplicadas, para isto iremos utilizar o xbindkeys.

Remover capslock

Para começar vamos remover a função lock da tecla Capslock, para isso, iremos criar o seguinte arquivo:

~/.Xmodmap:

clear lock
clear mod5
keycode 66 = ISO_Level3_Shift
add mod5 = ISO_Level3_Shift

E então adicionar o comando para ser inicializado toda vez usando startx, basta apenas inserir esta linha ao final do arquivo. Se você usa LightDM, GDM ou XDM então esse passo não é necessário.

/etc/X11/xinit/xinitrc:

...
[[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap
...

Bindings

Para fazer as bindings basta escrever o seguinte arquivo:

~/.xbindkeysrc:

"xdotool key Home"
  Mod5 + Left + Release

"xdotool key End"
  Mod5 + Right + Release

"xdotool key Prior"
  Mod5 + Up + Release

"xdotool key Next"
  Mod5 + Down + Release

Onde xdotool é um comando para realizar ações diretamente nos clientes xorg, neste caso, injetar keys, nossas keys de navegação. Nota se também o + Release das bindings, este é necessário, e documentado, pois senão não funciona para os ambiente Gnome e Kde plasma.

E adicionar outro linha para:

/etc/X11/xinit/xinitrc:

...
xbindkeys
...

Conclusão

Funciona relativamente bem, não fica tão responsivo quanto uma binding nativa, acredito ser pelo delay do comando, mas valeu a pena aprender um pouco mais sobre como funciona os esquema de teclado no linux, eu não sabia que o xorg lidava com mapeamento de teclas por exemplo.

Fica também a reflexão que o melhor é usar um teclado comercial certinho, ou então um customizado que possua firmware próprio, assim, temos como fazer teclados que funcionam bem e de forma nativa em, qualquer sistemas operacional.

Referências