在 Linux 中从后台服务启动 GUI 程序

在 Linux 中从后台服务启动 GUI 程序

我编写了一个 Java 程序,使用附加的 API 在 Linux 中启动各种程序。我希望这个 Java 程序以我的用户身份在后台运行,并在系统启动时自动启动。我尝试从 systemd 服务运行 jar 文件,但在尝试启动 GUI 应用程序时失败。

我知道,为了运行 GUI 应用程序,需要设置两个环境变量:DISPLAY 和 XAUTHORITY

我尝试在 systemd 服务文件中设置它们,但 java 进程仍然无法启动任何 GUI 程序。从终端运行 jar 文件时启动 GUI 应用程序没有问题。

这个问题可以通过 systemd 或任何其他后台守护进程解决吗?

我的服务文件如下所示:

[Unit]
Description=Application API
After=network.target

[Service]
User=me
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/me/.Xauthority
ExecStart=/usr/bin/java -jar /usr/local/bin/windows-application-launcher.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

更新:它仅需要在我登录到我的桌面环境时运行。

答案1

作为登录流程的一部分启动您的流程。

  • 要为所有用户添加它:为其添加一个 .desktop 文件/etc/xdg/autostart(完整规格这里)。
  • 如果只为自己添加,请在 中添加 .desktop ~/.config/autostart/。您的桌面管理器可能有一些设置对话框可以为您执行此操作 - 在 KDE5 中(系统设置):Settings>Workspace>Startup and shutdown>Autostart

相关内容