Firefox、两台 Linux 机器、一个 X-server

Firefox、两台 Linux 机器、一个 X-server

我有一台 Linux 机器,我经常通过 ssh(putty)从 Windows 登录到它。我在 Windows 桌面上运行 VcXsrv X-server。我主要使用它来运行调试器(ddd)和 Firefox 来访问我们基于 Web 的代码审查系统。使用 Linux Firefox 很方便,所以我可以从脚本启动它。我通常使用“-new-tab”启动它,以免不断创建新窗口。

现在我有了一台新的更新版 Linux 机器,暂时与旧机器一起运行。我注意到了一些奇怪的行为:当我启动新的 Firefox 会话时,如果两台机器上都已有一个 Firefox 会话正在运行,那么它会使用该会话。

我希望能够做的是仍然作为新选项卡启动,但仅限于当前计算机的 Firefox 实例,而不是恰好显示在同一 X 服务器上的其他计算机的实例。

我一直在尝试各种标志,包括 -no-remote、-new-instance,以及定义和使用特定配置文件。但是,我无法获得所需的结果。要么我得到了上面描述的行为,要么我得到了一个错误,提示“Firefox 已在运行但没有响应,请关闭它”。

编辑:我被要求编辑此内容以提供一些示例。

好的。接下来我将提到 M_OLD 和 M_NEW。它们是运行不同版本的 Linux 和不同版本的 Firefox(1.5 和 19)的独立机器。我通过名为 Putty 的 ssh 客户端连接到它们,并将 X 转发到我的 Windows 桌面上的 X 服务器。只涉及一个 X 服务器。

示例 1:

因此,从我的 putty 会话到 M_OLD 我运行:

firefox www.google.com &

并从我的 M_NEW putty 会话中运行:

firefox www.imdb.com &

然后我得到一个带有两个选项卡的 Firefox 1.5 窗口。如果我反向执行相同的操作,我会得到相同的结果,但使用的是 Firefox 19。换句话说,正如下面的评论中所述,第一个命令启动 Firefox 的一个实例,第二个命令只是告诉现有实例打开一个新选项卡。即使该实例在另一台机器上,只要它是同一个 X 服务器。

但是我不想这样。我想为不同的机器设置不同的实例。所以:

示例 2:

因此,从我的 putty 会话到 M_OLD 我运行:

firefox -no-remote www.google.com &

并从我的 M_NEW putty 会话中运行:

firefox -no-remote www.imdb.com &

现在我有两个独立的 Firefox 实例。但是如果我在 M_NEW 上运行:

firefox -no-remote www.google.com &

我去拿

Firefox is already running, but is not responding. To open a new window, you must first close the existing Firefox process, or restart your system.

即使我尝试

firefox -no-remote -new-instance www.google.com &

要不就

firefox -new-instance www.google.com &

那么我仍然会收到错误。

我真正想要的是(但这可能行不通)为每台机器设置一个单独的实例,但如果从该机器启动新的 URL,则会打开一个新选项卡。似乎我只能为每个 URL 设置一个带有新选项卡的实例,或者每台机器设置一个实例,但一次只能设置一个。

希望这更清楚一些。

答案1

不同的 Firefox 实例(例如使用 创建--no-remote)必须具有单独的配置文件。

选项 1:创建两个(或更多)配置文件,每个运行 Firefox 的系统一个。示例

firefox --no-remote -CreateProfile localuser
firefox --no-remote -CreateProfile host2

现在启动 Firefox 并在启动时选择一个配置文件

firefox --no-remote -P localuser

或者

firefox --no-remote -P host1

选项 2:设置动态解决方案以在启动时创建“一次性”配置文件,例如,类似下面的 scrupt:

TEMPPROFILE=$(date +%Y%m%d%H%M%S)
firefox --no-remote -CreateProfile $TEMPPROFILE 2>/tmp/.mozprofile.$TEMPPROFILE
firefox --no-remote -P $TEMPPROFILE

您可能需要添加一些步骤来删除临时配置文件(可以通过解析 CreateProfile 命令的输出来找到要删除的目录,该目录通过上述命令存储在 /tmp/.mozprofile.$TEMPPROFILE 中

答案2

好的...不知道这是否有效,但这是我要尝试的第一件事:

如果您在每台机器上创建第二个脚本,该脚本不会尝试创建新选项卡,而只是创建新实例,那会怎么样?如果该机器上当前没有运行 FF,则可以使用这个新脚本,但如果 FF 已在运行,则使用创建新选项卡的旧脚本。

如果这有效,您可能能够在单个脚本中对 ps 输出进​​行一些正则表达式解析,以查看 FF 是否已在机器上运行,并且根据找到的内容使用 -new-tab 开关或 -no-remote;但您可能需要等到此方法经过测试,因为对于可能不起作用的东西来说,这需要大量编码......

答案3

看着XRemote客户端.cpp,我认为你应该这样做:

user@host1$ firefox -CreateProfile profile1

和:

user@host2$ firefox -CreateProfile profile2

然后,当你想去某个地方时,做类似的事情

user@host1$ firefox -P profile1 -new-tab http://example.com

或者,我想您可以猜出在 host2 上该做什么。

显然,你可以选择更好的名字。你如何创建个人资料也并不重要。重要的是在命令行上指定配置文件名称每次调用它时,每个实例都有自己的配置文件名称。

可能甚至工作

答案4

我有一个非常优雅的解决方案这里如果你仍然需要的话。目前,我已经运行了 5 个独立的 Firefox 实例,并且数量与我想要的一样多。

相关内容