CapsLock multifunções sem X

3

Eu gostaria de remapear CapsLock para Esc quando pressionado por ele mesmo e Ctrl quando pressionado com outra tecla sem usar X .

Isso é semelhante a uma pergunta anterior ( Remapar CapsLock para Escape and Control System Wide ), mas estou procurando especificamente uma solução sem X.

    
por Casey Robinson 20.07.2013 / 06:09

2 respostas

3

Este programa keymod lê os eventos de teclado de um dispositivo /dev/input/eventX e injeta mais diretamente de volta no kernel usando o /dev/uinput dispositivo. O comportamento caps lock é especial: se a tecla for pressionada e liberada sem tocar em outra tecla, uma chave Esc é enviada para o kernel. Se outra tecla for pressionada enquanto segura o caps lock , a tecla de controle (esquerda) é emulada.

Como o programa assume o controle do dispositivo de evento especificado, poder acessar o computador usando, por exemplo, O SSH pode ser muito útil ao testar isso. Por exemplo, pausar este programa (usando ctrl-z por exemplo) irá garantir que você não possa mais usar seu teclado (ele assumiu o controle dele exclusivamente e agora não está mais ativo).

    
por 30.01.2014 / 17:52
3

Keymaps do console do Linux

Para mudar os mapas de teclado dos terminais virtuais ( alt + f1 - alt + f6 ) loadkeys. Isso só afeta os logons do terminal virtual e o não altera o keymaping em aplicativos de terminal X ou X como Xterm ou urxvt .

O comando loadkeys precisa ser executado como root ou você receberá o seguinte erro:
Couldn't get a file descriptor referring to the console

Para trocar escape e caps_lock você faria o seguinte:

# echo keycode 58 = Escape | loadkeys -
# echo keycode 1 = Caps_Lock | loadkeys -

Outra opção é remapear o Caps_Lock para mudar + Scroll Lock

# echo keycode 69 = Num_Lock  Caps_Lock | loadkeys -

O formato dos mapas de teclado pode ser um pouco confuso. É usando um sistema de ponderação dependendo de quais modificadores são pressionados. (Ctrl, Alt, Shift, etc). Como um exemplo da página do manual para mapas de teclado.

keycode 30 = a    A    VoidSymbol    VoidSymbol   VoidSymbol  .....

Quando o shift e a é pressionado, fazemos a ação na segunda coluna porque shift tem uma ponderação de 1. control por outro lado, tem uma ponderação de quatro .

Isso pode causar problemas ao mapear modificadores. Tome por exemplo se uma primeira e única coluna de códigos de teclas é control como sua ação. Agora a ponderação desde que você pressionou agora é 4 e quando você soltar a tecla, o controle não é mostrado liberado porque a ação da quinta coluna agora deve ser executada, mas não possui nenhuma ação definida. Então a tecla control nunca é liberada.

É por isso que a maioria dos modificadores não tem nenhuma outra ação atribuída. Se apenas uma ação for definida no mapeamento do teclado, ela será aplicada a todas as ações.

Eu brinquei tentando contornar isso, mas só obtive resultados inconsistentes. Às vezes, o modificador é lançado, às vezes não.

Esclarecimento

Alterar o Caps Lock para executar como escape ou como controle funciona muito bem com esse método. Mapeamento para ambos, não tanto.

IMPORTANTE

Se você estragar seu mapa de teclado, faça o seguinte para redefini-lo.

# loadkeys -d

Referências

  • página de manual para loadkeys
  • página de manual para showkey
  • página de manual para dumpkeys
  • veja os mapas padrão localizados em / usr / share / kbd
por 29.01.2014 / 08:58