Arch Linux - 如何通过命令行静默安装 Firefox 扩展(没有 install.rdf 文件)

问题描述 投票:0回答:2

我正在 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
文件,很容易管理此案例。

我的问题与那些不包含包含应用程序 ID 的

install.rdf
文件的 .xpi 文件有关。

例如,如果我们考虑 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

在提取的文件中,没有包含扩展名的常用十六进制 ID 的

install.rdf
文件。 我能看到的唯一 ID 位于不具有十六进制格式的
manifest.json
文件内。以 FoxyProxy 为例,我尝试通过如下过程来使用它的 ID
[email protected]

mkdir -p /usr/share/mozilla/extensions/[email protected]

mkdir -p /home/user/.mozilla/extensions/[email protected]

然后将 .xpi 的所有解压内容复制到这些目录之一中,但没有成功。

是否可以通过 CLI 安装这种没有

install.rdf
文件的插件?

linux firefox terminal firefox-addon xpi
2个回答
2
投票

TL;博士

运行此

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
文件内的
.xpi
文件获取扩展 ID:(但是,如果我将
.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

0
投票

跟进之前的答案。

Firefox 建议您在策略 JSON 中使用 ExtensionSettings 而不是扩展。

所以上面的内容会变成这样:

{
  "policies": {
  "ExtensionSettings": {
    "[email protected]": {
      "installation_mode": "force_installed",
      "install_url": "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"
     }
   }
  }
}

您需要获取您想要的addOn的ID,您可以通过下载.xpi,解压并查看manifyst.json来获取该ID。 ID 位于“browser_specific_settings”部分下。

例如:

"browser_specific_settings": {
    "gecko": {
      "id": [ID HERE]
     }
}
© www.soinside.com 2019 - 2024. All rights reserved.