Как установить аддон 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

Заранее спасибо.

glococo
источник
Добавлены инструкции по автоматизации установки аддона, если вам нужен скрипт, дайте мне знать, это возможно.
Бруно Перейра
Это большой вопрос сейчас, так как я сейчас изо всех сил пытаюсь найти способ установки пакета Adblock с помощью интерфейса командной строки, как это было ранее в 10.04, а в apt-get install adblock-plus ведьма не существует в 11.10 :( И ДА - нам нужен скрипт :)
Kangarooo

Ответы:

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>. Все в {}(включая фигурные скобки) является идентификатором.

Чтобы заставить работать надстройку, необходимо извлечь пакет, переименовать папку, содержащую файлы, в строку идентификатора надстройки и поместить ее либо в глобальную папку надстройки, либо в папку надстройки пользователя.

Глобальная установка аддонов

Если вы хотите установить расширение автоматически для всех пользователей вашей системы, вам нужно извлечь его, переименовать папку, содержащую дополнение в строку идентификатора дополнения, и скопировать его в firefoxпапку глобальных расширений /usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/, все, что вы там используете, будет вызвано автоматический, когда пользователь открывает firefox.

Пользовательская установка

Если вы хотите автоматически установить расширение только для одного пользователя в вашей системе, вам нужно извлечь его, переименуйте папку, содержащую дополнение, в строку идентификатора дополнения и скопируйте его в 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файле, чтобы получить идентификатор дополнения (в этом случае это будет {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 Гость да? Потому что я сделал это, и у гостя до сих пор нет плагинов.
Кенгуру
install-global-extensionне рекомендуется.
ученик
1
Я часто задавался вопросом о внутренней работе системы расширений, много полезной информации здесь, спасибо!
Madd0g
1
Если у вас есть куча аддонов, я предлагаю вам использовать аддон FEBE, он извлечет все ваши аддоны в один и упростит большую часть вашего кода: D
Ooker
2
Я думаю, что install.rdf или, по крайней мере, его идентификатор не обязательно присутствуют в WebExtensions. Обратите внимание, что к концу 2017 года Firefox прекратит поддержку расширений, отличных от WebExtensions.
Форивин
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"
Pithikos
источник
Спасибо, теперь это правильный путь для установки без
вывода сообщений
2

Глобальные плагины не включены по умолчанию, и вам нужно добавить их в список в prefs.jsфайле в их профиле, чтобы они были включены. Основная боль для массовых развертываний.

Вот пример сценария, когда мы выгружаем кучу prefs.jsфайлов с клиентских компьютеров в сеть и меняем их на IETabна IETab2, переносим их настройки и т. Д.

Другим способом является создание профиля пользователя, который вам нравится, на коробке, загрузка его в сеть, затем клонирование его на разных компьютерах, 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

Для некоторых из вас этот скрипт может быть полезен. Он анализирует первое появление em:idтега в install.rdf( описанном Бруно Перейрой ):

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

... давая вам идентификатор (в том числе {}).

Equanox
источник
1

Дополнения Firefox один вкладыш. Adblock Plus , FlashBlock и Download 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
Kangarooo
источник
0

Я создал простой сценарий, основанный на ответе Бруно .

Он устанавливает расширение для текущего пользователя без какого-либо взаимодействия. Вам нужен только номер, который Mozilla использует в своих URL-адресах на addons.mozilla.org . Сохраните сценарий как файл .sh и используйте номер в качестве аргумента при его вызове.

Протестировано и работает на Linux Mint 17 с Firefox 40 , обязательно проверьте, использует ли ваша версия 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
Arne
источник
какой номер для этого addons.mozilla.org/en-US/firefox/addon/vimium-ff
alhelal
0

Для последних версий Firefox процедура была значительно упрощена!

  1. расстегнуть молнию extension.xpi
  2. Читать applications.gecko.idизmanifest.json
  3. Переименовать extension.xpiв<ID>.xpi
  4. Скопируйте в одну из стандартных папок установки, перечисленных здесь
темный дракон
источник