Comment obtenir la disposition actuelle du clavier gnome à partir du terminal?

14

Pour une utilisation dans un script bash, j'ai besoin d'obtenir la disposition du 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 cela.

Comment puis-je obtenir ces informations?

Mise à jour:

setxkbmap -queryne fonctionne malheureusement pas. Vous trouverez ci-dessous la sortie avec la en(première commande) et la de(deuxième commande) disposition activées. Changer la disposition du clavier semble avoir une certaine relation 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

Update2:

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)" };
};
ftiaronsem
la source
Malheureusement, ce n'est pas bash, mais en utilisant libxklavier, voici un [exemple python] [1] pour faire ce que vous demandez: [1]: cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py
ballons le
1
<rant> xkb est un enfer sans papiers! Ces définitions de disposition multiples ne fonctionnent pas de manière fiable; pour moi, ils ont soudainement changé à des moments aléatoires et après la suspension, il a été déterminé au hasard laquelle des dispositions définies était en vigueur et - ce qui est pire - indépendamment pour chaque clavier connecté. Oui, xkb est en fait capable d'avoir différentes dispositions pour différents claviers mais cela n'est documenté nulle part à ma connaissance et par conséquent, la seule chose que cette fonctionnalité fait est de nous ennuyer parce que nous ne pouvons pas la contrôler. xkb, sérieusement, ne me lancez pas! </rant>
Christian

Réponses:

9

Selon une question similaire sur Stackoverflow , ce qui suit devrait faire l'affaire:

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 chez moi) ...

Izzy
la source
1
L'exécution de setxkbmap -print renvoie ce qui suit. Je ne pense pas que cela aide le PO. 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)" }; };
ballons
Vous disposez donc actuellement de la mise en page "nous"? C'est ce que la déclaration ci-dessus, compte tenu de votre entrée, produirait en sortie (uniquement ces deux lettres: "nous"). À quoi cela ressemble-t-il lorsque vous passez à une mise en page différente?
Izzy
2
Merci pour votre réponse. Malheureusement, cela ne fait pas l'affaire. Les deux fois, je nous attrape. J'ai édité ma question pour vous montrer le résultat.
ftiaronsem
valait la peine d'essayer. Vous pouvez essayer de spécifier le -vparamètre (plusieurs fois), ce qui augmente la verbosité et donne ainsi plus d'informations. Devrait fonctionner pour les deux, -queryainsi que -print. Comme je n'ai pas de configuration multilingue, je ne peux pas dire s'il fournit les détails dont vous avez besoin - mais avec une -vsortie 3 fois ici, il est divisé en "règles appliquées" et "carte de touches". Ce dernier semble être l'information complète, donc la première partie pourrait avoir la "partie actuellement active".
Izzy
merci encore, mais malheureusement cela n'a pas fonctionné non plus. La même sortie avant et après le changement de disposition. Indépendamment de la verbosité.
ftiaronsem
4

Pour Ubuntu 17.10 ou version ultérieure

Dans Ubuntu 17.10, avec GNOME, la valeur actuelle de gsettings n'est pas modifiée lorsque vous changez de source d'entrée. Au lieu de cela il y a une source de MRU- clé qui indique la m ost r écemment u sed sources d' entrée.

$ gsettings get org.gnome.desktop.input-sources mru-sources
[('xkb', 'se'), ('xkb', 'us')]

La première source de cette liste est la source actuelle, donc un oneliner pour obtenir la disposition actuelle peut 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 précédemment.

Gunnar Hjalmarsson
la source
3

Pour Ubuntu 13.04 et inférieur

Vous pouvez utiliser l' xkblayout-stateoutil. 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"

Pour Ubuntu 13.10 et supérieur

Ubuntu 13.10 a apporté de bonnes améliorations dans ce sens, et vous pouvez utiliser la fonction bash simple 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}'
Radu Rădeanu
la source
2

Appuyez simplement sur Ctrl+ Alt+ Tsur votre clavier pour ouvrir Terminal. Lorsqu'il s'ouvre, exécutez la commande ci-dessous.

setxkbmap -query

Voilà ce que vous devriez voir

entrez la description de l'image ici

Mitch
la source
merci pour votre réponse rapide, malheureusement cela ne fonctionne pas. Voici le résultat (première fois avec mise en page, deuxième avec de):
ftiaronsem
en raison du formatage collé en tant que modification de question ...
ftiaronsem
1
merci encore pour votre réponse rapide. C'est ce que je vois, mais cela ne me dit pas si j'ai choisi la mise en page allemande ou américaine. Ou ai-je raté quelque chose?
ftiaronsem
2

En utilisant le terminal, j'ai exécuté un test en changeant entre 'pt' et 'us', et après chaque changement, j'ai collecté la disposition du clavier utilisée avec succès:

Obtenez la disposition du clavier actif

setxkbmap -print | grep xkb_symbols | awk -F"+" '{print $2}'
  • Imprimez la configuration: setxkbmap -print
  • Récupérez la ligne qui compte: grep xkb_symbols
  • obtient la chaîne après le premier signe "+": awk -F"+" '{print $2}'

La sortie ayant la disposition «us» active est: us


Swith entre les dispositions

sudo setxkbmap -option grp:alt_shift_toggle pt

Passez là où il lit «pt», le code de langue vers lequel basculer.

entrez la description de l'image ici

Remarque: j'utilise Gnome sur Ubuntu 12.04 (Precise Pangolin)

Zuul
la source
Merci pour votre réponse. Le problème semble être que les utilisateurs ont tendance à basculer entre les dispositions à l'aide de l'applet de la barre des tâches. Cela fonctionne si l'on change la disposition de cmd, mais cela ne fonctionne pas, si l'utilisateur bascule avec l'applet de la barre des tâches.
ftiaronsem
@ftiaronsem, Vous n'avez pas mentionné cette partie auparavant :) Je vais l'examiner et mettre à jour ma réponse si possible!
Zuul
0

Pour Ubuntu 13.10 ou version ultérieure

(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'options:

gsettings list-recursively org.gnome.desktop.input-sources
user.dz
la source