我已经为这个问题苦苦挣扎了三天,尝试了很多方法来解决它,但还没有成功。我希望你们能帮助我......
我有一个 GUI 应用程序。我想自动启动此应用程序。当它意外关闭或关闭时,我想重新打开此应用程序。
我尝试使用 upstart 脚本,但是尽管 upstart 的服务没有问题,但 GUI 应用程序无法通过 upstart 脚本启动。它说无法连接 X 服务器。
我是否应该添加或更改一些设置以使用 upstart 打开,或者是否有任何方法可以在意外退出或关闭时自动打开 GUI 应用程序(不只是登录后一次,我的意思是不使用启动)?
答案1
创建文件$HOME/.config/upstart/myGuiStart.conf
内容:
start on desktop-start
stop on desktop-end
respawn
exec firefox
或者另一个带有延迟的示例:
start on desktop-start
stop on desktop-end
respawn
script
sleep 30
firefox
end script
重生描述:
respawn
A service or task with this stanza will be automatically started
if it should stop abnormally. All reasons for a service stopping,
except the stop(8) command itself, are considered abnormal. Tasks
may exit with a zero exit status to prevent being respawned.
更多信息:
http://ifdeflinux.blogspot.de/2013/04/upstart-user-sessions-in-ubuntu-raring.html
答案2
您所面临的问题是,当运行upstart
(或systemd
,或中的脚本/etc/rc.d/
)时,通常没有图形服务(“X 服务器”)在运行。
此外,Unix 中图形子系统的可用性与以下概念紧密相关:用户已经进行了图形登录,只有这个用户才有权使用图形环境。通常不为 root 启动图形子系统 --- 并且 upstart 脚本由 root 运行。
为了在系统启动时自动启动图形应用程序,我的方法是:
为此目的创建一个用户。将其设置为其会话将自动启动。
使用您想要的程序为此用户设置启动应用程序;在仪表板中选择“启动应用程序”:
当应用程序退出/崩溃时重新启动它,您可以简单地将其嵌入到脚本中:
#!/bin/bash # while true; do /full/path/to/start_myapp.sh # NO background (&)! # if we land here it exited sleep 5 done
如果你使用此脚本,那么命令start_myapp.sh
不应该在后台启动应用程序,这一点非常重要。否则,需要更复杂的策略才能自动重启...
请注意,您也可以并行使用普通用户;只需从面板中选择“切换用户”(适应您的 Ubuntu 版本),您将获得另一个图形登录屏幕;您可以使用 CTRL-ALT-F7 和 CTRL-ALT-F8 来回切换...