如何使用 upstart 启动 GUI 应用程序?

如何使用 upstart 启动 GUI 应用程序?

我已经为这个问题苦苦挣扎了三天,尝试了很多方法来解决它,但还没有成功。我希望你们能帮助我......

我有一个 GUI 应用程序。我想自动启动此应用程序。当它意外关闭或关闭时,我想重新打开此应用程序。

我尝试使用 upstart 脚本,但是尽管 upstart 的服务没有问题,但 GUI 应用程序无法通过 upstart 脚本启动。它说无法连接 X 服务器。

我是否应该添加或更改一些设置以使用 upstart 打开,或者是否有任何方法可以在意外退出或关闭时自动打开 GUI 应用程序(不只是登录后一次,我的意思是不使用启动)?

谢谢您的大力支持...

答案1

您无法通过 upstart 或任何其他 init 系统启动图形应用程序,因为在 upstart 执行时,X(图形环境)尚未启动。

在 Windows 中,图形环境是操作系统不可或缺的一部分;即使 Windows Server Core 本质上也是图形化的(即使它只向您显示一个命令提示符窗口)。另一方面,Linux 采取了相反的方法:系统本身仅基于文本,图形环境由在其上运行的用户空间应用程序提供。

因此不幸的是,没有简单的方法来实现你所追求的目标。

话虽如此,您也许能够绕过这个限制。许多桌面环境都提供了定义登录时将启动的应用程序列表的功能(或者更准确地说,启动桌面环境)。您可以编写一个脚本,以紧密循环的方式启动应用程序,并在应用程序以零退出状态退出时退出(对于“成功退出且没有问题”而言,这是正常的)。这是否适合您取决于您​​对“意外退出”的定义。

一种简单的实现可能是这样的:

#!/bin/bash
while true
do
    my-app || exit
    Xdialog --timeout 15 --yesno "Program exited. Restart it?" 2 50
    test "$?" = "0" -o "$?" = "255" || exit
done

意思||是“如果前一个的退出状态非零,则执行下面的操作”(读作“或”)。参见Xdialog 文档了解该脚本的工作原理;基本上,它会提示您是否要继续运行该程序,如果您在 15 秒内回答“是”或什么都不回答,它会通过再次运行循环重新启动该程序。使脚本文件可执行,并将您的桌面环境指向登录时启动它,它将my-app一直运行,直到您明确关闭它并告诉系统不要重新启动它。

相关内容