如何在脚本中从命令行安装Firefox插件?


25

我想通过添加一些Firefox插件来改善我的无人值守脚本,但是我找不到办法,

有人可以帮忙找出如何做的吗?

示例:(想要安装adblockPlus插件并设置新的默认网页)

wget https://addons.mozilla.org/firefox/downloads/latest/1865/addon-1865-latest.xpi
firefox -silent -install-global-extension addon-1865-latest.xpi -setDefaultBrowser www.google.es

提前致谢。


添加了有关自动安装插件的说明,如果您需要一个脚本,请告诉我,这可能。
布鲁诺·佩雷拉

这是一个很大的问题,因为即时消息现在正在努力寻找以CLI方式安装Adblock软件包的方式,如先前在10.04上仅通过apt-get install adblock-plus witch在11.10中不存在的:(并且是的,我们需要脚本:)
Kangarooo

Answers:


25

使用你的方法

gksudo firefox -install-global-extension addon-1865-latest.xpi似乎可以帮到您。这会将扩展安装到系统上的所有用户。

要仅为您的用户安装扩展,请使用扩展路径作为参数

firefox addon-1865-latest.xpi

您仍然需要单击Install按钮!

自动化安装

Firefox不需要插件的文件名,而是插件的标识符作为包名。这意味着,如果您打算在没有用户干预的情况下安装插件,则需要将其解压缩到带有插件标识符字符串名称而不是插件名称的文件夹中。

标识符字符串可以在插件安装清单文件的第一行中找到,install.rdf看起来像这样:<em:id>{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}</em:id>。内的一切{}(包括大括号)是标识符。

要使插件正常工作,您需要解压缩软件包,将包含文件的文件夹重命名为插件标识符字符串,然后将其放置在全局插件文件夹或用户插件文件夹内。

全局插件安装

如果要自动为系统中的所有用户安装扩展,则需要将其解压缩,将包含插件的文件夹重命名为插件的ID字符串,然后将其复制到firefox全局扩展文件夹/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/,您在其中使用的所有文件都会被调出。用户打开时自动运行firefox

用户特定的安装

如果要自动将扩展安装到系统中的一个用户,则需要解压缩该扩展,将包含插件的文件夹重命名为插件的ID字符串,然后将其复制到firefox用户扩展文件夹/home/user_name/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/(如果不存在,则创建该文件夹) ,当用户打开时,在那里使用的所有内容都会自动调出firefox

如何准备用于自动安装的插件-示例

extensions在您的家中建立一个文件夹,然后将加载项下载到其中

mkdir ~/extensions
cd ~/extensions
wget https://addons.mozilla.org/firefox/downloads/latest/1865/addon-1865-latest.xpi

解压缩并删除原始文件

unzip ~/extensions/addon-1865-latest.xpi
rm ~/extensions/addon-1865-latest.xpi

阅读install.rdf文件中的第一行以获取插件的ID(在这种情况下,它将为{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d})。并用该名称创建一个文件夹

mkdir ~/extensions/{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}

将文件extensions夹中的所有文件移动到新创建~/extensions/{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}文件夹中,然后按照说明进行移动文件夹,以进行本地安装或全局安装。

如何设置默认主页

