Troca de teclas AltGr e Espaço em Kali - o Firefox não é afetado

Jan 04 2021

Depois de tentar várias Spacee AltGrprincipais ideias de remapeamento, a mudança xkbparece muito promissora. Eu li e usei essas idéias relacionadas a xkb:
Remapear tecla altgr para AC10 em XKB
Como posso remapear as teclas do teclado?

À primeira vista, minhas correções parecem funcionar no editor de texto e no terminal (o Spacesímbolo é impresso ao AltGrpressionar a tecla). No entanto, no Firefox isso não funciona. Olhando mais de perto, notei que em todos os três aplicativos as combinações de teclas AltGrtambém funcionam (como se nenhum remapeamento tivesse sido feito), exceto que no terminal e no editor de texto a combinação imprime adicionalmente o caractere de espaço. Por exemplo, no terminal e no FireFox a combinação AltGr+ Fabre o menu Arquivo e no terminal também é impresso um caractere de espaço.

Meu Spaceestá quebrado e eu não uso AltGr. Eu só quero trocar completamente sua funcionalidade. o que estou perdendo? (Eu uso Kali Linux.)

Isso é o que eu fiz:
1.Aberto /usr/share/X11/xkb/symbols/pc
2.Alterou a linha comentada com a seguinte:

 // key <SPCE> {    [    space      ]   };
 key <SPCE> {   [ ISO_Level3_Shift  ]   };

3. Adicionadas estas linhas:

// Additionally added
key <RALT> {    [    32     ]   };

4.Salvei o pcarquivo.
5.Limpou o xkbcache executando rm -rf /var/lib/xkb/*
6.reiniciado


Informações adicionais (após as alterações listadas acima).

pcArquivo atual completo :

default  partial alphanumeric_keys modifier_keys
xkb_symbols "pc105" {

    key <ESC>  {    [ Escape        ]   };

    // The extra key on many European keyboards:
    key <LSGT> {    [ less, greater, bar, brokenbar ] };

    // The following keys are common to all layouts.
    key <BKSL> {    [ backslash,    bar ]   };
    // key <SPCE> { [    space      ]   };
    key <SPCE> {    [ ISO_Level3_Shift  ]   };

    include "srvr_ctrl(fkey2vt)"
    include "pc(editing)"
    include "keypad(x11)"

    key <BKSP> {    [ BackSpace, BackSpace  ]   };

    key  <TAB> {    [ Tab,  ISO_Left_Tab    ]   };
    key <RTRN> {    [ Return        ]   };

    key <CAPS> {    [ Caps_Lock     ]   };
    key <NMLK> {    [ Num_Lock      ]   };

    key <LFSH> {    [ Shift_L       ]   };
    key <LCTL> {    [ Control_L     ]   };
    key <LWIN> {    [ Super_L       ]   };

    key <RTSH> {    [ Shift_R       ]   };
    key <RCTL> {    [ Control_R     ]   };
    key <RWIN> {    [ Super_R       ]   };
    key <MENU> {    [ Menu          ]   };

    // Beginning of modifier mappings.
    modifier_map Shift  { Shift_L, Shift_R };
    modifier_map Lock   { Caps_Lock };
    modifier_map Control{ Control_L, Control_R };
    modifier_map Mod2   { Num_Lock };
    modifier_map Mod4   { Super_L, Super_R };

    // Fake keys for virtual<->real modifiers mapping:
    key <LVL3> {    [ ISO_Level3_Shift  ]   };
    key <MDSW> {    [ Mode_switch       ]   };
    modifier_map Mod5   { <LVL3>, <MDSW> };

    key <ALT>  {    [ NoSymbol, Alt_L   ]   };
    include "altwin(meta_alt)"

    key <META> {    [ NoSymbol, Meta_L  ]   };
    modifier_map Mod1   { <META> };

    key <SUPR> {    [ NoSymbol, Super_L ]   };
    modifier_map Mod4   { <SUPR> };

    key <HYPR> {    [ NoSymbol, Hyper_L ]   };
    modifier_map Mod4   { <HYPR> };
    // End of modifier mappings.

    key <OUTP> { [ XF86Display ] };
    key <KITG> { [ XF86KbdLightOnOff ] };
    key <KIDN> { [ XF86KbdBrightnessDown ] };
    key <KIUP> { [ XF86KbdBrightnessUp ] };

    // Additionally added
    key <RALT> {    [    32     ]   };

};

hidden partial alphanumeric_keys
xkb_symbols "editing" {
    key <PRSC> {
    type= "PC_ALT_LEVEL2",
    symbols[Group1]= [ Print, Sys_Req ]
    };
    key <SCLK> {    [  Scroll_Lock      ]   };
    key <PAUS> {
    type= "PC_CONTROL_LEVEL2",
    symbols[Group1]= [ Pause, Break ]
    };
    key  <INS> {    [  Insert       ]   };
    key <HOME> {    [  Home         ]   };
    key <PGUP> {    [  Prior        ]   };
    key <DELE> {    [  Delete       ]   };
    key  <END> {    [  End          ]   };
    key <PGDN> {    [  Next         ]   };

    key   <UP> {    [  Up           ]   };
    key <LEFT> {    [  Left         ]   };
    key <DOWN> {    [  Down         ]   };
    key <RGHT> {    [  Right        ]   };
};

setxkbmap -print:

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+inet(evdev)" };
    xkb_geometry  { include "pc(pc105)" };
};

xev( AltGrpressione e solte):

KeyPress event, serial 34, synthetic NO, window 0x3400001,
    root 0x6cb, subw 0x0, time 1249191, (168,-8), root:(797,298),
    state 0x0, keycode 108 (keysym 0x20, space), same_screen YES,
    XLookupString gives 1 bytes: (20) " "
    XmbLookupString gives 1 bytes: (20) " "
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x3400001,
    root 0x6cb, subw 0x0, time 1249261, (168,-8), root:(797,298),
    state 0x8, keycode 108 (keysym 0x20, space), same_screen YES,
    XLookupString gives 1 bytes: (20) " "
    XFilterEvent returns: False

Como a Spacetecla do meu teclado está quebrada, não posso mostrar a sua xev.

Respostas

3 Maik93 Jan 08 2021 at 01:35

Na verdade, eu fiz funcionar mesmo com xkeymap, deixo aqui como uma resposta diferente porque o método é estritamente diferente da minha solução anterior.

Talvez você tenha perdido alguma ocorrência de AltGruso.

Tentando imitar a sua configuração, já exportou o arquivo de configuração atual com o comando xkbcomp $DISPLAY current.xkbe editado através da remoção de todos ISO_Level3_Shift, LVL3e Mod5ocorrências.

Precisamente, o que excluí é:

interpret ISO_Level3_Shift+AnyOf(all) {
    virtualModifier= LevelThree;
    useModMapMods=level1;
    action= SetMods(modifiers=LevelThree,clearLocks);
};
interpret ISO_Level3_Shift+AnyOfOrNone(all) {
    action= SetMods(modifiers=LevelThree,clearLocks);
};
key <LVL3> {
    type= "ONE_LEVEL",
    symbols[Group1]= [ ISO_Level3_Shift ]
};
key <RALT> {
    type= "ONE_LEVEL",
    symbols[Group1]= [ ISO_Level3_Shift ]
};
modifier_map Mod5 { <LVL3> };

Então eu inseri:

key <LVL3> {[space]};
key <RALT> {[space]};

Esta configuração editada pode ser testada carregando-a com

xkbcomp new_conf.xkb $DISPLAY
1 Maik93 Jan 07 2021 at 16:56

Não encontrei nenhuma referência que prove que o que você propôs não deve funcionar no Firefox, embora pareça que o Chromium (e, portanto, o Chrome) não depende do xkeymaps: é uma escolha em desenvolvimento que se integra melhor ao programa no ChromeOS. Alguns remapeamentos do sistema não podem, portanto, ser suportados.

Uma correção que funcionou para mim foi remapear os códigos-chave no nível do kernel. Para conseguir isso, eu coletei códigos de varredura (o ID de hardware da chave) e códigos de chave (o símbolo no qual eles são mapeados) para espaço e altGr:

# to collect scan-codes
sudo showkey -s
# space press: 0x39
# altGr press: 0xe0 0x38

# to collect key-codes
sudo showkey
# space press: 57
# altGr press: 100

Pelo que entendi, você gostaria de remapear o altGr para o espaço porque sua barra de espaço está quebrada, portanto:

sudo setkeycodes e038 57

deve fazer o truque.


Para tornar isso permanente no Kali Linux, você deve editar o arquivo xinit padrão /etc/xdg/xfce4/xinitrc, copiando-o ~/.xinitrce inserindo sudo setkeycodes e038 57antes da instrução if que contém exec xfce4-session; no arquivo padrão Kali 20.04, esta instrução if está na linha 86.

Observe que isso requer a ativação do sudo sem senha ), mas, pelo que me lembro, essa já é a opção padrão no Kali.