我有一台 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 实例,并且数量与我想要的一样多。