要在不使用firefox内的首选项的情况下更改主页,必须进行编辑~/.mozilla/firefox/*.default/prefs.js(其中*.default~/.mozilla/firefox为用户创建的文件夹),并将此行添加到末尾

user_pref("browser.startup.homepage", "http://uptechtalk.com");

或使用此命令

echo "user_pref("browser.startup.homepage", "http://uptechtalk.com");" >> ~/.mozilla/firefox/*.default/prefs.js

您需要在关闭后执行此操作,firefox否则程序将在退出时覆盖设置。

如果您的用户尚未使用过firefox,而您想为所有新用户设置主页(全局设置主页),请使用此命令

echo "user_pref("browser.startup.homepage", "http://uptechtalk.com");" >> /etc/xul-ext/ubufox.js

有关您的问题的评论

-silent不存在,将提示xpi您仍然安装该扩展,并且您必须单击按钮进行安装;

-setDefaultBrowser不会设置您的主页,它将成为firefox您的默认浏览器


gksudo firefox -install-global-extension addon-1865-latest.xpi仅适用于所有新用户EXEPT Guest是吗?因为我做到了,客人仍然没有插件。
袋鼠

install-global-extension不推荐使用。
学习者

1
我经常想知道扩展系统的内部工作原理,在这里有很多很好的信息,谢谢!
Madd0g 2014年

1
如果您有一堆插件,建议您使用FEBE插件,它将所有插件解压缩为一个,并简化大部分代码:D
Ooker 2014年

2
我认为install.rdf或其中的id不一定存在于WebExtensions中。请注意,到2017年底,Firefox将放弃对WebExtensions之外的扩展的支持。
Forivin

4

这是有问题的,因为在不同版本的Firefox中,不同的功能可以工作,而有些则无效。对于较新的版本,您只需将.xpi重命名为<addon id>.xpi并将其放置在扩展文件夹中。之后启动firefox时,将要求您接受在此添加的所有插件的安装。

这是一些BASH功能,使您的生活更轻松。

EXTENSIONS_SYSTEM='/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/'
EXTENSIONS_USER=`echo ~/.mozilla/firefox/*.default/extensions/`

# -------------------------- xpi tools ---------------------------------

get_addon_id_from_xpi () { #path to .xpi file
    addon_id_line=`unzip -p $1 install.rdf | egrep '<em:id>' -m 1`
    addon_id=`echo $addon_id_line | sed "s/.*>\(.*\)<.*/\1/"`
    echo "$addon_id"
}

get_addon_name_from_xpi () { #path to .xpi file
    addon_name_line=`unzip -p $1 install.rdf | egrep '<em:name>' -m 1`
    addon_name=`echo $addon_name_line | sed "s/.*>\(.*\)<.*/\1/"`
    echo "$addon_name"
}

# Installs .xpi given by relative path
# to the extensions path given
install_addon () {
    xpi="${PWD}/${1}"
    extensions_path=$2
    new_filename=`get_addon_id_from_xpi $xpi`.xpi
    new_filepath="${extensions_path}${new_filename}"
    addon_name=`get_addon_name_from_xpi $xpi`
    if [ -f "$new_filepath" ]; then
        echo "File already exists: $new_filepath"
        echo "Skipping installation for addon $addon_name."
    else
        cp "$xpi" "$new_filepath"
    fi
}

让我们安装Adblock。

wget https://addons.mozilla.org/firefox/downloads/latest/1865/addon-1865-latest.xpi
install_addon addon-1865-latest.xpi "$EXTENSIONS_USER"

谢谢,这是现在用于静默安装的正确路径
myol

2

全局插件默认情况下未启用,您需要将其添加到prefs.js其配置文件中文件的列表中才能启用它们。大规模部署的主要痛苦。

这是一个示例脚本,用于当我们将一堆prefs.js文件从客户端计算机转储到网络并从更改IETabIETab2,迁移其首选项等时。

另一种方法是在一个盒子上创建一个您喜欢的用户配置文件,将其上传到网络,然后在计算机中克隆它Firefox\defaults\profile,所有新用户都将继承该配置文件。

