Utilisez setxkbmap pour permuter le décalage gauche et le contrôle gauche


17

Est-il possible d'échanger les touches Gauche Shiftet Gauche à l' CTRLaide de setxkbmapau lieu de xmodmap?

ÉDITER

Je suis passé à Fcitx , qui fonctionne beaucoup mieux avec ma disposition de clavier et ma carte de touches personnalisée qu'IBus à tous égards. Je le recommande fortement.

Réponses:


28

xmodmapest obsolète; en effet, cela devrait être fait avec les xkboutils.

L'échange que vous souhaitez ne semble pas être inclus par défaut avec les fichiers X11; vous devez donc l'écrire vous-même.

La page http://madduck.net/docs/extending-xkb/ m'a aidé à comprendre et à trouver un moyen de le faire.

Créez un fichier ~/.xkb/keymap/mykbdoù vous mettez la sortie de setxkbmap, ce sera votre définition de clavier de base; par exemple:

setxkbmap -print > ~/.xkb/keymap/mykbd

ensuite, créez un fichier de symboles pour définir votre échange de clés, mettez-le par exemple dans ~/.xkb/symbols/myswap

là, mettez les lignes suivantes:

partial modifier_keys
xkb_symbols "swap_l_shift_ctrl" {
    replace key <LCTL>  { [ Shift_L ] };
    replace key <LFSH> { [ Control_L ] };
};

puis modifiez le ~/.xkb/keymap/mykbdfichier et modifiez la xkb_symbolsligne à ajouter

+myswap(swap_l_shift_ctrl)

enfin, vous pouvez le charger avec xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY(vous ne pouvez pas utiliser "~" pour le -Iparamètre). Il crachera probablement beaucoup d'avertissements sur les symboles non définis pour certaines clés rares, mais vous pouvez les ignorer (par exemple, rediriger l'erreur vers dave:) 2> /dev/null.

Si vous voulez pouvoir basculer facilement entre un normal et un inversé ctrl / shift; il suffit de créer sous ~/.xkb/keymap/un autre fichier, sans l'option "myswap" supplémentaire, et de le charger avec xkbcomp. Vous pouvez créer deux petits scripts pour les charger.


1
Merci. Cela fonctionne, mais pour une fois. Le problème est que j'utilise un moteur d'entrée appelé IBus. Chaque fois que je change de méthode de saisie et que je reviens par la touche "Ctrl + Espace", le décalage vers la gauche et le contrôle vers la gauche sont inversés. Toute suggestion sur la façon de l'éviter.
jour

mmn, IBus fait peut-être lui-même des redéfinitions de clavier. essayez xkbcomp $DISPLAY some.dumpaprès et avant d'appeler IBus, et faites un diff des deux vidages (ce sont la définition complète du clavier); vous verrez probablement des différences.
Pablo Saratxaga

Hmm, ça le fait, comme c'est ennuyeux. Une idée pour vous débarrasser du problème? Notez que la commande setxkbmap -option caps:escapefonctionne. IBus s'est souvenu des touches échangées Esc et Caps_Lock, mais cela ne s'applique pas aux touches de décalage gauche et de contrôle gauche.
jour

peut-être qu'IBus a lu le clavier lors de son lancement. Essayez de décharger IBus, de changer votre clavier et de le charger à nouveau. Si le problème persiste, alors une question spécifique à IBus devrait être posée (et peut-être signaler un bug; à mon humble avis, IBus devrait détecter les changements de clavier et les honorer)
Pablo Saratxaga

Salut. Quelqu'un peut-il me dire comment j'utiliserais la même technique pour échanger la touche Alt gauche avec la touche Contrôle gauche? J'ai essayé de changer le fichier myswap en: partiel modifier_keys xkb_symbols "swap_l_shift_ctrl" {replace key <LCTL> {[Alt_L]}; remplacer la clé <LALT> {[Control_L]}; }; mais ça n'a pas marché. TIA !!!
Neil Girardi

3

J'ai rencontré des problèmes liés LALTà l' Control_Lutilisation de la solution de Pablo , il semble que vous devez également définir les modifier_mapoptions.

J'ai copié un modèle depuis /usr/share/X11/xkb/symbols/altwin- chercher xkb_symbols "ctrl_alt_win"- et l' ai modifié pour définir les changements suivants:

  • Touche LALT pour contrôler **
  • Touche LWIN pour Alt
  • Touche MENU à la touche Windows

Le ~/.xkb/symbols/myswapdossier final était:

partial modifier_keys
xkb_symbols "swap" {
   key <MENU> {     [   Super_L     ]   };
   key <LALT> { [ Control_L, Control_L  ] };
   key <RALT> { type[Group1] = "TWO_LEVEL",
                symbols[Group1] = [ Alt_R, Meta_R ] };
   key <LWIN> { [ Alt_L, Meta_L ] };
   key <LCTL> { [ Control_L ] };
   key <RCTL> { [ Control_R ] };
   modifier_map Control { <LALT>, <LCTL>, <RCTL> };
   modifier_map Mod1 { <LWIN>, <RALT> };
   modifier_map Mod4 { <MENU> };
};

J'ai également ajouté -w0à la xkbcompcommande pour éviter toute sortie d'avertissement lors de l'ouverture d'un nouveau shell.

xkbcomp -w0 -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY

** En passant beaucoup entre Mac et Linux, j'aime avoir deux touches de contrôle sur Linux pour approximer le clavier Mac pour ma mémoire musculaire.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.