首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何通过命令行安装Firefox扩展(没有install.rdf文件)

如何通过命令行安装Firefox扩展(没有install.rdf文件)
EN

Stack Overflow用户
提问于 2022-06-10 09:27:04
回答 1查看 424关注 0票数 2

我在Arch上使用Firefox91.10.0esr(所以,Firefox ),我正在寻找一种使用终端安装默认火狐插件的方法。我知道通过调用下载的addon .xpi作为firefox-esr <addon-name>.xpi来安装它们的方法,但是它打开火狐并要求进一步确认安装。

我的目的是只通过命令行执行.xpi文件的安装,而不与浏览器GUI交互,并避免进一步的安装确认(浏览器打开的弹出窗口上的"Add“按钮)。

根据几个来源(即https://askubuntu.com/questions/73474/how-to-install-firefox-addon-from-command-line-in-scripts),流程被解释为包含install.rdf文件的加载项,因此很容易管理这种情况。

我的问题与那些不包括包含应用程序ID的.xpi文件的install.rdf文件有关。

例如,如果我们考虑FoxyProxy插件并下载并解压缩它:

代码语言:javascript
代码运行次数:0
运行
复制
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 foxyproxy@eric.h.jung,方法是使进程如下:

代码语言:javascript
代码运行次数:0
运行
复制
mkdir -p /usr/share/mozilla/extensions/foxyproxy@eric.h.jung

代码语言:javascript
代码运行次数:0
运行
复制
mkdir -p /home/user/.mozilla/extensions/foxyproxy@eric.h.jung

然后在其中一个目录中复制所有解压缩的内容of.xpi,但没有任何结果。

CLI是否可以在没有install.rdf文件的情况下安装这种加载项?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-23 16:39:54

TL;DR

运行以下config_firefox.sh脚本:

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/bash
sudo mkdir -p /etc/firefox/policies
sudo cp policies.json /etc/firefox/policies/policies.json

哪个副本(必须与policies.json脚本放在同一个文件夹中的下列config_firefox.sh文件):

代码语言:javascript
代码运行次数:0
运行
复制
{
  "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,
      "Exceptions": []
    }
  }
}

转到:`/etc/ Firefox /policies/policies.json并重新启动Firefox。(您不必再单击“接受”任何内容,它们将自动安装。

答案XY-问题,不起作用:

这个脚本从manifest.json文件中获取.xpi文件的扩展名:(但是,如果我将.xpi文件导出到:/home/<username>/snap/firefox/common/.mozilla/firefox/<profilename>.default/extensions,它们不会自动安装。

代码语言:javascript
代码运行次数:0
运行
复制
#!/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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72572010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档