Permutation des touches AltGr et Space dans Kali - Firefox n'est pas affecté

Jan 04 2021

Après avoir essayé plusieurs Spaceet AltGrclés idées de remappage, changer les xkbregards les plus prometteurs. J'ai lu et utilisé ces idées liées à xkb:
Remapper la touche altgr à AC10 dans XKB
Comment puis-je remapper les touches du clavier?

Dès le premier coup d'œil, mes corrections semblent fonctionner dans l'éditeur de texte et dans le terminal (le Spacesymbole est imprimé sur la AltGrtouche). Cependant, dans Firefox, cela ne fonctionne pas. En regardant de plus près, j'ai remarqué que dans les trois applications, les combinaisons de touches AltGrfonctionnent également (comme si aucun remappage n'avait été effectué), sauf que dans le terminal et dans l'éditeur de texte, la combinaison imprime en plus le caractère d'espace. Par exemple, dans le terminal et dans FireFox, la combinaison AltGr+ Fouvre le menu Fichier et dans le terminal un caractère espace est également imprimé.

Mon Spaceest cassé et je ne l'utilise pas AltGr. Je veux juste échanger complètement leurs fonctionnalités. Qu'est-ce que je rate? (J'utilise Kali Linux.)

Voici ce que j'ai fait:
1.Opened /usr/share/X11/xkb/symbols/pc
2.Changement de la ligne commentée avec celle ci-dessous:

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

3. Ajout de ces lignes:

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

4.Enregistré le pcfichier. Vider
5.le xkbcache en cours d'exécution rm -rf /var/lib/xkb/*
6.Redémarré


Informations supplémentaires (après les modifications énumérées ci-dessus).

pcFichier actuel complet :

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( AltGrappuyez et relâchez):

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

Comme la Spacetouche de mon clavier est cassée, je ne peux pas la montrer xev.

Réponses

3 Maik93 Jan 08 2021 at 01:35

Je l'ai fait fonctionner même avec xkeymap, je la laisse ici comme une réponse différente car la méthode est strictement différente de ma solution précédente.

Peut-être que vous avez manqué une occurrence d' AltGrutilisation.

Essayer de mimer votre configuration, j'ai exporté le fichier de configuration en cours avec la commande xkbcomp $DISPLAY current.xkbet édita en supprimant tous ISO_Level3_Shift, LVL3et les Mod5occurrences.

Justement, ce que j'ai supprimé est:

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> };

Ensuite, j'ai inséré:

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

Cette configuration modifiée peut être testée en la chargeant avec

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

Je n'ai trouvé aucune référence qui prouve que ce que vous proposez ne devrait pas fonctionner sur Firefox, alors qu'il semble que Chromium (et donc Chrome) ne repose pas sur xkeymaps: c'est un choix en développement qui intègre mieux le programme dans ChromeOS. Certains remappages système peuvent donc ne pas être pris en charge.

Un correctif qui a fonctionné pour moi est de remapper les codes clés au niveau du noyau. Pour ce faire, j'ai collecté des scan-codes (l'ID matériel de la clé) et des key-codes (le symbole dans lequel ils sont mappés) pour l'espace et 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

Pour autant que je sache, vous souhaitez remapper l'altGr en espace car votre barre d'espace est cassée, par conséquent:

sudo setkeycodes e038 57

devrait faire l'affaire.


Afin de rendre ce permanent sous Kali Linux, vous devez éditer le fichier xinit par défaut, /etc/xdg/xfce4/xinitrcen face à ~/.xinitrcet insérer sudo setkeycodes e038 57avant l'instruction if qui contient exec xfce4-session; sur le fichier par défaut de Kali 20.04, cette instruction if est à la ligne 86.

Notez que cela nécessite d' activer sudo sans mot de passe ), mais pour autant que je me souvienne, c'est déjà l'option par défaut dans Kali.