como atribuir outro modificador à tecla Alt para X11?

8

Objetivo:

Gostaria de atribuir Alt à tecla CapsLock e Meta à tecla Alt. Mas dessa forma, a tecla Alt não seria mais reconhecida como Alt e a tecla CapsLock não seria mais reconhecida como CapsLock.

openSUSE 11.4

Anteriormente:

openSUSE 11.1 - como eu sou o único usuário do meu computador, eu "simplesmente" editei o arquivo /usr/share/X11/xkb/keycodes/xfree86 e funcionou sem problemas. As chaves foram conectadas aos seus símbolos no nível mais baixo.

Problemas:

  1. xkb

    Eu criei uma variante do layout polonês (pl_ext) que (para teste) consiste em tais entradas:

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    

    No entanto isso não faz nada, a tecla CapsLock no xev é reconhecida (símbolo) como Alt_L, mas quando pressiono a tecla CapsLock ela se comporta como CapsLock (por exemplo, supondo que você tenha o menu Arquivo, Alt + F deve abrir este menu, isso não acontece.

    Pergunta: Como definir um arquivo de layout para definir a tecla CapsLock como Alt e a tecla Alt como Meta?

    Edit: Metade do sucesso aqui! Agora eu tenho essas entradas:

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { <CAPS> }; // this is a difference
    

    e isso funciona como desejado. Isso não:

    key <LALT> { [ Meta_L ] } ;
    key <RALT> { [ Meta_R ] } ;
    modifier_map Mod5 { <LALT>,<RALT> };
    

    As teclas Alt são reconhecidas como Meta por xev, mas ainda posso abrir os menus com Alt + F, alternar entre janelas e não devo. E, por outro lado, não posso entrar em nenhum personagem nacional e devo fazê-lo.

  2. xfree86

    Mas agora isso não funciona, acho que outra tabela de arquivos é lida em vez do xfree86.

    Pergunta: Como descobrir qual arquivo de tabela de códigos de chaves é usado pelo sistema (X / Gnome)?

    Editar: A melhor opção para mim - editar tabelas de códigos de tecla - foi resolvida por resposta de macias !

  3. xmodmap

    Metade do sucesso aqui. Esta parte funciona como desejado:

    remover o bloqueio = Caps_Lock keysym Caps_Lock = Alt_L

    Agora, eu tenho a chave CapsLock que está mapeada para Alt. Mas isso:

    keysym Alt_L = Meta_L

    ... faz coisa estranha. xev mostra que a tecla Alt está mapeada para Meta, mas quando pressiono Alt + F (isso deve ser mapeado para Meta + F - > sem fazer nada) o menu Arquivo é aberto. Além disso, quando pressiono Alt + Tab, recebo um alternador de janelas (não devo fazê-lo - Alt é Meta agora).

    Pergunta: Como "excluir" o comportamento antigo da tecla Alt?

    Editar: Esta parte é resolvida por Resposta de Gilles .

Resumo:

Responder a qualquer pergunta resolveria meu problema, mas eu prefiro usar o xkb completamente porque eu poderia então empacotar todos os arquivos para xkb e mudar o layout em um só lugar. Agradeço antecipadamente por qualquer ajuda!

    
por greenoldman 19.03.2011 / 11:18

3 respostas

6

(Esta resposta é apenas sobre o xmodmap. Tenho certeza que é possível fazer isso com o XKB, só não sei como).

Modificadores e keyyms são atribuídos de forma independente. Mas você tem efeitos estranhos se não os definir consistentemente. Acho que tudo o que está faltando é o comando add para atribuir um modificador a Meta_L , embora você também precise limpar e reatribuir as teclas modificadoras. Você pode substituir Mod1 e Mod2 por Mod3 , Mod4 e Mod5 : eles são intercambiáveis, apenas certifique-se de não usar um para dois propósitos diferentes.

clear Mod1
clear Mod2
remove Lock = Caps_Lock
keysym Caps_Lock = Alt_L
keysym Alt_L = Meta_L
add Mod1 = Alt_L Alt_R
add Mod2 = Meta_L Meta_R
    
por 19.03.2011 / 12:05
7

Como abordar códigos de teclas

Encontrei a resposta no fórum polonês do Ubuntu. Agora não se edita o arquivo "xfree86", mas sim o arquivo "evdev". Dessa forma, você pode fazer alterações permanentes que funcionem para todos os layouts.

Exemplo (na solicitação de Gilles) - faça o login como root, vá para

/usr/share/X11/xkb/keycodes

faça um backup do arquivo "evdev" e edite-o. Altere os códigos ao seu gosto, por exemplo, no meu caso:

<LALT> = 66; // when I press CapsLock (66 code) system will report pressing LeftAlt
<LMTA> = 64; // I will get LeftMeta when pressing LeftAlt (64 code)

Você pode encontrar os códigos executando o comando "xev", mas você pode simplesmente olhar para o arquivo "evdev" original.

Efetue logout, faça login, aproveite seu novo teclado: -).

    
por 24.03.2011 / 07:06
3

tente isto:

    key <CAPS>  { [ Alt_L, Alt_L ] };
    key <LALT> { [ Meta_L, Meta_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    modifier_map Mod5 { Meta_L, Meta_R };

observe as definições de dois níveis. Isso é porque o padrão para o LALT é [Alt_L, Meta_L]; se você não redefinir o segundo, ele permanecerá Meta_L.

Veja este responda no xkb para saber como redefinir algumas teclas sem precisar editar os arquivos padrão principais (assim, não é necessário ser root). Nesse caso, você precisará, no arquivo de símbolos locais, de uma pequena seção como:

partial modifier_keys
xkb_symbols "capsasalt_altasmeta" {
        replace key <CAPS>  { [ Alt_L, Alt_L ] };
        replace key <LALT> { [ Meta_L, Meta_L ] };
        modifier_map Mod1 { Alt_L, Alt_R };
        modifier_map Mod5 { Meta_L, Meta_R };
};
    
por 21.02.2013 / 11:22