Como alterar o layout do teclado no gnome 3 na linha de comando

15

Estou usando o gnome 3.22.1, mas o problema existe desde a 3.18.

Antes disso (não lembro a versão exata), pude mudar o layout do teclado usando o xkb-witch , aplicativo simples que usa as ligações do X.org por baixo do capô.

Após a versão 3.18, se você executar o xkb-switch, o layout do teclado não será alterado no gnome. Investigações posteriores mostraram que a troca de layout está funcionando, mas por um período muito curto.

Se você executar este script:

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

Você terá de 3 a 20 trocas de layout "bem-sucedidas", dependendo da sua sorte.

Depois de pesquisar esse problema no Google, siga os seguintes conselhos :

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

A configuração está sendo alterada, mas o layout permanece o mesmo.

Eu encontrei um método "hacky" para alterar o layout:

setxkbmap us,ru
setxkbmap ru,us

mas o shell do gnome não está ciente dessa alteração e mostra o idioma errado no indicador de layout.

Eu postei sobre esse problema (desculpe, não há reputação suficiente, https: //bbs.archlinux.org/viewtopic.php? Pid = 1657582 https: //github.com/ierton/xkb-switch/issues/15), mas não teve sorte em obter boas respostas.

E neste momento estou preso. Eu não sou habilitado o suficiente para identificar o problema no código shell do gnome. Eu nem tenho certeza de que é o problema (do shell do gnomo).

O que eu quero é uma maneira sensível ao gnomo de mudar o layout do teclado do terminal. Alguém pode me apontar na direção certa? Devo arquivar isso como um bug (especialmente o fato de que o layout do teclado não pode ser alterado por meio de gsettings)?

RGBD
fonte

Respostas:

8

Como o gnome-shell expõe uma interface JS eval no DBus que tem acesso a todas as variáveis, o talento é possível com o seguinte comando:

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

O que ativará o 0º layout, e assim por diante.

Crédito.


E é assim que mudar para o último método de entrada usado (dos comentários):

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
fonte
Obrigado pela sua resposta - isso me salvou muito no Google! E é assim que mudar para o último método de entrada usado: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

Se você estiver usando o IBus como seu método de entrada (que é provavelmente o padrão), poderá alterar sua entrada usando o ibuscomando:

# 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

Você pode ver todos os layouts disponíveis com o ibus list-enginecomando

Deve-se notar que essa abordagem não altera o indicador de idioma, embora funcione de maneira confiável de outra maneira.

undercat aplaude Monica
fonte
É o mesmo que setxkbmap us- sem maneira de alterar o layout usando atalhos padrão depois disso.
sanmai
@sanmai Não é o mesmo - é impossível mudar para idiomas que precisam do IME (japonês, chinês, etc) setxkbmap. Além disso, setxkbmappode atuar de maneira simples em ambientes WM modernos, consulte a pergunta para obter detalhes sobre isso.
undercat aplaude Monica
Não posso comentar se os atalhos padrão não estão funcionando - estou usando os personalizados para todos os layouts que uso.
undercat aplaude Monica
OK, não é o mesmo, mas ainda não consigo usar a opção padrão. Como você deve saber, há apenas tantas teclas extras em um teclado japonês; para outros layouts, ainda preciso usar a opção padrão.
sanmai
3

Usando gsettings.

Definir org.gnome.desktop.input-sources.sourcesa lista nula , "[]", permite usar a configuração do teclado do servidor X sem o gnome-shell tentar configurá-la, para que você possa fazer como antes.

$ gsettings set org.gnome.desktop.input-sources sources '[]'
xae
fonte
Quando tentei isso, meu terminal Gnome ficou preso no QWERTY, não importa quantos setxkbmapcomandos digitei depois, até colocar as fontes de entrada de volta na caixa de diálogo Configurações.
Silas S. Brown
0

Eu acho que você deveria tentar sudo dpkg-reconfigure keyboard-configuration

Romain L.
fonte
0

Você pode configurar e alternar para um método de entrada na linha de comando, mesmo se você não tiver configurado anteriormente esse método de entrada com o mouse:

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

Para Dvorak, use us+dvorak(ou gb+dvorakse você estiver no Reino Unido ou o que for).

Silas S. Brown
fonte