Come cambiare il layout della tastiera in gnome 3 dalla riga di comando


15

Sto usando GNOME 3.22.1 ma il problema esiste dal 3.18.

Prima di allora (non ricordo la versione esatta) sono stato in grado di cambiare il layout della tastiera usando xkb-witch , una semplice applicazione che utilizza i collegamenti X.org sotto il cofano.

Dopo 3.18 se si esegue xkb-switch, il layout della tastiera non verrà cambiato in gnome. Ulteriori indagini hanno dimostrato che il cambio di layout funziona, ma per un periodo di tempo molto breve.

Se esegui questo script:

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

Otterrai da 3 a 20 cambi di layout "riusciti", a seconda di quanto sei fortunato.

Dopo aver cercato su Google questo problema, ho il seguente consiglio :

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

L'impostazione è stata modificata, ma il layout rimane lo stesso.

Ho trovato un metodo "hacky" per modificare il layout:

setxkbmap us,ru
setxkbmap ru,us

ma la shell gnome non è a conoscenza di quel cambiamento e mostra un linguaggio errato nell'indicatore di layout.

Ho pubblicato questo problema (scusate, non abbastanza reputazione, https: //bbs.archlinux.org/viewtopic.php? Pid = 1657582 https: //github.com/ierton/xkb-switch/issues/15), ma non ho avuto fortuna a ottenere buone risposte.

E a questo punto sono bloccato. Non sono abbastanza esperto per identificare il problema nel codice della shell di gnome. Non sono nemmeno sicuro che sia il problema di (gnome shell).

Quello che voglio è un modo consapevole degli gnomi per cambiare layout di tastiera dal terminale. Qualcuno può indicarmi la giusta direzione? Devo presentare questo come un bug (in particolare il fatto che il layout della tastiera non può essere modificato tramite gsettings)?

Risposte:


9

Poiché gnome-shell espone un'interfaccia JS eval su DBus che ha accesso a tutte le variabili, l'impresa è possibile con il seguente 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()"

Che attiverà il layout 0 e così via.

Credito.


Ed ecco come passare all'ultimo metodo di input utilizzato (dai commenti):

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

Grazie per la tua risposta: mi ha risparmiato un sacco di ricerche su Google! Ecco come passare all'ultimo metodo di input utilizzato: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 si sta utilizzando IBus come metodo di input (che è probabilmente un valore predefinito), è possibile modificare l'input utilizzando il 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

Puoi vedere tutti i layout disponibili con il ibus list-enginecomando.

Va notato che questo approccio non cambia l'indicatore della lingua, sebbene altrimenti funzioni in modo affidabile.


È lo stesso di setxkbmap us- senza alcun modo di cambiare layout usando le scorciatoie standard dopo.
sanmai,

@sanmai Non è la stessa cosa: è impossibile passare a lingue che necessitano di IME (giapponese, cinese, ecc.) setxkbmap. Inoltre, setxkbmappuò agire senza problemi nei moderni ambienti WM, vedere la domanda per i dettagli al riguardo.
undercat applaude Monica il

Non posso commentare le scorciatoie predefinite che non funzionano però - sto usando quelle personalizzate per ogni layout che uso.
undercat applaude Monica il

OK, non è lo stesso, ma non riesco ancora a utilizzare l'opzione predefinita. Come forse saprai, ci sono solo tanti tasti extra su una tastiera giapponese, per altri layout devo ancora usare l'opzione predefinita.
sanmai,

3

Usando gsettings.

Impostazione org.gnome.desktop.input-sources.sourcesal nulla lista, "[]", consente di utilizzare il server X configurazione della tastiera senza gnome-shell cercando di configurarlo, così si potrebbe essere in grado di fare come prima.

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

Quando l'ho provato, il mio terminale Gnome si è bloccato su QWERTY, indipendentemente da quanti setxkbmapcomandi ho digitato in seguito, fino a quando non ho ripristinato le fonti di input tramite la finestra di dialogo Impostazioni.
Silas S. Brown,

0

Penso che dovresti provare sudo dpkg-reconfigure keyboard-configuration


0

Puoi impostare e passare a un metodo di input dalla riga di comando anche se non hai impostato in precedenza quel metodo di input con il mouse:

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

Per Dvorak, usa us+dvorak(o gb+dvorakse sei nel Regno Unito o altro).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.