如何在特定配置文件中的 Firefox 中远程打开 URL?

如何在特定配置文件中的 Firefox 中远程打开 URL?

我有几个 Firefox 实例,其中运行着几个不同的配置文件。其中配置文件的名称为“软件”和“测试”。

我正在尝试从 bash 脚本打开一个 URL,以便在配置文件“测试”中打开它,如下所示:

firefox -P "test" http://www.example.org/

但是无论如何,它都会在配置文件“软件”中打开。有什么想法吗?

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.8) Gecko/20100308 Iceweasel/3.5.8(如 Firefox/3.5.8)

不,这不是权限问题,我的所有配置文件目录都完全符合我的权限:

root@przehyba:~/.mozilla# ls -ld firefox/
drwx------ 13 miernik miernik 4096 Mar 11 09:15 firefox/
root@przehyba:~/.mozilla# ls -ld firefox/*
drwxr-xr-x  9 miernik miernik 4096 Mar 12 11:29 firefox/info
-rw-r--r--  1 miernik miernik  560 Mar 11 09:15 firefox/profiles.ini
drwxr-xr-x 10 miernik miernik 4096 Mar 16 11:51 firefox/software
drwxr-xr-x  9 miernik miernik 4096 Mar 11 09:14 firefox/tech
drwxr-xr-x 11 miernik miernik 4096 Mar 15 22:48 firefox/test
root@przehyba:~/.mozilla# 

答案1

抱歉回答晚了三年,我刚刚开始对这个话题感兴趣并发现了这个问题。

我没有在任何地方找到记录的解决方案,因此我检查了源代码,这里是非常相关的部分: http://dxr.mozilla.org/mozilla-central/source/toolkit/xre/nsAppRunner.cpp#1537

这里,行尾的 nullptr 不幸意味着 profile 参数没有传递给 SendCommandLine 函数,因此无法选择正确的 Firefox 窗口来发送 openurl 消息。

但是,我们看到用户名正在被传递,并且用户名正在从 LOGNAME 环境变量中初始化。基于此,我想出了以下解决方案:

  • 我用这个名为 firefox.sh 的脚本包装 Firefox:
FOX_PROFILE=facebook
导出 LOGNAME=errge.$FOX_PROFILE
/opt/firefox/firefox -profile ~/.mozilla_profiles/$FOX_PROFILES “$@”
  • 第一次运行时,它会启动一个新实例,并且 ~/.mozilla_profiles/facebook 目录必须存在,

  • 第二次运行时,如果 Facebook 配置文件已在运行,它会正确连接到它,

  • 它可以正确地向多个不同的运行配置文件发送命令(当然你必须在不同的脚本中更改第一行的FOX_PROFILE参数)。

我在 Linux 上使用 Firefox 26 进行了测试并且有效。

或者,这是我的完整解决方案,您可能想要或不想使用:

/bin/bash #!/bin/bash

设置-e

福克斯=/opt/firefox/firefox

消息=$@

如果 [ -z "$FOX_PROFILE" ]; 那么
  如果 [ -z "${MESSAGE}" ]; 那么
    FOX_PROFILE=默认
  别的
    FOX_PROFILE=$(kdialog --default default --menu "-- ${MESSAGE} --" default default google google facebook facebook errge errge spam spam)
导出FOX_PROFILE

# 这个 hack 是必要的,因为 Firefox 远程命令行发送
# 忽略配置文件参数。参见 nsAppRunner.cpp:1505。
导出 LOGNAME=errge.$FOX_PROFILE

# 使用后台执行而不是 exec,因此行为是
# 当配置文件已在运行时和刚运行时一致
# 启动。
$FOX -profile ~/.mozilla_profiles/$FOX_PROFILE "$@"

# 巨大的成功。
出口 0

如果您运行该脚本时不带任何参数,它会自动选择默认配置文件,但您可以通过在 shell 中手动设置 FOX_PROFILE 来覆盖它。如果在命令行中传递了 URL,它总是会要求提供一个配置文件来打开它,这是因为我主要从聊天和电子邮件程序中点击,在这些情况下,我希望始终选择一个配置文件(google 用于日历垃圾邮件,facebook 用于生日垃圾邮件,等等)。当然,您可以更改逻辑以适合您的使用风格,这只是一个例子,重要的知识是 LOGNAME 技巧。

当然,您必须确保此包装器脚本是启动您机器上的浏览器的唯一方法。因为如果您打开的配置文件没有设置正确的 LOGNAME,那么您将无法再与该配置文件通信。我通过多个符号链接名称(如 x-www-browser、firefox、sensible-browser)将此脚本放在我的路径中的第一个位置,并将其也放在 BROWSER 环境变量中。如何执行此操作完全取决于您的 GNU/Linux 发行版。

答案2

基于Att Righ 的回答我开发了以下解决方案,可以根据 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

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

答案3

如果您已有一个正在运行的实例,Firefox 将重用该实例。请尝试firefox -no-remote

答案4

它不起作用。要运行 Mozilla 应用程序的 2 个实例,唯一的方法是禁用与第二个实例的远程连接(通常使用 MOZ_NO_REMOTE=1)。这意味着您禁用了它与其他实例(如创建打开新页面的实例)通信的能力。

因此,您的选择是打开一个no remote启用的新应用程序,或者重用允许远程访问的实例。

相关内容