Вопрос или проблема
Когда я пытаюсь выполнить команду в терминале, всё работает нормально, но если я запускаю команду в bash-скрипте, появляется ошибка:
ibus_bus_set_global_engine: утверждение ‘IBUS_IS_BUS (bus)’ не выполнено
Работает – выполняйте команду в терминале
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export XKB_DEFAULT_LAYOUT=kr
ibus-daemon -drx
ibus engine hangul
Не работает: запуск bash-скрипта: change-keyboard.sh
#change-keyboard.sh
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export XKB_DEFAULT_LAYOUT=kr
ibus-daemon -drx
ibus engine hangul
Ответ или решение
Ошибка ibus_bus_set_global_engine: assertion 'IBUS_IS_BUS (bus)' failed
возникает, когда вы пытаетесь установить глобальный механизм ввода (имя движка) при том, что служба IBus (Input Bus) не запущена или не работает корректно. Ваша ситуация, когда команда работает в терминале, но выдает ошибку при запуске из скрипта, может быть связана с различиями в окружении при интерактивном и скриптовом запуске.
Вот шаги, которые помогут решить вашу проблему:
-
Убедитесь, что ibus-daemon запущен перед вызовом ibus engine. В скрипте необходимо ждать, пока ibus-daemon полностью инициализируется, прежде чем вызывать команду ibus engine. Для этого вы можете добавить небольшую паузу.
-
Измените порядок команд. Запуск ibus-daemon должен происходить в фоновом режиме, а затем вам нужно подождать, чтобы убедиться, что сервис полностью инициализирован.
-
Проверьте окружение. Убедитесь, что переменные окружения устанавливаются корректно и применяются.
Вот исправленный вариант вашего скрипта change-keyboard.sh
:
#!/bin/bash
# Установка переменных окружения
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export XKB_DEFAULT_LAYOUT=kr
# Запуск ibus-daemon в фоновом режиме
ibus-daemon -drx &
# Ожидание инициализации ibus
sleep 1
# Установка механизма ввода
ibus engine hangul
Пояснения к изменениям:
&
в конце командыibus-daemon -drx &
позволяет запустить демона в фоновом режиме, чтобы остальные команды могли выполняться, не дожидаясь его завершения.- Команда
sleep 1
ставит паузу в 1 секунду, что дает возможность IBus полноценно инициализироваться. Вы можете увеличить время ожидания, если заметите, что этого недостаточно.
Дополнительные рекомендации:
- Убедитесь, что скрипт имеет права на выполнение. Вы можете установить их с помощью команды:
chmod +x change-keyboard.sh
- Если ошибка продолжает возникать, попробуйте запустить скрипт из терминала
bash
, чтобы увидеть возможные сообщения об ошибках:bash change-keyboard.sh
Если выполните все шаги выше, ваша проблема должна решиться.