如何让 /etc/init.d 脚本像在 X 下启动一样?

Kat*_*thy 4 init-script x11 shell-script init.d

我正在尝试追踪 Java 应用程序的一些怪癖,该应用程序在通过 /etc/init.d 中的启动脚本启动时行为异常,但是当您打开 GUI 终端窗口并通过 /etc/init.d/ 运行它时运行良好我的应用程序启动。(奇怪之处涉及应用程序的一部分,它使用 X 进行了一些hacky handwaving。)由于应用程序在通过终端窗口启动时运行良好,因此在深入研究(诚然微妙而不是我的)源代码之前,我正在查看它是如何启动的代码。

这篇文章的答案给了我一个线索,即 Gnome 终端正在窗口管理器中运行,这以某种方式影响(以一种很好的方式)我通过 bash 脚本启动的应用程序的环境。我能够验证通过 tty 终端(ctrl-alt-f1 或通过 ssh)启动脚本的行为与启动时启动的行为相同。

我的主要问题是:当计算机启动时,我可以做些什么来启动这个应用程序,但它是否像在 X 下启动一样?到目前为止,我们已经使用了脚本路由,因为它还需要使用某些参数启动 Java VM。

后续问题(严格来说是为了增强我的理解):当脚本通过窗口管理器中运行的某些东西启动时,幕后发生了什么使脚本行为不同?谷歌并没有在这方面启发我。

gol*_*cks 7

/etc/init.d脚本是非交互式、非登录的,并且它们不会尝试访问 X 会话,因为它们是系统范围的服务。1 系统服务不与任何特定的登录用户相关联,2但 X 会话始终属于登录用户。

如果您的应用程序需要 GUI 上下文才能工作,则它不应是系统服务。您还没有解释它为什么需要它或它做什么,但您可能应该使用~/.xinitrc或您的桌面环境的启动系统,而不是 init。

1 X 应用程序和登录用户可能会使用系统服务,但您所谈论的是相反的方式。

2服务通常与它们自己的特殊用户相关联,但它们并非如此 登录(通常此类用户无法登录)。