Por que meus vínculos xmodmap envolvendo AltGr funcionam apenas em algumas chaves?

11

Eu quero remapear meu AltGR + Right_Windows, mas não consigo descobrir como. Não importa o que eu tente, pressionar a tecla direita do Windows emite o nome keysym quando o botão direito está pressionado ou não.

Estes são os conteúdos do arquivo xmodmap que estou testando agora. No meu teclado, 38 é o código-chave para "a", 48 é o código-chave para aportrophe / doublequote e 134 é o código-chave para a tecla direita do Windows.

keycode  38 = 1 2 3 4 5 6 7 8
keycode  48 = 1 2 3 4 5 6 7 8
keycode 134 = 1 2 3 4 5 6 7 8

Quando eu pressiono Right_Alt + apostrophe, ele gera 5, mas Right_Alt + a e Right_Alt + Right_Windows dão 1 (quando o alt direito é pressionado e quando não é), o que não é o que eu queria.

Meu layout de teclado atual é us(alt-intl) e o alt correto aparentemente está configurado para atuar como AltGr / Iso_Level3_Shift. A saída de xmodmap -pm é a seguinte:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
    
por hugomg 13.12.2015 / 19:13

3 respostas

4

Usando o xmodmap para configurar mapeamentos de teclas individuais

É hora de escrever os resultados da minha própria pesquisa.

Eu pensei que eu deveria ter perdido alguma coisa no xmodmap e que isso não é muito bem documentado e as pessoas estão confusas. Mas acabou que o design do X.Org em relação ao XKB e ao xmodmap é simplesmente estúpido.

Falha épica: xmodmap

Você pode usar o xmodmap para redefinir os mapeamentos existentes, desde que esses mapeamentos realmente existam no layout do teclado original. No caso descrito na questão, você não pode estender o comportamento de nenhuma tecla para usar o AltGr. Você só pode alterar os keyyms AltGr para códigos de teclas que já estão usando AltGr.

Veja também: link

Solução alternativa: Mode_switch

Esta solução alternativa é descrita na resposta por @ Ned64. Você pode remapear AltGr de ISO_Level3_Shift para Mode_switch .

Eu usei com sucesso a seguinte linha de comando para remapear AltGr .

xmodmap -e 'keycode 108 = Mode_switch'

A desvantagem é que ele irá quebrar seu layout de teclado atual, mas você pode recriar todos os mapeamentos um por um usando xmodmap como @ Ned64 já mencionado.

Solução alternativa: layout de teclado modificado

Estou usando us(cz_sk_de) como meu layout de teclado e tentei modificá-lo adicionando configuração para as chaves que queria estender.

key <AB08>  { [ comma, less, doublelowquotemark, leftdoublequotemark ] };
key <AB09>  { [ period, greater, ellipsis, rightdoublequotemark ] };

(Na seção xkb_symbols "cz_sk_de" de /usr/share/X11/xkb/symbols/us )

Basta redefinir o layout do teclado para usar a versão modificada.

setxkbmap 'us(cz_sk_de)'

Agora você pode (1) digitar aspas e elipses tchecos e ingleses usando combinações de chaves , , . , Shift e AltGr e / ou (2) remapear essas chaves usando xmodmap agora que eles estão definidos.

A principal desvantagem é que setxkbmap parece não suportar localizações arbitrárias para layouts de teclado e, portanto, você precisa escrever para a configuração do sistema em vez do seu diretório pessoal.

Conclusão

Este parece ser um exemplo de design overprojectado e incorrecto do X.Org, onde mesmo uma coisa tão trivial como mapear um código chave e uma combinação de modificadores num símbolo acaba por ser um problema. As ferramentas não parecem fornecer uma maneira razoável de alterar apenas mapeamentos de teclas individuais na configuração do usuário, sem efeitos colaterais.

    
por 01.10.2016 / 23:02
4

Etapa 1: Torne o AltGr utilizável

Descobri que as Chaves modificadas pelo AltGr só funcionam no meu sistema se eu também remapear o AltGr-Key para Mode_switch , assim:

