gpt4 book ai didi

linux - 如何在 Linux 下从 C 程序/守护进程启动 firefox

转载 作者:太空宇宙 更新时间:2023-11-04 09:07:13 27 4
gpt4 key购买 nike

我在从用 C 编写的 Linux 守护进程启动 firefox 时遇到了一些问题。当我使用 /usr/bin/firefox 从命令 shell 在机器本身(通过终端)上启动 firefox 时,它工作正常并且 firefox 浏览器窗口正常启动。

但是,如果我在我的 C 守护程序中使用 system("/usr/bin/firefox") 尝试此操作,firefox 在终端中启动它的进程,但浏览器窗口没有打开?

当我尝试使用远程终端访问执行此操作时,会发生类似的事情。这与告诉系统在窗口模式下打开 firefox 而不是尝试在终端模式下打开它有关 - 但我不知道如何使用 bash 命令指定它?

我在我的 Linux 系统中使用 Lubuntu 11.10。
非常感谢任何帮助。

最佳答案

我问你为什么要尝试做你想做的事是有原因的。我不想在评论中详细介绍。

Unix 上的 Firefox 是一个 X-Window 进程(大多数 Linux/Unix 桌面都基于 X11 协议(protocol),它是 X-Window 的核心)。 X-Window 所做的是将程序的显示与运行程序的进程分开。例如,我现在在工作时从 Linux 机器上运行 Firefox,但 Linux 机器实际上在家里的 Mac 上显示 Firefox 浏览器窗口。

为了做到这一点,我必须:

  • 在我的 Mac 上运行 X11。 X11 程序创建一个名为 0.0 的默认 X11 客户端显示,它几乎表示第一个屏幕和 X11 运行的第一个实例(计算机极客喜欢从零开始计数)。该进程在我的 Mac 上在后台运行。从某种意义上说,它实际上是一个服务器进程而不是客户端,因为它在端口 6000 上等待一个客户端 X11 进程 (Firefox) 告诉它该做什么。
  • 在我运行 firefox 之前,我必须告诉我的 Mac 的 X11 进程我允许运行 Firefox 的 X11 服务器能够在我的 X11 客户端进程上显示。否则,您可以想象有人通过在他们的显示器上不断弹出 Windows 来向另一个人发送垃圾邮件。您可以使用 xhost 程序来执行此操作。
  • 为了在 Linux 机器上运行 Firefox,我已经告诉 Firefox 进程我正在运行它的 X11 客户端。我可以通过将 DISPLAY 环境变量设置为“10.0.1.33:0.0”之类的值来做到这一点。这意味着 X11 客户端正在 IP 地址 10.0.1.33 上运行机器,我希望您使用第一个屏幕,并在该屏幕上使用 X11 客户端的第一个实例。
  • 现在,我可以在我的 Linux 机器上运行 Firefox,并且显示会显示在我的 Mac 上。

您遇到的问题是,当您将 FireFox 作为守护进程启动时,根本就没有 X11 客户端。 X11 客户端与用户和某种显示相关联。显示器可以是虚拟显示器,但必须有一个 X11 客户端正在运行并且可以某种方式寻址,因此进程知道在哪里显示输出。

顺便说一句,你说的daemon 在Unix/Linux 中有非常非常特殊的含义。守护进程是一个在后台运行的进程,通常有一个服务(和一个端口)与之关联。例如,有一个名为 ftpd 的 FTP 守护进程,邮件服务器使用 sendmail 守护进程,ssh 有 sshd 守护进程。守护进程没有与之关联的显示。

但是,看起来您可能使用这个词来表示通过另一个进程启动 Firefox。真的吗?如果是这样,您必须确保 Firefox 知道要使用的 X11 显示(有一个命令行设置可用于指定显示),并且您的 X11 客户端(您的登录 session )已授予另一个进程更新的权限程序窗口的显示。

能否更详细地解释一下您要尝试做什么?如果你只是想从远程 http 服务器下载文件(当然它正在运行名为 httpd 的 http 守护进程),你应该使用 curlwget 不需要显示并且使用起来更简单。如果您正在尝试做其他事情,请告诉我们确切的内容。

关于linux - 如何在 Linux 下从 C 程序/守护进程启动 firefox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8440147/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com