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


9

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

我试图从bash脚本中打开一个URL,以使其在配置文件“ test”中打开,如下所示:

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# 

Answers:


7

抱歉,回答晚了3年,我对这个话题变得很感兴趣,才发现了这个问题。

我在任何地方都没有找到文档化的解决方案,因此我签出了源代码,这是一个非常相关的部分: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对其进行了测试,并且可以正常工作。

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

#!/斌/庆典

设置-e

FOX = /选择/火狐/火狐

消息= $ @

如果[-z“ $ FOX_PROFILE”]; 然后
  如果[-z“ $ {MESSAGE}”]; 然后
    FOX_PROFILE =默认
  其他
    FOX_PROFILE = $(kdialog-默认默认--menu“-$ {MESSAGE}-”默认默认google google facebook facebook errge errge垃圾邮件垃圾邮件)
  科幻
科幻
导出FOX_PROFILE

#需要此技巧,因为firefox远程命令行发送
#忽略profile参数。参见nsAppRunner.cpp:1505。
导出LOGNAME = errge。$ FOX_PROFILE

#使用后台执行而不是exec,因此行为是
#在配置文件已经运行以及仅在配置文件运行时保持一致
# 启动。
$ FOX -profile〜/ .mozilla_profiles / $ FOX_PROFILE“ $ @”

# 巨大的成功。
出口0

如果您运行的脚本没有任何参数,它将自动选择默认配置文件,但是您可以通过在外壳中手动设置FOX_PROFILE来覆盖它。如果在命令行中传递了URL,它总是会要求提供一个用于打开它的配置文件,这是因为我主要是从我的聊天和电子邮件程序中单击,而在这种情况下,我总是要选择一个配置文件(谷歌用于日历)垃圾邮件,用于生日垃圾邮件的Facebook等)。当然,您可以更改逻辑以适合您的使用方式,这只是一个示例,重要的知识是LOGNAME技巧。

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


非常感谢。在我看来,没有必要设置配置文件,并且设置LOGNAME足以完成正确的事情。
dset0x

0

如果您已经在运行实例,则Firefox将重复使用该实例。尝试firefox -no-remote


但是我希望它重用实例!它只是一个特定的,而不喜欢它随机的任何一个。如果我尝试在命令中添加“ -no-remote”,则会得到:“ Iceweasel已在运行,但没有响应。要打开新窗口,必须首先关闭现有的Iceweasel进程,或重新启动系统。”
miernik'3

嗯,这使它更有趣。恐怕我不知道你怎么做。IIUC,-no-remote禁用实例之间的“对话”。这可能无法达到目标,并且可能会造成严重的破坏,但是您可以创建一个扩展程序,该扩展程序轮询中央文件或服务器URL队列,并在将其用于当前配置文件时将其打开。然后,在所有实例中安装该扩展。
janmoesen

0

@miemik

“但是我希望它重用一个实例!只有一个特定的实例,而不喜欢它的任何随机实例。如果我尝试在命令中添加“ -no-remote”,则会得到:“ Iceweasel已经在运行,但没有响应。要打开新窗口,您必须首先关闭现有的Iceweasel进程,或重新启动系统。”

的个人资料目录权限问题 ...请检查权限。您是否从其他位置(分区..磁盘..)复制或移动了它?

解:

成为root并运行,以查看其是否以root身份运行。然后,在配置文件目录中找到ls -ld(该目录应位于您的主目录下,并在其前面加一个句点(。)。.意味着您必须使用“ ls -al”来查看它。

验证该目录的其他权限,然后进行相应更改。

干杯!


我检查了权限并将结果粘贴到对我的问题的编辑中。不是那个问题。
miernik'3

0

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

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


确实有效,请参见errge的答案。你是什么意思,它不会工作
pts 2014年

0

您应该能够将-no-remote仅限添加到测试配置文件调用中(在软件配置文件已经打开之后),如下所示:

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

那应该允许所有其他链接仍然在您的其他配置文件中远程打开。

如果此解决方案不起作用,则可以始终使用Firefox作为独立用户运行进行测试sudo -u。Firefox确实应该可以通过配置文件正确处理此问题。


这个答案不能很好,因为使用该-no-remote标志启动了一个新的Firefox实例,并且该问题要求重新使用现有的Firefox实例(如果它们已经在运行)。
pts 2014年

0

如果您已经使用默认配置文件或任何其他配置文件打开了Mozilla Firefox,请尝试:

Path-To/firefox -remote openurl("http://www.example.org")

使用Mozilla Firefox从2.x到12.x测试并为我工作


这个答案不能很好,因为命令行不包含要使用的必需配置文件。
pts 2014年

0

首次启动具有给定配置文件的Firefox实例时,请使用以下命令:

firefox -P foo -new-instance

您可以在上面命令的末尾附加一个URL来打开它。以后,当您想在该实例中打开URL时,可以使用:

firefox -P foo -remote 'openurl(http://www.example.org)'

如果您正在编写脚本并想了解是否已经有一个实例在运行该概要文件,以查看应调用上面的哪个命令,则可以使用:

firefox -P foo -remote 'ping()'

在Linux上使用Firefox 34进行了测试。

请注意,Firefox当前存在一个错误,该错误使错误信息

Error: Failed to send command: 500 command not parseable

如果-remote openurl()命令是在没有控制tty的情况下执行的(例如,从守护程序启动的脚本中)。

从KDE中的.desktop文件启动脚本时(例如从面板中的启动器)启动脚本时遇到了此错误,因此我必须勾选“在终端中运行”选项,这有点烦人。


-1

作为记录,一种解决方案是:在KDE中,我们将默认浏览器设置为使用以下命令运行:

firefox -P "default"

其中“默认”是我们每次都要使用的个人资料。

现在,我们不带任何参数启动Firefox实例(默认的KDE Firefox启动器)。这将正常打开Firefox,现在我们要打开另一个配置文件,为此,我们在KDE菜单编辑器中创建另一个启动器:

firefox -ProfileManager -no-remote %u

这将打开配置文件管理器,我们选择要使用的配置文件。

在同时运行的多个配置文件上进行了测试,当我们单击任何应用程序(例如聊天客户端)的网址时,就会在我们选择的配置文件中打开一个新标签。

希望有人觉得这很有帮助:)。

尚未在Gnome上进行测试,但我希望它可以被复制。


1
这不能回答问题,OP希望通过脚本自动启动具有不同配置文件的Firefox。
terdon 2012年
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.