Я хочу ввести корейский язык в электронном приложении Ubuntu 18.04.

Когда электронное приложение запускается на терминале с помощью yarn start , ввод корейского языка работает хорошо через ibus .

Но когда он запускается systemctl, ввод корейского языка не работает.

Есть ли настройки среды для метода ввода службы systemctl?

Сервис systemctl следующий.

[Unit]
After=multi-user.target

[Service]
User=my
Type=idle
WorkingDirectory=/home/my/electonapp
ExecStart=/usr/bin/yarn start
Restart=always
Environment=DISPLAY=:0.0
RestartSec=30

[Install]
WantedBy=multi-user.target

1 ответ1

0

Да, вам не хватает многих переменных среды. Это ожидаемый результат, так как "глобальные" (общесистемные) системные модули .service предназначены для запуска фоновых служб и явно не предназначены для приложений X11 (или чего-либо, что требует нахождения "внутри" определенного пользовательского сеанса).

  • Например, XDG_RUNTIME_DIR теперь требуется во многих графических приложениях, поскольку содержит сокеты IPC различных демонов сеансов.

  • IBus, вероятно, требует D-Bus, который может быть покрыт XDG_RUNTIME_DIR в средах "пользовательского сеанса", но может также потребоваться DBUS_SESSION_BUS_ADDRESS в "традиционных" сеансах.

  • А самой программе может потребоваться использовать IBus через GTK_IM_MODULE или XMODIFIERS.

Для запуска программы при входе пользователя в систему сначала подумайте, будет ли работать простой ~/.config/autostart/ . Если вам конкретно нужна функциональность systemd, проверьте, используется ли systemd --user вашим дистрибутивом (он существует почти во всех из них, кроме CentOS).

Если у вас запущен systemd --user , вы можете использовать его для запуска и управления вашим приложением:

  1. Если в вашем дистрибутиве есть пакет dbus-user-session , установите его. После перезагрузки ваш $ DBUS_SESSION_BUS_ADDRESS должен измениться на «unix:path =/run/user/… /bus».

  2. Преобразуйте ваш .service в пользовательский модуль по адресу ~/.config/systemd/user/myapp.service:

    [Service] Тип = простой WorkingDirectory =/home /my /electonapp ExecStart =/usr /bin /yarn start Restart = всегда RestartSec = 30
    

    Там нет User =, так как все ваши юниты работают под вашей собственной учетной записью.

    Обратите внимание, что в этом примере нет раздела [Install] , так как даже systemd --user пока не имеет соответствующей цели .target для этого. (У него есть default.target, но на самом деле он запускается во время входа в систему, прежде чем станет доступен X11.) Поэтому его нужно будет запускать другим способом.

  3. Измените сценарии запуска X11, чтобы выполнить следующие команды:

    systemctl --user import-environment
    systemctl --user start myapp.service
    

    Обратите внимание, что многие дистрибутивы уже вызывают import-environment автоматически, поэтому обычно все, что вам нужно, это команда start .

    Например, вы можете создать ~/.config/autostart/systemd-myapp.desktop с помощью:

    [Desktop Entry] Тип = Приложение Exec = systemctl --user start myapp
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .