如何使用 Upstart 脚本启动 GUI 应用程序

如何使用 Upstart 脚本启动 GUI 应用程序

我有一个 python gtk 应用程序,需要在用户登录时运行。我无法让 upstart 启动任何 gui 应用程序,即使 x 正在运行。

当我登录 X 时,我从下面的 upstart 脚本发出事件

guitest

使用 initctl,我得到

initctl: Event failed

这是我的脚本示例,只不过我用我的应用程序替换了 gedit。我该如何修改此脚本以便启动 gedit 或我的 python gtk 应用程序?

task

start on desktop-session-start  or guitest

script
    gedit
end script

答案1

Upstart 主要用于管理系统服务。如果你想在用户会话中运行某个应用程序,那么还有更好的工具。

通过 GUI

Startup Applications...您可以通过从屏幕右上角的齿轮菜单中选择来配置用户会话中的启动应用程序,然后选择Add并填写详细信息gedit

当您下次登录时,应用程序应该以会话启动。

手动

如果您无法使用 UI 进行此项配置,则可以通过将.desktop文件放入其中一个目录autostart来根据自动启动规范进行配置:

http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html

如果您希望它影响系统上的每个用户,请将文件放在 中/etc/xdg/autostart。如果您只想影响单个用户,请将文件放在 中~/.config/autostart

.desktop文件看起来应该类似于:

[Desktop Entry]
Type=Application
Exec=/usr/bin/gedit
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=GEdit
Comment=

如果将文件放在用户的主目录中,请确保为文件设置执行位。这是安全措施的一部分,旨在阻止程序.desktop因错误而无意中写入工作文件。

答案2

我找到了一个解决方法。如果其他人知道“正确的方法”,请告诉我。

upstart 脚本需要编写一个标志文件。用户启动的另一个进程将不断寻找要创建的标志文件。upstart 脚本可以在标志文件中留下任何相关信息。普通用户或 root 用户当然可以毫无问题地运行 gui 应用程序。为什么 upstart 确实存在问题,还有待解答。

答案3

通过在 upstart 脚本中设置“USER”环境变量和“DISPLAY”环境变量,我可以让它与 QT 应用程序一起工作。

# gui - auto launch daemon

description     "gui daemon"

start on desktop-session-start
stop on desktop-shutdown

env HOME=/home/user

script
    export DISPLAY=:0
    mygui
end script

当然,它仅限于给定的用户,因此对于某些用例来说可能不是一个有效的选项,但就我而言,它是完美的。

相关内容