Как установить аддон 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
Заранее спасибо.
9 ответов
Используя ваш метод
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
ваш браузер по умолчанию
Это проблематично, поскольку в разных версиях 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"
Для последних версий Firefox процедура была значительно упрощена!
- расстегнуть молнию
extension.xpi
- Читать
applications.gecko.id
изmanifest.json
- переименовывать
extension.xpi
в<ID>.xpi
- Скопируйте в одну из стандартных папок установки, перечисленных здесь
Глобальные плагины не включены по умолчанию, и вам нужно добавить их в список в 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
`
ПОЖАЛУЙСТА, БУДЬТЕ ОСТОРОЖНЫ
Начиная с Firefox 74, выполнение этой задачи БОЛЬШЕ НЕВОЗМОЖНО.
Не тратьте часы на попытки сделать эту работу больше!
Для некоторых из вас этот скрипт может быть полезен. Он анализирует первое вхождение em:id
отметить в install.rdf
( описано Бруно Перейрой):
#!/bin/sh
var=`grep -m 1 -e em:id install.rdf`
var=${var#*\>}
var=${var%<*}
... давая вам идентификатор (включая {}
).
Дополнения 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
Я создал простой сценарий, основанный на ответе Бруно.
Он устанавливает расширение для текущего пользователя без какого-либо взаимодействия. Вам нужен только номер, который 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
Для полноты я нашел другой очень хорошо документированный сценарий на http://bernaerts.dyndns.org/linux/74-ubuntu/271-ubuntu-firefox-thunderbird-addon-commandline который в основном выполняет именно то, что Бруно Перейра предложил в своем ответ.