Як змінити розкладку клавіатури в gnome 3 з командного рядка


15

Я використовую gnome 3.22.1, але проблема існує з 3.18.

До цього (не пам'ятаю точну версію) мені вдалося переключити розкладку клавіатури за допомогою xkb-witch , простого додатка, який використовує прив'язки X.org під кришкою.

Після 3.18, якщо ви запустите xkb-switch, розкладка клавіатури не буде переключена в gnome. Подальше дослідження показало, що комутація макетів працює, але за дуже короткий час.

Якщо ви запускаєте цей сценарій:

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

Ви отримаєте від 3 до 20 "успішних" комутацій компонувань, залежно від того, наскільки вам пощастило.

Після поглиблення цієї проблеми я наступну пораду :

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

Налаштування змінюється, але макет залишається таким же.

Я знайшов один "хакі" спосіб змінити макет:

setxkbmap us,ru
setxkbmap ru,us

але оболонка gnome не знає про цю зміну і показує неправильну мову в індикаторі компонування.

Я публікував про цю проблему (вибачте, недостатньо репутації, https: //bbs.archlinux.org/viewtopic.php? Pid = 1657582 https: //github.com/ierton/xkb-switch/isissue/15), але не пощастило отримати хороших відповідей.

І в цей момент я застряг. Я недостатньо кваліфікований, щоб визначити проблему в коді оболонки gnome. Я навіть не впевнений, що це проблема (оболонка гнома).

Що я хочу - це спосіб, який знає gnome, щоб переключити розкладку клавіатури з терміналу. Чи може хтось вказати мені в правильному напрямку? Чи слід подавати це як помилку (особливо той факт, що розкладку клавіатури неможливо змінити через gsettings)?

Відповіді:


9

Оскільки gnome-shell відкриває інтерфейс JS eval в DBus, який має доступ до всіх змінних, подвиг можливий за допомогою наступної команди:

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

Який активує 0 макет тощо.

Кредит.


Ось як перейти на останній використаний метод введення (з коментарів):

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

Дякую за вашу відповідь - це врятувало мене дуже багато в гуглі! І ось як перейти на останній використаний метод введення: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()"
Енвек

4

Якщо ви використовуєте IBus в якості методу введення (який, ймовірно, за замовчуванням), ви можете змінити свої дані за допомогою ibusкоманди:

# 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

Ви можете побачити всі доступні макети з ibus list-engineкомандою.

Слід зазначити, що такий підхід не змінює мовного показника, хоча інакше працює надійно.


Це те саме, що setxkbmap us- після цього немає можливості змінити макет за допомогою стандартних ярликів після цього.
sanmai

@sanmai Не зовсім те саме - неможливо перейти на мови, які потребують використання IME (японська, китайська тощо) setxkbmap. Крім того, чи setxkbmapможна поводитись з простою помилкою в сучасних умовах використання WM, детальну інформацію про це див. У питанні.
undercat аплодує Моніці

Не можу коментувати, що ярлики за замовчуванням не працюють - я використовую спеціальні для кожного макета, який я використовую.
Undercat аплодує Моніці

Гаразд, не те саме, але все ж не можу використовувати перемикач за замовчуванням. Як ви, можливо, знаєте, на японській клавіатурі є лише стільки додаткових клавіш, для інших макетів я все ще повинен використовувати перемикач за замовчуванням.
sanmai

3

Використання gsettings.

Встановлення org.gnome.desktop.input-sources.sourcesдо списку нулів , "[]", дозволяє використовувати конфігурацію клавіатури X сервера без gnome-shell, що намагається налаштувати її, так що ви могли б зробити так, як раніше.

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

Коли я спробував це, мій термінал Gnome застряг на QWERTY незалежно від того, скільки setxkbmapкоманд я набрав після цього, поки я не повернув джерела введення назад через діалог Налаштування.
Silas S. Brown


0

Ви можете налаштувати та перейти на метод введення в командному рядку, навіть якщо ви раніше не встановлювали цей метод введення за допомогою миші:

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

Для Dvorak використовуйте us+dvorak(або gb+dvorakякщо ви перебуваєте у Великобританії, чи будь-що інше).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.