Cómo cambiar la distribución del teclado en gnome 3 desde la línea de comandos

15

Estoy usando gnome 3.22.1 pero el problema existe desde 3.18.

Antes de eso (no recuerdo la versión exacta) pude cambiar la distribución del teclado usando xkb-witch , una aplicación simple que usa enlaces X.org debajo del capó.

Después de 3.18 si ejecuta xkb-switch, la distribución del teclado no se cambiará en gnome. Investigaciones posteriores han demostrado que el cambio de diseño funciona, pero por un período de tiempo muy corto.

Si ejecuta este script:

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

Obtendrá de 3 a 20 cambios de diseño "exitosos", dependiendo de la suerte que tenga.

Después de buscar en Google este problema, el siguiente consejo :

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

Se está cambiando la configuración, pero el diseño permanece igual.

He encontrado un método "hacky" para cambiar el diseño:

setxkbmap us,ru
setxkbmap ru,us

pero el shell gnome no es consciente de ese cambio y muestra un lenguaje incorrecto en el indicador de diseño.

He publicado sobre este problema (lo siento, no hay suficiente reputación, https: //bbs.archlinux.org/viewtopic.php? Pid = 1657582 https: //github.com/ierton/xkb-switch/issues/15), pero no tuve suerte de obtener buenas respuestas.

Y en este punto estoy atascado. No tengo la habilidad suficiente para identificar el problema en el código de shell gnome. Ni siquiera estoy seguro de que sea el problema (del gnome shell).

Lo que quiero es una forma consciente de gnome para cambiar la distribución del teclado desde la terminal. ¿Alguien me puede apuntar en la dirección correcta? ¿Debo presentar esto como un error (especialmente el hecho de que la distribución del teclado no se puede cambiar a través de gsettings)?

RGBD
fuente

Respuestas:

9

Dado que gnome-shell expone una interfaz de evaluación JS en DBus que tiene acceso a todas las variables, la hazaña es posible con el siguiente 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()"

Lo cual activará el diseño 0, y así sucesivamente.

Crédito.


Y así es como cambiar al último método de entrada utilizado (de los comentarios):

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
fuente
Gracias por tu respuesta, ¡me ahorró mucho googlear! Y esta es la forma de cambiar al último método de entrada utilizado: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

Si está utilizando IBus como su método de entrada (que es un valor predeterminado probable), puede cambiar su entrada usando el 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

Puede ver todos los diseños disponibles con el ibus list-engine comando.

Cabe señalar que este enfoque no cambia el indicador de idioma, aunque de lo contrario funciona de manera confiable.

undercat aplaude a Monica
fuente
Es lo mismo que setxkbmap us, sin forma de cambiar el diseño utilizando accesos directos estándar después de eso.
sanmai
@sanmai No es lo mismo: es imposible cambiar a idiomas que necesitan IME (japonés, chino, etc.) usando setxkbmap. Además, setxkbmappuede actuar con errores en entornos WM modernos, consulte la pregunta para obtener más detalles al respecto.
Undercat aplaude a Monica el
Sin embargo, no puedo comentar sobre los accesos directos predeterminados: estoy usando los personalizados para cada diseño que uso.
Undercat aplaude a Monica el
OK, no es lo mismo, pero aún así no puedo usar el interruptor predeterminado. Como sabrán, solo hay tantas teclas adicionales en un teclado japonés, para otros diseños todavía tengo que usar el interruptor predeterminado.
sanmai
3

Utilizando gsettings.

Establecer org.gnome.desktop.input-sources.sourcesla lista nula , "[]", le permite usar la configuración del teclado del servidor X sin que gnome-shell intente configurarla, para que pueda hacerlo como antes.

$ gsettings set org.gnome.desktop.input-sources sources '[]'
xae
fuente
Cuando probé esto, mi Terminal Gnome se atascó en QWERTY sin importar cuántos setxkbmapcomandos escribí después, hasta que volví a colocar las fuentes de entrada a través del diálogo Configuración.
Silas S. Brown
0

Creo que deberías intentarlo sudo dpkg-reconfigure keyboard-configuration

Romain L.
fuente
0

Puede configurar y cambiar a un método de entrada en la línea de comando incluso si no ha configurado previamente ese método de entrada con el mouse:

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

Para Dvorak, use us+dvorak(o gb+dvoraksi está en el Reino Unido, o lo que sea).

Silas S. Brown
fuente