So ändern Sie das Tastaturlayout in Gnome 3 über die Befehlszeile


15

Ich verwende Gnome 3.22.1, aber das Problem besteht seit 3.18.

Davor (ich erinnere mich nicht an die genaue Version) konnte ich das Tastaturlayout mit xkb-witch ändern , einer einfachen Anwendung, die X.org-Bindungen unter der Haube verwendet.

Wenn Sie nach 3.18 xkb-switch ausführen, wird das Tastaturlayout in gnome nicht mehr geändert. Weitere Untersuchungen haben gezeigt, dass die Layoutumschaltung funktioniert, jedoch nur für sehr kurze Zeit.

Wenn Sie dieses Skript ausführen:

for i in $(seq 1000); do
  lang=$(xkb-switch -s ru; xkb-switch);
  if [[ "$lang" == "ru" ]]; then
    echo $lang;
  fi;
done

Sie erhalten 3 bis 20 "erfolgreiche" Layoutwechsel, je nachdem, wie viel Glück Sie haben.

Nach dem googeln dieses Problems gebe ich folgenden Rat :

gsettings set org.gnome.desktop.input-sources current 0

Die Einstellung wird geändert, das Layout bleibt jedoch unverändert.

Ich habe eine "hackige" Methode gefunden, um das Layout zu ändern:

setxkbmap us,ru
setxkbmap ru,us

Die Gnome-Shell ist sich dieser Änderung jedoch nicht bewusst und zeigt im Layout-Indikator eine falsche Sprache an.

Ich habe über dieses Problem geschrieben (leider nicht genug Reputation, https: //bbs.archlinux.org/viewtopic.php? Pid = 1657582 https: //github.com/ierton/xkb-switch/issues/15), hatte aber kein glück gute antworten zu bekommen.

Und an diesem Punkt stecke ich fest. Ich bin nicht geschickt genug, um das Problem im Gnome-Shell-Code zu identifizieren. Ich bin mir nicht mal sicher, ob es das Problem (der Gnomenshell) ist.

Was ich möchte, ist eine gnomenbewusste Möglichkeit, das Tastaturlayout vom Terminal aus zu ändern. Kann mich jemand in die richtige Richtung weisen? Sollte ich dies als Fehler melden (insbesondere die Tatsache, dass das Tastaturlayout nicht über gsettings geändert werden kann)?

Antworten:


8

Da gnome-shell eine JS eval-Schnittstelle auf DBus zur Verfügung stellt, die Zugriff auf alle Variablen hat, ist dies mit dem folgenden Befehl möglich:

gdbus call --session --dest org.gnome.Shell \
--object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval \
 "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"

Welches wird 0. Layout aktivieren, und so weiter.

Anerkennung.


Und so wechseln Sie zur zuletzt verwendeten Eingabemethode (aus Kommentaren):

gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell \
--method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager()._mruSources[1].activate()"

Vielen Dank für Ihre Antwort - es hat mir viel Googeln erspart! Und so wechseln Sie zur zuletzt verwendeten Eingabemethode:gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager()._mruSources[1].activate()"
Envek

4

Wenn Sie IBus als Eingabemethode verwenden (dies ist wahrscheinlich die Standardeinstellung), können Sie Ihre Eingabe mit dem folgenden ibusBefehl ändern :

# Set the layout to US English
ibus engine xkb:us::eng
# Set the input method to Japanese Mozc IME
ibus engine mozc-jp
# Set the layout to Russian
ibus engine xkb:ru::rus

Mit dem ibus list-engineBefehl können Sie alle verfügbaren Layouts anzeigen.

Es muss beachtet werden, dass dieser Ansatz den Sprachindikator nicht ändert, obwohl er ansonsten zuverlässig funktioniert.


Das ist das Gleiche wie setxkbmap us- danach können Sie das Layout nicht mehr mit den Standardverknüpfungen ändern.
Sanmai

@sanmai Nicht ganz dasselbe - es ist unmöglich, mithilfe von zu Sprachen zu wechseln, die IME benötigen (Japanisch, Chinesisch usw.) setxkbmap. Darüber hinaus setxkbmapkann man sich in modernen WM-Umgebungen schlicht fehlerfrei verhalten, siehe dazu die Frage.
undercat unterstützt Monica

Die nicht funktionierenden Standardverknüpfungen können nicht kommentiert werden. Ich verwende benutzerdefinierte Verknüpfungen für jedes Layout, das ich verwende.
undercat unterstützt Monica

OK, nicht dasselbe, aber ich kann den Standardschalter immer noch nicht verwenden. Wie Sie vielleicht wissen, gibt es auf einer japanischen Tastatur nur so viele zusätzliche Tasten, dass ich für andere Layouts immer noch den Standardschalter verwenden muss.
Sanmai

3

Verwenden gsettings.

Wenn Sie org.gnome.desktop.input-sources.sourcesdie Null- Liste auf "[]" setzen, können Sie die X-Server- Tastaturkonfiguration verwenden, ohne dass Gnome-Shell versucht, sie zu konfigurieren, sodass Sie möglicherweise wie zuvor vorgehen können.

$ gsettings set org.gnome.desktop.input-sources sources '[]'

Als ich das versuchte, blieb mein Gnome-Terminal auf QWERTY stecken, egal wie viele setxkbmapBefehle ich später eingab, bis ich die Eingabequellen über den Einstellungsdialog zurücksetzte.
Silas S. Brown

0

Ich denke, du solltest es versuchen sudo dpkg-reconfigure keyboard-configuration


0

Sie können in der Befehlszeile eine Eingabemethode einrichten und zu dieser wechseln, auch wenn Sie diese Eingabemethode noch nicht mit der Maus eingerichtet haben:

gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'ru')]"

Verwenden Sie für Dvorak us+dvorak(oder, gb+dvorakwenn Sie in Großbritannien sind, oder was auch immer).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.