Firefox,两台Linux机器,一台X服务器


10

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

现在,我有一台新的更新Linux机器,该机器暂时与旧机器一起运行。我注意到的是一些奇怪的行为:当我启动一个新的firefox会话时,如果任何一台计算机上已经运行了一个,则它将使用该会话。

我想做的仍然是作为新选项卡启动,但仅在当前计算机上的firefox实例下启动,而不是恰好在同一台X服务器上显示的另一台计算机上的实例下。

我一直在玩各种标志,包括-no-remote,-new-instance以及定义和使用特定配置文件。但是,我一直无法获得理想的结果。我得到了上面描述的行为,或者得到了一个错误消息,例如“ Firefox已经在运行但没有响应,请关闭它”。

编辑:我被要求对此进行编辑以提供一些示例。

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

范例1:

因此,从腻子会话到M_OLD,我运行:

firefox www.google.com &

然后从我的M_NEW油灰会话中运行:

firefox www.imdb.com &

然后我得到一个带有两个选项卡的firefox 1.5窗口。如果我反向执行相同操作,则得到相同的结果,但使用firefox19。换句话说,如下面的注释所述,第一个命令启动一个firefox实例,第二个命令简单地告诉现有实例打开一个新选项卡。即使实例在另一台计算机上,只要它是同一台X服务器即可。

但是我不要这个。我想为单独的机器设置单独的实例。所以:

范例2:

因此,从腻子会话到M_OLD,我运行:

firefox -no-remote www.google.com &

然后从我的M_NEW油灰会话中运行:

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拥有一个带有新选项卡的实例,或者每台计算机只有一个实例,但一次只能拥有一个。

希望这更清楚。


你能澄清一下吗?新的Linux机器有何关联?您正在将X转发到Windows计算机,对不对?您是否同时连接到两个Linux盒?请提供更多有关如何连接到每个盒子的信息。
terdon

好的,所以当出现问题时,您是否ssh -X正确连接到两台计算机?
13年

是的,我正在将X转发到Windows计算机。是的,我都连接了。新机器很重要,因为我也正在从中启动Firefox。但是,与其启动新的firefox实例,不如在现有实例中打开一个新选项卡-从旧计算机启动的选项卡。就像新的firefox进程检查以查看firefox是否在该X服务器上运行,如果是,则向其发送一条消息以打开一个新选项卡。这很聪明,但不是我想要的。“旧”和“新”仅在它们是非常不同的Firefox版本中才有意义。有道理?
PaulM

1
您所描述的是正常的(让我惊讶的发现),但是我不知道它在运行时--no-remote是如何固定的。您能否编辑问题并在收到“ Firefox已经运行”消息时告诉我们?运行firefox -no-remote 启动一个新的运行在远程计算机上但显示在本地X服务器上的firefox实例。
terdon

1
我认为您可能还必须添加-p eg -p -no-remote。这允许从新的Fx配置文件开始。请参阅命令行选项。要连接到现有的Fx流程,您可以尝试firefox https://www.mozilla.orgfirefox -remote "openURL(https://www.mozilla.org, new-tab)"
vWil

Answers:


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:设置动态解决方案以在启动时创建“一次性”配置文件,例如,沿着以下方式崩溃:

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”
PaulM 2014年

嗯,是的-不同的实例必须使用不同的配置文件。
2014年

实际上,您提出的第一个“选项”根本没有任何意义,因此我建议将其从您的答案中删除。
SamB 2014年

但是,实际上,如果没有-no-remote... ,它可能会起作用...
SamB 2014年

0

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

如果您在每台计算机上创建第二个脚本(不尝试创建新选项卡,而仅尝试创建新实例),该怎么办?如果该计算机上当前没有运行FF,则使用此新脚本,但是如果该FF已在运行,则使用创建新选项卡的旧脚本。

如果这行得通,您也许可以在单个脚本中对ps输出进行一些正则表达式解析,以查看FF是否已在计算机上运行,​​并根据其用途使用-new-tab开关或-no-remote。发现 但您可能要等到测试此方法之后,因为对于可能不起作用的某些事情来说,这是相当多的编码。


听起来好像可行,但我还是放弃了。M_OLD即将退役。
PaulM 2014年

0

查看XRemoteClient.cpp,我认为您应该这样做:

user@host1$ firefox -CreateProfile profile1

和:

user@host2$ firefox -CreateProfile profile2

然后,当您想去某个地方时,请执行以下操作

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

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

显然,您可以选择更好的名称。如何创建配置文件也没关系。重要的是每次调用命令行时都要在命令行上指定一个配置文件名称,每个实例都有自己的配置文件名称。

这种力量甚至工作


0

如果您仍然需要,我在这里有一个很好的解决方案。就目前而言,我有5个独立的firefox实例正在运行,并且数量不限。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.