如何使用 Firefox 打开不同配置文件中的外部链接?

如何使用 Firefox 打开不同配置文件中的外部链接?

我有两个 Firefox 实例在不同的配置文件下运行:

$ firefox -P default &
...
$ firefox -no-remote -P second &

现在我可以使用以下命令从命令行打开一个新选项卡:

$ firefox -new-tab http://unix.stackexchange.com

但是如何在第二个配置文件中打开新选项卡?

这:

$ firefox -P second -new-tab http://unix.stackexchange.com

在默认配置文件中打开一个选项卡,同时:

$ firefox -no-remote -P second -new-tab http://unix.stackexchange.com

抱怨已经有一个实例在该配置文件下运行。

答案1

它现在可以firefox在 Linux 上运行 29.0:

要打开firefox具有不同配置文件的第二个实例:

firefox -P second -new-instance

firefox要在已运行的操作系统的第二个实例中打开新选项卡:

firefox -P second -remote "openurl(http://example.com,new-tab)"


Bug 716110 - 将 -new-instance 标志从现有 -no-remote 标志中分离出来获取更多提示(例如:Hayo 的帖子)。

正如此错误报告的评论中所解释的,缺少的是可用于以相同方式打开第一个窗口和第二个选项卡的命令:

这可以通过如下 ( firefox-profile-instance) 的脚本来完成:

#!/bin/bash

PROFILE="$1"
URL="$2"

if firefox -P "$PROFILE" -remote "ping()" >/dev/null 2>&1 ; then
    firefox -P "$PROFILE" -remote "openurl($URL,new-tab)"
else
    firefox -P "$PROFILE" -new-instance "$URL" &
fi

现在,虽然具有默认配置文件的 Firefox 已经在运行,但
第一次运行会启动一个配置文件为“second”的新浏览器:

firefox-profile-instance second "http://example.com"

再次运行相同的命令会在同一浏览器中打开第二个选项卡:

firefox-profile-instance second "http://example.com"

答案2

这个答案很大程度上是一个延伸沃尔克·西格尔上面的答案,我很高兴两者合并。我写这篇文章只是为了格式化一个新脚本,因为 Firefox 不再支持-remote.

新版本的 Firefox(使用版本 52 进行测试)支持-new-instance生成支持远程调用的新实例的选项。对 Firefox 的后续调用(如果给定参数-P)将在正在运行的 Firefox 配置文件中使用给定的配置文件名称执行操作。

如果您希望将生成和链接打开合并到一个脚本中,则可以使用pgrep如下所示的方法来实现:

#!/bin/bash
profile=profile-name
if pgrep --full "^firefox-esr\b.*$profile" > /dev/null; then
    firejail --profile=$HOME/.firejail/firefox.jail.profile firefox -P "$profile" "$@" > /dev/null
else
    firejail --profile=$HOME/.firejail/firefox.jail.profile firefox -new-instance -P "$profile" "$@"
    disown $!
fi

(警告:此脚本尚未经过测试,但改编自我使用的脚本)

答案3

根据来自的答案@Att右我开发了以下解决方案,它会根据 URL 自动选择正确的配置文件。

此包装器脚本在 Ubuntu Linux 20.04.6 和 Mozilla Firefox 104.0 上进行了测试。

#!/bin/bash

if [[ "$@" =~ .*"google."|"facebook.com"|"instagram.com".* ]] 
then
    profile=for_evil_sites
else
    profile=default
fi  

if pgrep --full "firefox\b.*$profile" > /dev/null; then
    /usr/bin/firefox -P "$profile" "$@" > /dev/null
else
    /usr/bin/firefox --new-instance -P "$profile" "$@" > /dev/null
    disown $!
fi

使用名称firefox例如 in保存脚本$HOME/bin/并确保将加载它而不是标准的 Firefox。 (该目录必须位于变量中的原始目录之前$PATH。)

相关内容