Script pour basculer setxkbmap


8

Je voudrais un script bash qui bascule entre: setxkbmap seet setxkbmap us.

Ensuite, mes intentions sont de mapper ce script CtrlEscvia le clavier> raccourcis personnalisés.

Le fait est que je veux changer la disposition du clavier avec CtrlEscape. Comment puis-je implémenter cela?


1
Quel DE utilisez-vous?
daisy

3
XKB peut configurer une clé pour basculer entre les dispositions. Ce n'est pas quelque chose que vous voudriez écrire, mais il y a probablement une configuration précuite quelque part où vous n'auriez qu'à sélectionner la paire de dispositions et la combinaison de touches que vous préférez.
Gilles 'SO- arrête d'être méchant'

Réponses:


3

Je ne sais pas quel environnement de bureau vous exécutez, comment vous allez attribuer une touche de raccourci peut varier, mais ce script fonctionne globalement, au moins sur mon Ubuntu 12.04 boxet Arch Linux:

#!/bin/bash

(setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us

Malheureusement, cela ne fonctionne pas si vous modifiez la disposition à l'aide d'une méthode gui. Au moins, ce n'est pas sur ma boîte xfce. Cela ne fonctionne que si vous utilisez setxkbmap pour changer de disposition. Le seul moyen que j'ai trouvé qui fonctionne toujours de manière cohérente est l'analyse xmodmapcomme dans ma réponse ci-dessous.
terdon

@terdon cela fonctionne au moins sur ma boîte Ubuntu 12.04, avez-vous essayé cela sur votre système?
daisy

Oui, croyez-moi, j'ai passé beaucoup de temps à traiter ce type de problème. Je bascule régulièrement entre 3 dispositions de clavier (us, fr, es) et entre deux claviers physiques, l'un avec la disposition américaine et l'autre avec l'espagnol. Si j'utilise l'applet sur mon panneau tint2 pour changer la disposition du clavier, il n'y a aucune différence dans la sortie de setxkbmap. Il en va de même si je change de disposition à l'aide d'un raccourci configuré via l' keyboard shortcutsinterface graphique de mon LMDE. setxkbmapne change que lorsque je change d’utilisation.
terdon

Vraiment soigné avec une solution en une seule ligne. Merci.
Fredrik

J'ai fini par enregistrer la ligne dans un fichier .sh dans mon répertoire personnel. Puis mappé ./toggleLayout.sh à ctrl-esc
Fredrik

4

Il existe différentes réponses à des questions similaires . Cependant, aucun d'entre eux ne fonctionne correctement pour moi.

Le script suivant devrait fonctionner dans tous les cas. Cela fonctionne certainement sur mon système Debian lors du changement de disposition avec setxkbmap:

#!/bin/bash
seven=`xmodmap -pke | grep "keycode  16" | awk '{print \$5}'` 
## If this is the "us" layout
if [ $seven == "ampersand" ]; then
    setxkbmap se
else
  setxkbmap us
fi

Le script analyse la sortie de xmodmap pour voir si la disposition actuelle est "us" ou "se". Dans la disposition "us", SHIFT+ 7est mappé sur "esperluette". Si vous basculez uniquement entre les dispositions "nous" et "se", le fait d'avoir "esperluette" 7signifie que vous utilisez la disposition "nous" et que le script passera à "se". Si vous n'avez pas "esperluette" activé 7, le script passe à "nous".


4

la meilleure façon serait de ne pas utiliser de script, mais de charger un clavier à deux couches (ex :) setxmodmap "us,se"et de redéfinir le Ctrl- Escpour envoyer ISO_Next_Group

Regardez cette réponse sur xkb pour savoir comment redéfinir certaines clés sans avoir besoin de modifier les principaux fichiers par défaut (donc pas besoin d'être root). Dans le fichier de symboles locaux (par exemple:) ~/.xkb/symbols/mysymbolsmettez une petite section comme:

partial modifier_keys 
xkb_symbols "ctrl_esc_toggle" {
    key <ESC> {
        type[Group1]="PC_CONTROL_LEVEL2",
        symbols[Group1]= [ Escape,     ISO_Next_Group ]
    };
};

PC_CONTROL_LEVEL2 indique que le symbole sencond pour cette clé est obtenu avec Control (au lieu de Shift).

et dans le fichier keymap local (par exemple:; ~/.xkb/keymap/mykbdvous pouvez le créer avec setxkbmap "us,se" ; setxkbmap -print > ~/.xkb/keymap/mykbd) changez la ligne xkb_symbols pour ajouter "mysymbols (ctr_esc_toggle)" afin que vous ayez quelque chose comme:

xkb_symbols   { include "pc+us+se:2+inet(evdev)+terminate(ctrl_alt_bksp)+compose(rwin)+mysymbols(ctr_esc_toggle)"   };

(notez le "se: 2", le ": 2" indique de charger les définitions des symboles "se" en tant que Groupe2; vous pouvez empiler différents groupes).

vous pouvez maintenant le charger avec: xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY alors Ctrl-Esc bascule entre les dispositions "us" et "se".

NOTEZ cependant que vous devez appuyer sur Ctrl (et maintenir) avant Esc; dans l'autre sens, cela ne fonctionne pas (il faudrait définir un modificateur virtuel pour Escape, et je ne sais pas comment le faire)


1
À quoi leftwin+leftalt+spaceressemblerait?
Hotschke

@Hotschke, thanks{ include "pc+us+ru:2+inet(evdev)+group(win_space_toggle)" };
contributorpw
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.