我有两个 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
。)