Pour une utilisation dans un script bash, je dois obtenir la disposition de clavier gnome que l'utilisateur utilise actuellement. Par exemple, si l'utilisateur définit sa disposition de clavier sur en-us
, j'ai besoin d'une commande bash qui m'imprime ceci.
Comment puis-je obtenir cette information?
setxkbmap -query
ne fonctionne malheureusement pas. Vous trouverez ci-dessous la sortie avec la structure en
(première commande) et de
(seconde commande) activée. Changer la disposition du clavier semble avoir un lien avec la configuration de la session gnome
setxkbmap -query
rules: evdev
model: pc105
layout: us,de
variant: ,
options: terminate:ctrl_alt_bksp,lv3:ralt_switch,grp:alts_toggle
setxkbmap -query
rules: evdev
model: pc105
layout: us,de
variant: ,
options: terminate:ctrl_alt_bksp,lv3:ralt_switch,grp:alts_toggle
setxkbmap -print #with en-us layout
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+de:2+inet(evdev)+level3(ralt_switch_for_alts_toggle):1+level3(ralt_switch_for_alts_toggle):2+group(alts_toggle)+level3(ralt_switch)+terminate(ctrl_alt_bksp)" };
xkb_geometry { include "pc(pc105)" };
};
setxkbmap -print #after switching to german layout
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+de:2+inet(evdev)+level3(ralt_switch_for_alts_toggle):1+level3(ralt_switch_for_alts_toggle):2+group(alts_toggle)+level3(ralt_switch)+terminate(ctrl_alt_bksp)" };
xkb_geometry { include "pc(pc105)" };
};
Selon une question similaire sur Stackoverflow , ce qui suit devrait suffire:
setxkbmap -print | grep xkb_symbols | awk '{print $4}' | awk -F"+" '{print $2}'
Je n'ai pas pu le vérifier car je n'ai actuellement pas de * machine Nix avec X disponible (je ne suis pas à la maison) ...
Dans Ubuntu 17.10, avec GNOME, la valeur de gsettings actuelle n'est pas modifiée lorsque vous changez de source d'entrée. Au lieu de cela, il existe une clé mru-sources qui répertorie le m ost r de manière récente sources d'entrée sed.
$ gsettings get org.gnome.desktop.input-sources mru-sources
[('xkb', 'se'), ('xkb', 'us')]
La première source de cette liste est la source actuelle. Un programme en ligne permettant d’obtenir la présentation actuelle peut alors ressembler à ceci:
gsettings get org.gnome.desktop.input-sources mru-sources | sed -r "s/\S*\s'([^']+).*/\1/"
Veuillez noter que cette réponse ne s'applique pas si vous utilisez Unity sur un système Ubuntu 17.10. Avec Unity, il continue de fonctionner comme avant.
Vous pouvez utiliser xkblayout-state
tool. Voir le fichier README.md pour la description, la compilation, l’installation et l’utilisation.
La commande suivante fera exactement ce que vous voulez:
xkblayout-state print "%s"
Ubuntu 13.10 a apporté de bonnes améliorations dans ce sens, et vous pouvez utiliser la fonction bash suivante:
get_current_xkblayout () {
current_input_nr=$(gsettings get org.gnome.desktop.input-sources current | \
awk '{ print $NF }')
shift=$(( 2 * ( $current_input_nr + 1 )))
gsettings get org.gnome.desktop.input-sources sources | tr -d "\',[]()" | \
awk -v cur="$shift" '{ print $cur }'
}
Les commandes suivantes fonctionnent également dans 13.10:
setxkbmap -query | awk -F"(,|[ ]+)" '/layout:/ { print $2 }'
ou:
setxkbmap -print | awk -F"+" '/xkb_symbols/ {print $2}'
À l'aide du terminal, j'ai effectué un test en alternant 'pt' et 'nous', et après chaque modification, j'ai collecté avec succès la disposition de clavier utilisée:
Obtenir la disposition du clavier actif
setxkbmap -print | grep xkb_symbols | awk -F"+" '{print $2}'
setxkbmap -print
grep xkb_symbols
awk -F"+" '{print $2}'
La sortie dont la disposition 'us' est active est la suivante: us
name__
entre les mises en page
Sudo setxkbmap -option grp:alt_shift_toggle pt
Passez où il lit 'pt', le code de langue vers lequel basculer.
Note: J'utilise Gnome sur Ubuntu 12.04 (Pangolin précis)
Appuyez simplement sur Ctrl+Alt+T sur votre clavier pour ouvrir Terminal. Quand il s'ouvre, lancez la commande ci-dessous.
setxkbmap -query
C'est ce que vous devriez voir
(Je ne sais pas si cela fonctionne dans les versions précédentes)
current_layout=gsettings get org.gnome.desktop.input-sources current | awk '{print $2}'
gsettings get org.gnome.desktop.input-sources sources | grep -Po "'[[:alpha:]]+'\)" | sed -ne "s/['|)]//g;$(($current_layout+1))p"
Pour voir plus d'option:
gsettings list-recursively org.gnome.desktop.input-sources