【问题标题】:Linux: Starting a GUI application from an init.d daemonLinux:从 init.d 守护进程启动 GUI 应用程序
【发布时间】:2014-05-13 12:55:08
【问题描述】:

我有一个/etc/init.d/foo 脚本,它在系统启动时启动,并永远监听某些感兴趣的事件。这些事件通常会在用户登录后发生,因此,本身与登录事件没有任何联系。

每当foo 检测到特定事件时,它需要启动第 3 方 GUI 应用程序,然后像以前一样继续侦听其他事件。

我观察到我可以从foo 启动非 GUI 脚本,但不能启动 GUI 应用程序。 (我有点知道我会在这里遇到障碍。)

问题:这个任务在 Linux 中一般是如何完成的?也就是说,从后台运行的某种守护进程启动程序在前台启动 GUI 应用程序。

注意:我没有这个第 3 方 GUI 应用程序的源代码。因此,任何解决方案都必须完全在其外部工作。

【问题讨论】:

  • 在启动您的应用程序之前,您应该有有效的 X 会话或启动 Xserver。
  • 但是 X 已经存在,因为所有事件都仅在 GUI 登录后发生。

标签: linux user-interface daemon launch init.d


【解决方案1】:

正确的方法是在 X 会话(GUI 登录)中启动一个应用程序来监听新事件。如果您必须将事件侦听与 X 会话分离,则需要推迟。这意味着,您有两个应用程序,一个侦听事件,另一个仅等待 GUI 应用程序的触发器。监听事件的应用程序然后触发在 X 中运行的应用程序。

那该怎么做呢?

  1. 根据您的 X 会话,有几种“自动启动”方法,例如用户登录后启动的应用程序。这些应用程序将具有 X 上下文,例如连接到 X 服务器时没有安全障碍(它们需要作为 GUI 应用程序运行)。

  2. 这里的“应用程序”也可以是一个持续运行的简单脚本。您不需要为此启动编译器。例如。 Perl 可能是一种很好的语言。

  3. 当事件发生时,侦听事件的应用程序可以写入 /tmp/ 中的命名套接字。

  4. 您在 X 会话中的脚本/应用程序可以从该命名套接字读取并在出现新消息时启动 GUI 应用程序。

最终它根本没有太多工作,但您可能需要阅读一些内容或在网络上搜索此类解决方案。

【讨论】:

  • 这正是我正在寻找的那种指针,谢谢。不确定您所说的 “如果您必须将事件侦听与 X 会话分离...” 是什么意思,以及为什么单个事件侦听器和应用程序启动器实体是不够的。
  • 在某些情况下,您必须在收听事件时独立于用户登录,或者您需要成为不同的用户才能收听事件等。pp。我只是在说明如何处理更复杂的情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多