Wie bekomme ich das aktuelle gnome Tastaturlayout vom Terminal?

9

Zur Verwendung in einem Bash-Skript muss ich das Gnome-Tastaturlayout aufrufen, das der Benutzer gerade verwendet. Zum Beispiel, wenn der Benutzer sein Tastaturlayout auf en-us setzt, brauche ich einen Bash-Befehl, der mir das ausgibt.

Wie kann ich diese Informationen bekommen?

Aktualisierung:

setxkbmap -query funktioniert leider nicht. Unten ist der Ausgang mit dem en (erster Befehl) und dem de (zweiter Befehl) Layout aktiviert. Das Wechseln des Tastaturlayouts scheint eine gewisse Beziehung zur gnome-Sitzungskonfiguration zu haben.

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 25.06.2012, 19:50

6 Antworten

9

Nach einer ähnlichen Frage auf Stackoverflow , sollte das folgende tun:

setxkbmap -print | grep xkb_symbols | awk '{print }' | awk -F"+" '{print }'

Ich konnte es nicht verifizieren, da ich momentan keine * nix-Maschine mit X zur Verfügung habe (ich bin nicht zuhause) ...

    
Izzy 02.07.2012 15:14
3

Für Ubuntu 13.04 und niedriger

Sie können das Tool xkblayout-state verwenden. In der Datei README.md finden Sie Beschreibung, Kompilierung, Installation und Verwendung.

Der folgende Befehl wird genau das tun, was Sie wollen:

xkblayout-state print "%s"

Für Ubuntu 13.10 und höher

Ubuntu 13.10 brachte in diesem Sinne einige gute Verbesserungen mit sich, und Sie können die folgende einfache Bash-Funktion verwenden:

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 }'
}

Die folgenden Befehle funktionieren auch in 13.10:

setxkbmap -query | awk -F"(,|[ ]+)" '/layout:/ { print  }'

oder:

setxkbmap -print | awk -F"+" '/xkb_symbols/ {print }'
    
Radu Rădeanu 01.11.2013 08:28
2

Drücken Sie einfach Strg + Alt + T auf Ihrer Tastatur, um Terminal zu öffnen. Wenn es geöffnet wird, führen Sie den folgenden Befehl aus.

setxkbmap -query

Das sollten Sie sehen

    
Mitch 25.06.2012 20:14
2

Mit dem Terminal habe ich einen Test zwischen 'pt' und 'uns' gemacht, und nach jeder Änderung habe ich das Tastaturlayout mit Erfolg gesammelt:

Ruft das aktive Tastaturlayout ab

setxkbmap -print | grep xkb_symbols | awk -F"+" '{print }'
  • Drucken Sie die Konfiguration: setxkbmap -print
  • Sammeln Sie die relevante Zeile: grep xkb_symbols
  • erhält die Zeichenkette nach dem ersten "+" Zeichen: awk -F"+" '{print }'

Die Ausgabe mit dem Layout 'us' ist: us

Wechsel zwischen Layouts

sudo setxkbmap -option grp:alt_shift_toggle pt

Übergeben Sie, wo es 'pt' liest, den Sprachcode, zu dem gewechselt werden soll.

Hinweis: Ich benutze Gnome unter Ubuntu 12.04 (Precise Pangolin)

    
Zuul 02.07.2012 19:44
1

Für Ubuntu 17.10 oder später

In Ubuntu 17.10, mit GNOME, wird der aktuelle gsettings-Wert nicht geändert, wenn Sie die Eingabequelle wechseln. Stattdessen gibt es eine mru-sources Taste, die die m ost r alten u sed Eingangsquellen auflistet.

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

Die erste Quelle in dieser Liste ist die aktuelle, also könnte ein oneliner, um das aktuelle Layout zu erhalten, so aussehen:

gsettings get org.gnome.desktop.input-sources mru-sources | sed -r "s/\S*\s'([^']+).*//"

Bitte beachten Sie, dass diese Antwort nicht gilt, wenn Sie Unity auf einem Ubuntu 17.10-System verwenden. Mit Unity funktioniert es wie bisher.

    
Gunnar Hjalmarsson 06.11.2017 01:30
0

Für Ubuntu 13.10 oder später

(Nicht sicher, ob es in früheren Versionen funktioniert)

current_layout=gsettings get org.gnome.desktop.input-sources current | awk '{print }'
gsettings get org.gnome.desktop.input-sources sources | grep -Po "'[[:alpha:]]+'\)" | sed -ne "s/['|)]//g;$(($current_layout+1))p"

Um mehr Optionen zu sehen:

gsettings list-recursively org.gnome.desktop.input-sources
    
user.dz 01.02.2014 14:36

Tags und Links