`

----------------------------------------------------------------------
#!/bin/bash

pjsbase="/data/M_drive/Temp/prefsjs"

for userf in `find ${pjsbase} -maxdepth 1 -type f -name *.prefs.js -printf "%f\n"`
do
  echo ${userf}
  # add in IETab2 GUID and remove IETab GUID
  grep extensions.enabledItems ${pjsbase}/${userf} | 
  /bin/sed 's/\")/\,\{1BC9BA34-1EED-42ca-A505-6D2F1A935BBB\}\:2\.12\.21\.1\")/' | 
  /bin/sed 's/{77b819fa-95ad-4f2c-ac7c-486b356188a9}:1.5.20090525,//' > \
     ${pjsbase}/tmp1
  /bin/sed 's/0\.3\.8\.[0-9]*/0\.3\.8\.4/g' ${pjsbase}/tmp1 > ${pjsbase}/tmp
  /bin/sed /extensions.enabledItems/d ${pjsbase}/${userf}   > ${pjsbase}/tmp2
  cat ${pjsbase}/tmp2 > ${pjsbase}/${userf}.new2
  cat ${pjsbase}/tmp >> ${pjsbase}/${userf}.new2
  # add in IETab2 preferences
  echo user_pref\(\"extensions.ietab2.hasRun\"\,\ true\)\; >> \
     ${pjsbase}/${userf}.new2
  echo user_pref\(\"extensions.ietab2.ietab2PrefsMigrated\"\,\ true\)\; >> \
     ${pjsbase}/${userf}.new2
  echo user_pref\(\"extensions.ietab2.prefsMigrated\"\,\ true\)\; >> \
     ${pjsbase}/${userf}.new2
  echo user_pref\(\"extensions.ietab2.version\"\,\ \"2.12.21.1\"\)\; >> \
     ${pjsbase}/${userf}.new2
  echo user_pref\(\"extensions.update.notifyUser\"\,\ false\)\; >> \
     ${pjsbase}/${userf}.new2
  # if they have a preference list then migrate it
  if [ ! `grep user_pref\(\"ietab.filterlist\" ${pjsbase}/${userf} |
          wc -l` -eq 0 ]; then
    echo "user_pref(\"extensions.ietab2.filterlist"$(
       grep user_pref\(\"ietab.filterlist\" ${pjsbase}/${userf} | 
       sed 's/user\_pref(\"ietab\.filterlist//')"" >> ${pjsbase}/${userf}.new2
  fi
  # make sure prefs are alphabetised
  egrep -v ^u > ${pjsbase}/${userf}.new ${pjsbase}/${userf}.new2
  egrep ^u  ${pjsbase}/${userf}.new2 | sort >> ${pjsbase}/${userf}.new
done

`


1

对于某些人来说,此shell脚本可能会有所帮助。它解析(布鲁诺·佩雷拉Bruno Pereira所描述)中em:id标签的首次出现:install.rdf

#!/bin/sh
var=`grep -m 1 -e em:id install.rdf`   
var=${var#*\>}
var=${var%<*}

...为您提供ID(包括{})。


1

Firefox附加组件一个衬板。 Adblock PlusFlashBlockDownload Helper依次下载,然后firefox打开所有找到的.xpi文件,然后删除这些.xpi文件:

wget \ 
 https://addons.mozilla.org/firefox/downloads/latest/1865/addon-1865-latest.xpi \ 
 https://addons.mozilla.org/firefox/downloads/latest/433/addon-433-latest.xpi \
 https://addons.mozilla.org/firefox/downloads/latest/3006/addon-3006-latest.xpi && 
firefox *.xpi && rm *.xpi

0

我根据布鲁诺的答案创建了一个简单的脚本。

它为当前用户安装扩展程序,而无需任何交互。您只需要Mozilla 在addons.mozilla.orgURL中使用的数字。将脚本另存为.sh文件,并在调用它时使用数字作为参数。

经过测试并在带有Firefox 40的Linux Mint 17运行,请确保检查您的Firefox版本是否使用相同的目录结构,因为它们大约更改了几次。

#!/bin/bash
extensionnumber=$1

# find profile dir (first profile in the ini file)
profiledir=`sed -n -e 's/^.*Path=//p' ${HOME}/.mozilla/firefox/profiles.ini | 
            head -n 1`
extensiondir="${HOME}/.mozilla/firefox/${profiledir}/extensions/"

if [ -z "$profiledir" ]; then
    printf "Can't find profile directory."
    exit 1
fi

mkdir /tmp/extension
cd /tmp/extension || exit $?

upstream=""https://addons.mozilla.org/firefox/downloads/latest"

# get extension and unzip
wget -O extension.xpi \
  "${upstream}/${extensionnumber}/addon-${extensionnumber}-latest.xpi" || 
  exit $?
unzip extension.xpi && rm extension.xpi

# get extension id from installation file
extensionid=`grep -m 1 -e em:id install.rdf`   
extensionid=${extensionid#*\>}
extensionid=${extensionid%<*}

# move all files to the directory with the right id
mkdir $extensionid || exit $?
shopt -s extglob dotglob
mv !($extensionid) $extensionid/
shopt -u dotglob

# create new firefox extension dir (if it's a clean install) 
# and move the extension
mkdir -p "${extensiondir}"
mv "${extensionid}" "${extensiondir}"

rmdir /tmp/extension
printf "Installed extension."
exit 0



0

对于最新版本的Firefox,此过程已简化了很多!

  1. 解压缩 extension.xpi
  2. applications.gecko.idmanifest.json
  3. 重命名extension.xpi<ID>.xpi
  4. 复制到此处列出的标准安装文件夹之一
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.