Como posso definir um determinado código de tecla para uma chave e ligá-lo à ação correta?

1

Eu tenho um laptop com layout de teclado sueco, tudo funciona bem com o teclado. Devido a lesões estou usando um teclado USB ergonômico externo, é aqui que estou passando por dificuldades.

O teclado externo não tem uma chave para Control_R ou ALT-GR (eu acho que é ALT_R ), o que causa problemas porque a digitação é @ , $ , e {} ou [] all usa ALT-GR no layout de teclado sueco.

UPDATE :: Isso não é verdade. O teclado vem com ambas as teclas Control, mas foi confuso devido ao remapeamento personalizado, leia como gerenciar esse aqui . Depois de um reset completo, acontece que o teclado externo tem Alt-GR (mostrado como ISO_Level3_Shift por xev) também (apesar dos backticks serem difíceis de encontrar). :: END UPDATE

O teclado tem um recurso de remapeamento embutido, bem como recursos de macro, mas não há maneira de remapear as teclas do teclado on-board para o teclado externo (tanto quanto eu sei)

Eu gostaria de definir uma das minhas chaves no teclado externo para ter um novo código de acesso (como Control_R ou ALT_R e, em seguida, remapear isso para agir como ALT-GR - isso é possível? Desejo que o keycode Control_L seja, se eu remapear, a outra tecla Control também será remapeada.

Com o xev, verifiquei qual keycode é acionado clicando na tecla ALT-GR no meu teclado on-board e isso é keycode 108 (keysym 0xfe03, ISO_Level3_Shift) . Depois de algumas pesquisas, percebi que isso não é esperado para a chave ALT-GR , mas essa chave funciona como esperado.

Com o xev, também verifico a saída da chave no teclado externo que desejo usar como ALT-GR : keycode 105 (keysym 0xffe3, Control_L) .

Eu tenho outra chave no teclado externo que produz exatamente a mesma coisa, essa chave é a que eu uso para Control_L , fazendo com que a que eu desejo fosse ALT_GR redundante.

Eu tenho mexido com xmodmap para ver se eu posso conseguir o que eu preciso, mas infelizmente, sem sucesso. Aqui estão alguns cenários.

xmodmap -e "keycode 105 = Alt_R" # = > Isso desativa as duas teclas Control e não funciona como ALT-GR , praticamente a chave não faz nada.

xmodmap -e "keycode 105 = ISO_Level3_Shift" # = > O mesmo que acima

Existe uma maneira de resolver esses problemas?

Configuração:

por miphe 11.12.2013 / 18:53

2 respostas

1

Se você tiver duas chaves com o mesmo scancode, remapeando essas chaves para outra ação irá remapear ambas as chaves com o scancode. Não há como (até onde eu sei) diferenciar duas chaves diferentes se elas tiverem o mesmo scancode.

Como o @falconer sugere, você pode ver se suas duas chaves são diferentes ou iguais, marcando com showkey -s no console virtual. Lembre-se de como voltar para o X ( ALT + F7 ) para que você não fique preso no console virtual.

Se você pressionar as duas teclas que deseja mapear de forma diferente, e essas duas chaves fornecerem a mesma saída aqui, será necessário procurar outra solução.

O teclado externo do qual você está falando tem, de fato, chaves com o mapeamento de scancodes para ações que você sugere que estão faltando ( Control_L e Control_R ) - Eu recomendo que você redefina o teclado para suas configurações padrão e verifique a saída de suas chaves com xev novamente.

Certifique-se de começar com as configurações corretas do sistema operacional, no teclado elas são:

= + + w para janelas.

= + + p para PC (não-windows).

= + + m para Mac.

Configurar isso antes de começar a remapear vai te dar um bom começo com todos os scancodes que você precisa.

Quanto ao problema Alt-GR , ISO_Level3_Shift deve ser a ação correta para essa chave (até onde eu sei). Teclas com essa ação ativam o comportamento de Alt-GR corretamente.

Além disso, ao adulterar scancodes e ações, pode ser interessante ter algum tipo de software como o KeyMon que lhe dirá qual tecla ou combinação de teclas você está pressionando.

    
por miphe 12.12.2013 / 21:53
2

Mude para um console virtual ( CTRL + ALT + F1 ) e execute

showkey -s

Isto irá imprimir os scancodes das teclas, então apenas pressione as teclas CTRL para a esquerda e para a direita e veja se elas têm os mesmos scancodes. Depois de verificar isso, aguarde 10 segundos e não pressione nenhuma tecla , para que o programa showkey possa retornar. Em seguida, volte para X ( ALT + F7 ).

Se os scancodes foram diferentes, então há esperança de que essas chaves possam ser remapeadas de forma diferente (porque o kernel as vê diferentes), se os scancodes são os mesmos, então não há maneira de um remapeamento diferente.

    
por falconer 11.12.2013 / 19:10