Como forçar a liberação de modificadores de teclado

13

Às vezes, quando uso a sinergia entre minhas máquinas quando estou usando um convidado do VirtualBox de tela cheia, fico preso a alguns modificadores de chave estranhos ativados. Se eles existirem no meu teclado (como Shift_L), posso apenas tocar nele e o status deles será redefinido, e eu posso continuar digitando em letras minúsculas. Mas alguns deles não estão mapeados para o meu teclado (como o ISO_Level3_Shift), então eu não tenho meios de desativá-los!

Como redefini-los? Agora, tudo o que posso fazer é reiniciar o computador, mas é uma solução bastante embaraçosa.

Tudo que eu quero é algum programa que possa "tocar" artificialmente todos os modificadores de teclado possíveis, para que seu status seja redefinido. Isso pode ser feito?

Eu uso o Mint 14 (um clone do Ubuntu 12.10 Quantal).

    
por Adam Ryczkowski 01.01.2013 / 19:12

3 respostas

18

Se você tem xdotool instalado, pode simplesmente usar

xdotool keyup ISO_Level3_Shift

O qual envia um evento de liberação de chave (para ISO_Level3_Shift, é claro) para o servidor X.

Mas você queria que um programa liberasse todas as teclas modificadoras. Pode-se usar o xdotool para conseguir isso facilmente, se não por isso eu não tenho idéia de quais keyyms modificadores são definidos. Um método possível para encontrá-los é analisar keysymdef.h :

grep '^#define' /usr/include/X11/keysymdef.h | sed -r 's/^#define XK_(\S*?).*$//;' | grep -E '_(L|R|Level.*)$'

Que retorna alguns keyyms que certamente são modificadores. Infelizmente, não consigo encontrar nenhuma definição precisa de uma tecla modificadora no momento, então não sei se é uma lista completa.

Anexar | xargs xdotool keyup ao pipeline acima liberará todas essas chaves. No meu sistema, ele executa o seguinte comando:

xdotool keyup Shift_L Shift_R Control_L Control_R Meta_L Meta_R Alt_L Alt_R Super_L Super_R Hyper_L Hyper_R ISO_Level2_Latch ISO_Level3_Shift ISO_Level3_Latch ISO_Level3_Lock ISO_Level5_Shift ISO_Level5_Latch ISO_Level5_Lock
    
por 13.02.2013 / 21:59
5

Descobri que, para o meu sistema, a solução publicada que envolvia xdotool geralmente não abrangia a chave que estava presa e a execução de setxkbmap não pareceu realizar nada no meu sistema.

A solução que descobri, que até agora funcionou sem falhas, é usar x11vnc . Especificamente, eu uso o seguinte comando:

x11vnc -deny_all -clear_keys -timeout 1

-clear_keys é a parte principal aqui. Instrui x11vnc para limpar todas as teclas pressionadas quando sai. -timeout 1 diz a x11vnc para sair após 1 segundo sem conexões, e -deny_all garante que ninguém possa se conectar durante essa janela.

Às vezes, a chave que fica presa impede qualquer interação significativa com a área de trabalho. Nesse caso, executarei o seguinte por meio do ssh:

env DISPLAY=:0 XAUTHORITY=/home/[username]/.Xauthority x11vnc -deny_all -clear_keys -timeout 1
    
por 30.11.2015 / 09:26
3

Eu uso "setxkbmap" sem argumentos. Parece redefinir o teclado. Eu tenho um "atalho" no meu painel que eu posso usar com um mouse para quando o teclado está completamente inoperante.

    
por 15.04.2014 / 02:23