Jak zmienić układ klawiatury w gnome 3 z wiersza poleceń

15

Używam gnome 3.22.1, ale problem istnieje od 3.18.

Wcześniej (nie pamiętam dokładnej wersji) mogłem zmienić układ klawiatury za pomocą prostej aplikacji xkb-witch , która korzysta z powiązań X.org pod maską.

Po 3.18, jeśli uruchomisz przełącznik xkb, układ klawiatury nie zostanie przełączony w gnome. Dalsze dochodzenie wykazało, że zmiana układu działa, ale przez bardzo krótki czas.

Jeśli uruchomisz ten skrypt:

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

Dostaniesz od 3 do 20 „udanych” zmian układu, w zależności od tego, jakie masz szczęście.

Po przejrzeniu tego problemu korzystam z następującej porady :

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

Ustawienie jest zmieniane, ale układ pozostaje taki sam.

Znalazłem jedną „hacką” metodę zmiany układu:

setxkbmap us,ru
setxkbmap ru,us

ale powłoka gnome nie jest świadoma tej zmiany i pokazuje niewłaściwy język we wskaźniku układu.

Napisałem o tym problemie (przepraszam, za mało reputacji, https: //bbs.archlinux.org/viewtopic.php? Pid = 1657582 https: //github.com/ierton/xkb-switch/issues/15), ale nie miał szczęścia uzyskać dobrych odpowiedzi.

I w tym momencie utknąłem. Nie mam wystarczających umiejętności, aby zidentyfikować problem w kodzie powłoki gnome. Nie jestem nawet pewien, czy to jest problem (powłoki gnoma).

To, czego chcę, to sposób gnomów, aby przełączyć układ klawiatury z terminala. Czy ktoś może skierować mnie we właściwym kierunku? Czy powinienem to zgłosić jako błąd (zwłaszcza fakt, że układu klawiatury nie można zmienić za pomocą ustawień gset)?

RGBD
źródło

Odpowiedzi:

9

Ponieważ gnome-shell ujawnia interfejs JS eval na DBusie, który ma dostęp do wszystkich zmiennych, wyczyn jest możliwy za pomocą następującego polecenia:

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()"

Który aktywuje 0-ty układ i tak dalej.

Kredyt.


Oto jak przełączyć się na ostatnio używaną metodę wprowadzania (z komentarzy):

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()"
sanmai
źródło
Dziękuję za odpowiedź - zaoszczędziło mi to dużo google! Oto jak przełączyć się na ostatnio używaną metodę wprowadzania: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

Jeśli używasz IBusa jako metody wprowadzania danych (prawdopodobnie jest to ustawienie domyślne), możesz zmienić dane wejściowe za pomocą ibuspolecenia:

# 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

Możesz wyświetlić wszystkie dostępne układy za pomocą ibus list-enginepolecenia.

Należy zauważyć, że to podejście nie zmienia wskaźnika języka, chociaż działa niezawodnie w inny sposób.

undercat oklaskuje Monikę
źródło
To samo co setxkbmap us- bez możliwości zmiany układu za pomocą standardowych skrótów.
sanmai
@sanmai Niezupełnie to samo - nie można przejść na języki wymagające IME (japoński, chiński itp.) setxkbmap. Co więcej, setxkbmapmoże działać jako zwykły buggy w nowoczesnych środowiskach WM, patrz pytanie o szczegóły na ten temat.
undercat oklaskuje Monikę
Nie mogę komentować domyślnych skrótów, które nie działają - używam niestandardowych dla każdego używanego układu.
undercat oklaskuje Monikę
OK, nie to samo, ale nadal nie mogę użyć domyślnego przełącznika. Jak zapewne wiesz, na japońskiej klawiaturze jest tylko tyle dodatkowych klawiszy, dla innych układów nadal muszę używać domyślnego przełącznika.
sanmai
3

Korzystanie gsettings.

Ustawienie org.gnome.desktop.input-sources.sourcesna pustą listę, „[]”, pozwala używać konfiguracji klawiatury X serwera bez próby skonfigurowania go przez powłokę gnome , dzięki czemu można to zrobić jak poprzednio.

$ gsettings set org.gnome.desktop.input-sources sources '[]'
xae
źródło
Kiedy spróbowałem, mój terminal Gnome utknął na QWERTY bez względu na to, ile setxkbmappoleceń później wpisałem, dopóki nie przywrócę źródeł wejściowych z powrotem w oknie dialogowym Ustawienia.
Silas S. Brown
0

Myślę, że powinieneś spróbować sudo dpkg-reconfigure keyboard-configuration

Romain L.
źródło
0

Możesz skonfigurować metodę wprowadzania i przejść do niej w wierszu polecenia, nawet jeśli ta metoda wprowadzania nie była wcześniej skonfigurowana za pomocą myszy:

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

W przypadku Dvorak użyj us+dvorak(lub gb+dvorakjeśli jesteś w Wielkiej Brytanii, czy cokolwiek innego).

Silas S. Brown
źródło