从命令行初始化 Firefox 配置文件

从命令行初始化 Firefox 配置文件

我正在尝试为 Vagrant 盒子配置一个根 CA 并将其安装在 Firefox 中。我发现我可以使用安装证书,certutil但问题是它需要一个现有的 Firefox 配置文件来添加证书。

在全新的机器上,首次运行 Firefox 时会创建配置文件。这很成问题,因为如果没有显示,Firefox 将无法正常运行,但可以使用-headless选项解决这个问题。但随后需要手动终止它。由于创建新配置文件需要一些时间,因此需要使用 进行破解sleep。总的来说,我得到了以下信息:

#!/bin/bash
sudo DEBIAN_FRONTEND=noninteractive apt-get -y install \
     firefox \
     libnss3-tools
# create a new profile
firefox -headless &
sleep 2
kill $!
# install the root CA into all profiles
cert="${HOME}/mycert.cer"
for certDb in $(find ${HOME}/.mozilla* -name "cert8.db"); do
    certDir="$(dirname ${certDb})"
    echo ${certDir}
    certutil -A -n "mycert" -t "TCu,Cuw,Tuw" -i "${cert}" -d "${certDir}"
done

有没有更好的方法可以不使用sleepand来做到这一点kill

答案1

我避免使用sleepandkill通过像这样调用 Firefox:

firefox --headless --new-tab "javascript:top.window.close()"

更新

Firefox 的新站点隔离功能 Fission 似乎打破了这一现状。

答案2

我没有做配置,所以这只是一个有根据的猜测:

这可能比您正在做的事情更具挑战性,但也许它会给您一些想法。

(首先执行一次步骤 3。如果在二进制文件中出现任何匹配,则此方法将不起作用 - 至少,在没有大量可能需要随着新版本进行修改的实验性调整的情况下不起作用。)

1)在另一台机器上创建一个新的 Firefox 安装(该机器从未安装过 Firefox 或其他 Mozilla 软件)以用作模板。

不要对它做任何你不希望所有用户拥有的事情。确保在 $HOME/.mozilla 下的其他目录中没有任何“有趣”的内容 - 比如来自其他应用程序的内容,并且仅在 $HOME/.mozilla/firefox 下创建了一个新的用户配置文件。

复制 $HOME/.mozilla(使用cp -a等)作为模板(简称 MT)。

2) 在每台新机器上,将 MT 安装为 $HOME/.mozilla(确保新文件归当前用户和组所有)。这将为每个用户提供相同的配置文件名 random-string.default。如果您愿意,您可以将其重命名为任何其他名称,只要您还更改指向它的 profile.ini 中的条目即可。

3) 这可能按原样工作。我无法确定,因为我的个人资料很旧,经过了很多修改。只是为了确保:

grep -rl template-user-home-directory * | less

在配置文件子目录树中。(您只需执行less一次该部分。它要么永远存在,要么永远不会存在。将 template-user-home-directory 替换为原始计算机上用户目录的实际路径。)

如果结果为空,则说明您已完成。如果没有:

4)获取上面的输出grep(确保它最终包含完整的相对路径)并使用它来循环遍历所有这些文件sed -i(或类似工具),以将 template-user-home-directory 替换为当前用户主目录(无论它出现在哪里)。

只要它在二进制文件中没有找到任何匹配项,这应该没问题。对于二进制文件,一切都无从谈起。

高血压

相关内容