systemctl 输入法设置

systemctl 输入法设置

我想在 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

是的,你缺少了很多环境变量。这是预期的结果,因为“全局”(系统范围)systemd .service 单元旨在启动后台服务并且明确不适用于 X11 应用程序(或任何需要“位于”特定用户会话内部的应用程序)。

  • 例如,许多图形应用程序现在都需要 XDG_RUNTIME_DIR,因为它包含各种会话守护进程的 IPC 套接字。

  • IBus 可能需要 D-Bus,它可能在“用户会话”环境中被 XDG_RUNTIME_DIR 覆盖,但在“传统”会话中也可能需要 DBUS_SESSION_BUS_ADDRESS。

  • 并且程序本身可能需要通过 GTK_IM_MODULE 或 XMODIFIERS 告知使用 IBus。

对于在用户登录时启动程序,首先考虑简单是否~/.config/autostart/可以完成工作。如果你特别需要 systemd 功能,请检查是否systemd --用户由您的发行版使用(除了 CentOS 以外,它几乎存在于所有发行版中)。

如果你有systemd --用户正在运行,您可以使用它来启动和管理您的应用程序:

  1. 如果你的发行版有dbus-用户会话软件包,安装它。重启后,您的 $DBUS_SESSION_BUS_ADDRESS 应该更改为“unix:path=/run/user/…/bus”。

  2. 将您的 .service 转换为“用户”单元~/.config/systemd/user/myapp.service

    [服务]
    类型=简单
    工作目录=/home/my/electonapp
    ExecStart=/usr/bin/yarn 启动
    重启=总是
    重启安全=30
    

    没有 User=,因为您的所有单位都在您自己的帐户下运行。

    请注意,此示例没有[Install]部分,因为即使systemd --用户目前还没有合适的 .target。(它有 default.target,但实际上运行的是期间登录后,X11 才可用。)因此它需要以不同的方式自动启动。

  3. 更改 X11 启动脚本以运行以下命令:

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

    请注意,许多发行版已经调用导入环境自动,所以通常你只需要开始命令。

    例如,你可以创建一个~/.config/autostart/systemd-myapp.desktop

    [桌面条目]
    类型=应用程序
    Exec=systemctl --user 启动 myapp
    

相关内容