Je me demande s'il existe un outil en ligne de commande qui renvoie la disposition actuelle du clavier.
J'ai XkbLayout
réglé sur us, ru
.
Mise à jour:setxkbmap
renvoie les paramètres de mise en page, pas la mise en page sélectionnée. Par exemple.:
$ setxkbmap -print | grep xkb_symbols
xkb_symbols { include "pc+us+ru:2+inet(evdev)+capslock(grouplock)+terminate(ctrl_alt_bksp)" };
Il retournera le même résultat, quelle que soit la disposition actuelle.
Peut-être que cela dépend de la version, mais sur ma machine qui utilise setxkbmap
1.3.0, la commande suivante fonctionne:
setxkbmap -query | grep layout
Notez qu'en fonction de vos besoins, il peut être inutile de ne connaître que la mise en page: par exemple, la variante Dvorak de la mise en page américaine est assez différente de la QWERTY par défaut. Le -query
l'option de setxkbmap
donne à la fois la disposition et la variante, sous forme de champs différents:
$ setxkbmap -query
rules: evdev
model: default
layout: fr
variant: bepo
options: grp:alt_shift_toggle
Il y a xkb-switch qui est décrit ainsi:
xkb-switch est un programme C++ qui permet d'interroger et de modifier l'état de mise en page XKB.
https://github.com/ierton/xkb-switch
Ou, suivant la suggestion de nozimica, vous pouvez utiliser:
setxkbmap -print | awk -F"+" '/xkb_symbols/ {print $2}'
À partir de ce fil sur les cartes Arch Linux: https://bbs.archlinux.org/viewtopic.php?pid=539406
Oui LÀ IS un outil en ligne de commande qui fait ce que vous voulez! Je l'ai découvert il y a 10min :)
Regardez ici: https://github.com/nonpop/xkblayout-state
xkblayout-state print "%s"
fait exactement ce que vous voulez (il ne produit pas de fin de ligne, alors ajoutez ; echo
si tu as besoin). exécutez l'outil sans paramètres pour l'aide.
Utilisez ceci pour obtenir le code de la mise en page actuelle:
$(xset -q|grep LED| awk '{ print $10 }')
Cela pourrait devoir être converti en un formulaire que vous souhaitez, comme:
case "$(xset -q|grep LED| awk '{ print $10 }')" in
"00000002") KBD="English" ;;
"00001002") KBD="Thai" ;;
*) KBD="unknown" ;;
esac
Une autre approche plus simple, en raison des positions fixes de la sortie du xset -q
commande, est-ce:
xset -q | grep -A 0 'LED' | cut -c59-67
Il imprime 00000002
ou 00001002
en fonction de la disposition actuelle de votre clavier.
Sur les systèmes plus récents, vous pouvez utiliser
localectl status
Il vous montrera par exemple les éléments suivants:
System Locale: LANG=en_US.UTF-8
VC Keymap: us
X11 Layout: us
Jusqu'à présent, les réponses n'ont pas fonctionné pour moi. J'utilise setkbmap
avec deux mises en page anglais et tchèque donc tout -print
ou -query
renverra toujours les deux. Grepping l'état de la LED pour xset -q
ne fonctionne pas non plus puisque celui-ci affiche l'état de toutes les leds du clavier.
Le mieux jusqu'à présent était d'écrire rapidement ce petit utilitaire: https://Gist.github.com/fikovnik/ef428e82a26774280c4fdf8f96ce8eeb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/XKBlib.h>
#include <X11/extensions/XKBrules.h>
int main(int argc, char **argv) {
Display *dpy = XOpenDisplay(NULL);
if (dpy == NULL) {
fprintf(stderr, "Cannot open display\n");
exit(1);
}
XkbStateRec state;
XkbGetState(dpy, XkbUseCoreKbd, &state);
XkbDescPtr desc = XkbGetKeyboard(dpy, XkbAllComponentsMask, XkbUseCoreKbd);
char *group = XGetAtomName(dpy, desc->names->groups[state.group]);
printf("Full name: %s\n", group);
XkbRF_VarDefsRec vd;
XkbRF_GetNamesProp(dpy, NULL, &vd);
char *tok = strtok(vd.layout, ",");
for (int i = 0; i < state.group; i++) {
tok = strtok(NULL, ",");
if (tok == NULL) {
return 1;
}
}
printf("Layout name: %s\n", tok);
return 0;
}
et compiler en utilisant
gcc -I/usr/include getxkblayout.c -lX11 -lxkbfile
De Goosfrabaa sur les forums Arch Linux :
setxkbmap -v | awk -F "+" '/symbols/ {print $2}'
Cela fonctionne correctement ici et imprime us(dvorak-intl)
(affiché comme "USA Dvorak international" dans le menu de sélection du clavier GNOME).
Réponse partielle: sous KDE, vous pouvez apparemment obtenir la disposition actuelle du clavier via la commande qdbus
:
$ qdbus org.kde.keyboard /Layouts getCurrentLayout
gb(intl)
J'ai plusieurs dispositions configurées, mais elle ne montre que celle qui est actuellement utilisée.
Testé sur Kubuntu 18.04 (qdbus version 4.8.7). Il peut y avoir d'autres solutions basées sur d-bus pour les environnements non-Qt, mais je ne les connais pas.
#! /bin/bash
# (GPL3+) Alberto Salvia Novella (es20490446e)
keyboardLayout () {
layout=$(variableInFile "KEYMAP" "/etc/vconsole.conf")
echo ${layout}
}
variableInFile () {
variable=${1}
file=${2}
source ${file}
eval value=\$\{${variable}\}
echo ${value}
}
keyboardLayout