Depurar / corrigir um problema chave de repetição automática?

1

Estou usando o Caps Lock como uma tecla Control, configurada com o seguinte comando (estou executando o Gnome):

gsettings set org.gnome.desktop.input-sources xkb-options \
  "['caps:ctrl_modifier']"

Às vezes, quando pressiono uma tecla modificada pelo controle, a tecla faz a autoreposta. Por exemplo, digitarei Ctrl-w e, de repente, a tecla w começará a se repetir como se eu estivesse pressionando. Eu suspeito que um evento de keyup está sendo perdido. A repetição continua indefinidamente até eu apertar outra tecla.

Também pode estar relacionado, às vezes, quando pressiono uma tecla modificada, ela simplesmente não faz nada, como se eu tivesse "pressionado errado". Eu apenas tento novamente e isso funciona, mas eu suspeito que esse seja outro sintoma do mesmo problema subjacente.

Como posso depurar / corrigir isso? Gostaria de ver quais eventos de teclado estão sendo enviados e quando.

Atualizar

Ainda não encontrei uma correção para isso (não sei o que fazer com a resposta abaixo, porque é uma informação útil, mas não resolveu meu problema), mas Eu usei xinput para monitorar os eventos de teclado envolvidos.

Parece estar relacionado a "rollover", porque só posso reproduzir o bug de repetição de chave com sequências de chaves como press Caps , press W , release Caps , release W (em oposição a liberar W antes liberando Caps).

Eu também só posso reproduzir o bug no X, não em um console virtual.

Eu esvaziei o xkb-options definido por gsettings e agora estou usando /etc/X11/xorg.conf.d/00-keyboard.conf :

Section "InputClass"
  Identifier "Keyboard catchall"
  MatchIsKeyboard "on"
  Option "XkbModel" "pc104"
  Option "XkbLayout" "us"
  Option "XkbOptions" "ctrl:nocaps"
  Option "XkbVariant" ""
EndSection

Troquei caps:ctrl_modifier para ctrl:nocaps porque funciona no console virtual e no X.

Então, ainda estou procurando uma solução, mas sinto que pelo menos aprendi algumas coisas no processo.

    
por ivan 16.02.2018 / 14:39

1 resposta

2

Definindo o comportamento da tecla de controle no XServer em vez do Gnome (supondo que você não esteja usando o wayland em vez do X):

Usando setkbmap

  1. Obtenha seu layout de teclado:

    setxkbmap -query
    

    Procure a estrofe denominada layout . Algo como gb para um layout em inglês. Você pode ser diferente.

  2. Modifique as opções do layout do teclado usando o mesmo layout que você está usando no # 2 acima:

    setxkbmap -layout gb -option ctrl:nocaps
    

    Aqui, a opção ctrl:nocaps faz com que seus limites bloqueiem uma chave de controle adicional. Para tornar esta alteração permanente, você pode adicioná-la ao seu arquivo .xinitrc se estiver iniciando o X com startx ou xinit de um terminal. Se você não estiver fazendo isso veja esta resposta para saber como executar um comando no login para o Gnome.

Usando xmodmap

Crie o seguinte arquivo .Xmodmap em seu diretório inicial:

!
! Make Caps_Lock another Control_L
!
remove Lock = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock

Você pode então executar o seguinte na inicialização para tornar essa alteração ativa para sua sessão X:

xmodmap ~/.Xmodmap

Depois de ter algo que você gosta, você pode adicionar esse comando ao seu .xinitrc ou usar o mesmo método vinculado acima para torná-lo permanente.

Indo mais fundo

Você também pode alterar os limites para controlar no nível do kernel usando loadkeys .

O básico aqui é usar dumpkeys para despejar seu mapa de chaves existente em um arquivo. Altere o mapeamento para caps lock e, em seguida, use loadkeys para carregar seu novo mapa de teclas.

Observe que, como você está fazendo alterações em como o kernel lê a entrada do teclado, essas alterações precisarão de privilégios de root. Aqui está um githubist com as modificações relevantes e algumas instruções.

    
por 16.02.2018 / 16:37