xmodmap -e "keycode 108 = Mode_switch Mode_switch Mode_switch Mode_switch"

Se você tiver um teclado diferente, pode ser necessário substituir o 108 pelo seu código, verifique digitando

xmodmap -pke | grep Alt_R

use esse número. (A chave é normalmente chamada de Alt_R em sistemas que eu conheço).

Como alternativa, isso também pode funcionar se Alt_R ainda não estiver atribuído a outra coisa:

xmodmap -e "keysym Alt_R = Mode_switch Mode_switch Mode_switch Mode_switch"

Seu modificador AltGr agora servirá a posição 3 (com Shift: 4) na sua lista de modificadores.

Etapa dois: atribua chaves conforme necessário

Você pode atribuir variantes AltGr para qualquer tecla do teclado que desejar. Se você tem outras chaves que não correspondem ao código desejado agora, você precisa reatribuí-las como as outras chaves (aquelas que você testou).

Etapa três: converta isso em um script

Agora é só pegar seus comandos xmodmap e gravar todas (mas apenas) modificações em seu teclado padrão em um arquivo - isso é mais rápido do que carregar um mapa de teclado completo. Inicie este script uma vez após cada login e sempre que o mapa de teclado for redefinido por algum processo.

Eu tenho experimentado muito isso ao longo dos anos, no Solaris, IRIX e Linux, e, até onde sei, esta é a única solução para o funcionamento do AltGr - e funcionou bem para mim por mais de 20 anos.

    
por 10.08.2016 / 17:13
1

Aparentemente, o xmodmap não lê o AltGR padrão como deveria, pode ser limitado a layouts de teclado específicos, talvez seja todos os layouts fora dos EUA, de qualquer forma, o problema real é que você pode substituir o layout do teclado, algumas pessoas podem não querer fazer isso, já que precisam usar caracteres especiais no layout ao qual estão acostumados (como layouts de teclado escandinavos com caracteres como ðþæöáúíóåů e assim por diante) que seriam difíceis de configurar para outros layouts de teclado. / p>

Você pode executar

xmodmap -e "keycode 108 = Mode_switch"

Para religar o AltGR com algo que o xmodmap pode trabalhar, e de fato, a terceira atribuição de um keycoad será produzida quando você pressionar AltGR agora, mas quebrará completamente o layout original do teclado já que nenhum atalho AltGR funcionará mais com o AltGR chave.

Eu encontrei duas soluções alternativas que não quebram meu layout de teclado existente e não envolvem a mudança de layouts , uma delas é ligar Mode_switch a outra chave.

A chave ideal para isso é Super_R, que fica bem ao lado de AltGR, o código-chave para ele é 134. No entanto, nem todos os teclados têm e no meu caso em um laptop eu também não tenho, então eu decidi ligá-lo para a última chave que eu praticamente nunca uso, Right Control.

xmodmap -e "keycode 105 = Mode_switch"

Eu tenho um layout de teclado físico americano, mas configuração de layout europeu, e a chave menor / maior / barra (também conhecida como ISO_Backslash, embora isso não seja reconhecido pelo próprio xmodmap) está quase ausente em Z nesses teclados. Eu liguei isso ao Menu (135) mas poderia servir como uma alternativa para R_Ctrl e Super_R

Esta é uma solução suja, suponho.

A segunda solução demorou um pouco mais para descobrir. Usando sxhkd (xbindkeys alternative)

Se você adicionar isso a ~ / .config / sxhkd / sxhkdrc :

~ISO_Level3_Shift
    xdotool key Mode_switch

Seu AltGR funcionará normalmente, mas quando pressionado, Mode_switch será alternado (como caps lock, mas para Mode_switch) e todas as teclas xmodmap que o usarão serão bloqueadas no modo AltGR até que você pressione AltGR novamente para desmarcá-lo . Deve ser uma questão simples criar um script para desmarcá-lo automaticamente quando a chave for liberada, mas minhas tentativas de fazer isso foram muito bugs, para dizer o mínimo.

    
por 07.10.2018 / 02:00

Tags