我正在开发 Arch Linux 操作系统,其中使用 Firefox 91.10.0esr(即 Firefox ESR),并且我正在寻找一种使用终端静默安装 Firefox 插件的方法。我知道通过调用下载的插件 .xpi 来安装它们的方法
firefox-esr <addon-name>.xpi
但它会打开 Firefox 并要求进一步确认安装。
我的目的是仅通过命令行执行 .xpi 文件的安装,而不与浏览器 GUI 交互,并避免进一步安装确认(浏览器打开的弹出窗口上的“添加”按钮)。
根据多个来源(即 https://askubuntu.com/questions/73474/how-to-install-firefox-addon-from-command-line-in-scripts ),其中针对包含 install.rdf
的插件解释了该过程。文件,管理这个案例很容易。
我的问题与那些不包含 install.rdf
的 .xpi 文件有关包含应用程序 ID 的文件。
例如,如果我们考虑 FoxyProxy 插件,我们下载并提取它:
mkdir foxyproxy && cd foxyproxy
wget https://addons.mozilla.org/firefox/downloads/file/3611407/foxyproxy_standard-7.5.1.xpi
unzip foxyproxy_standard-7.5.1.xpi
在提取的文件中,没有install.rdf
包含扩展名的常用十六进制 ID 的文件。
我能看到的唯一 ID 位于 manifest.json
内不具有十六进制格式的文件。以FoxyProxy为例,我尝试使用它的ID <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5731382f2e2725382f2e1732253e34793f793d223930" rel="noreferrer noopener nofollow">[email protected]</a>
通过使过程如下:
mkdir -p /usr/share/mozilla/extensions/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e0868f989990928f9899a085928983ce88ce8a958e87" rel="noreferrer noopener nofollow">[email protected]</a>
或
mkdir -p /home/user/.mozilla/extensions/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ddbbb2a5a4adafb2a5a49db8afb4bef3b5f3b7a8b3ba" rel="noreferrer noopener nofollow">[email protected]</a>
然后将 .xpi 的所有解压内容复制到这些目录之一中,但没有成功。
是否可以通过 CLI 安装这种没有 install.rdf
的插件文件?
最佳答案
TL;DR
运行此config_firefox.sh
脚本:
#!/bin/bash
sudo mkdir -p /etc/firefox/policies
sudo cp policies.json /etc/firefox/policies/policies.json
哪个副本(以下 policies.json
文件,您必须将其放在与 config_firefox.sh
脚本相同的文件夹中):
{
"policies": {
"Extensions": {
"Install": [
"https://addons.mozilla.org/firefox/downloads/file/3551054/ublock_origin-latest.xpi"
]
},
"ExtensionUpdate": true,
"DisableTelemetry": true,
"DisableFirefoxStudies": true,
"EnableTrackingProtection": {
"Value": true,
"Locked": false,
"Cryptomining": true,
"Fingerprinting": true,
"EmailTracking": true,
"Exceptions": []
}
}
}
进入:`/etc/firefox/policies/policies.json 并重新启动 Firefox。 (您不必再单击“接受”任何内容,它们会自动安装。
回答 XY 问题,不起作用:
此脚本从 manifest.json
获取扩展 ID .xpi
内的文件文件:(但是,如果我将 .xpi
文件导出到: /home/<username>/snap/firefox/common/.mozilla/firefox/<profilename>.default/extensions
,Firefox 不会自动安装它们。
#!/bin/bash
# Constants
#FIREFOX_PATH=~/.mozilla/firefox
FIREFOX_PATH=~/snap/firefox/common/.mozilla/firefox/
echo "FIREFOX_PATH=$FIREFOX_PATH"
FIREFOX_PROFILE=$(cat ${FIREFOX_PATH}/profiles.ini | grep "Path=" | cut -d= -f2)
echo "FIREFOX_PROFILE=$FIREFOX_PROFILE"
FIREFOX_PROFILE_PATH=${FIREFOX_PATH}/${FIREFOX_PROFILE}
#read -p "FIREFOX_PROFILE_PATH=$FIREFOX_PROFILE_PATH"
FIREFOX_EXT_PATH=${FIREFOX_PROFILE_PATH}/extensions
#FIREFOX_EXT_PATH=${FIREFOX_PATH}/extensions
echo "FIREFOX_EXT_PATH=$FIREFOX_EXT_PATH"
mkdir -p "$FIREFOX_EXT_PATH"
install_firefox_extensions () {
echo ">>> Installing Firefox extensions ..."
mkdir -p /tmp/firefox-install-extensions
cd /tmp/firefox-install-extensions
install_extension "uBlock"\
https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/addon-607454-latest.xpi
exit 5
install_extension "uMatrix"\
https://addons.mozilla.org/firefox/downloads/latest/umatrix/addon-613250-latest.xpi
install_extension "Vimperator"\
https://addons.mozilla.org/firefox/downloads/file/450078/vimperator-latest-fx.xpi
install_extension "Tab Groups"\
https://addons.mozilla.org/firefox/downloads/latest/tab-groups-panorama/addon-671381-latest.xpi
install_extension "Cookies Manager+"\
https://addons.mozilla.org/firefox/downloads/latest/cookies-manager-plus/addon-92079-latest.xpi
rm -rf /tmp/firefox-install-extensions
}
get_rhs_of_line_till_character() {
local line=$1
local character=$2
rhs=$(cut -d "$character" -f2- <<< "$line")
echo "$rhs"
}
get_extension_id(){
local keyword="$1"
local ext_uid=$(unzip -p addon.xpi manifest.json | grep "$keyword" | head -n 1)
# If not is None, get everything after:'"id": "' and drop last quotation and comma.
if [ "$ext_uid" != "" ]; then
local first_cut=$(get_rhs_of_line_till_character "$ext_uid" ":")
#echo "first_cut=$first_cut"
local second_cut=$(get_rhs_of_line_till_character "$first_cut" '"')
#echo "second_cut=$second_cut"
local trim_tail=${second_cut::-2}
#echo "trim_tail=$trim_tail"
echo "$trim_tail"
fi
}
manual_assert_file_exists() {
local filepath="$1"
if [ ! -f "$filepath" ]; then
echo "The file: $filepath does not exist."
exit 29
fi
}
install_extension () {
local ext_name=$1
local ext_url=$2
echo ">>> Installing ${ext_name} ..."
rm addon.xpi
wget --quiet -O addon.xpi "${ext_url}"
STATUS=$?
if [ $STATUS -ne 0 ]; then
echo ">>>> error downloading $ext_name"
fi
manual_assert_file_exists "addon.xpi"
local xpi_id=$(get_extension_id "id")
if [ "$xpi_id" == "" ]; then
xpi_id=$(get_extension_id "short_name")
fi
if [ "$xpi_id" == "" ]; then
echo "Error, did not find xpi-id for:$ext_name"
fi
echo "xpi_id=$xpi_id"
cp -f addon.xpi "${FIREFOX_EXT_PATH}/${xpi_id}.xpi"
unzip addon.xpi -d "${FIREFOX_EXT_PATH}/${xpi_id}"
}
install_firefox_extensions
#echo ">>>> changing default search to DuckDuckGo"
#while [ ! -f "$FIREFOX_PROFILE/search.json.mozlz4" ]
#do
# echo ">>>> waiting for search.json.mozlz4 to be created..."
# sleep 1
#done
关于linux - Arch Linux - 如何通过命令行静默安装 Firefox 扩展(没有 install.rdf 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72572010/