Как установить аддон Firefox из командной строки в скриптах?

Я хочу улучшить свой автоматический скрипт, добавив некоторое дополнение к 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

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

25
задан 29 October 2011 в 13:25

8 ответов

Используя Ваш метод

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 Ваш браузер по умолчанию

25
ответ дан 29 October 2011 в 13:25

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
0
ответ дан 29 October 2011 в 13:25

Для полноты я нашел еще один очень хорошо документированный скрипт на http://bernaerts.dyndns.org/linux/74-ubuntu/271-ubuntu-firefox-thunderbird-addon-commandline в основном делает именно то, что предложил Бруно Перейра в своем ответе.

0
ответ дан 29 October 2011 в 13:25

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

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

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

0
ответ дан 29 October 2011 в 13:25

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

`

0
ответ дан 29 October 2011 в 13:25

Это проблематично, так как в разных версиях 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"
0
ответ дан 29 October 2011 в 13:25

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

Устанавливает расширение для текущего пользователя без какого-либо взаимодействия. Вам нужен только номер, который использует 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
0
ответ дан 29 October 2011 в 13:25

Для последних версий Firefox процедура была упрощена много!

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

Другие вопросы по тегам:

Похожие вопросы: