Jak zainstalować dodatek do przeglądarki Firefox z wiersza poleceń w skryptach?

25

Chcę poprawić mój nienadzorowany skrypt, dodając dodatek do przeglądarki Firefox, jednak nie mogę znaleźć sposobu,

Czy ktoś może pomóc dowiedzieć się, jak to zrobić?

Przykład: (Chcesz zainstalować wtyczkę adblockPlus i ustawić nową domyślną stronę)

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

Z góry dziękuję.

glococo
źródło
Dodano instrukcje automatyzacji instalacji dodatku, jeśli potrzebujesz skryptu, daj mi znać, jest to możliwe.
Bruno Pereira
To jest świetne pytanie, ponieważ teraz mam problem ze znalezieniem sposobu na CLI sposób instalacji pakietu Adblock, tak jak poprzednio 10.04 z samą instalacją apt-get adblock-plus, która nie istnieje w 11.10 :( I TAK - potrzebujemy skryptu :)
Kangarooo

Odpowiedzi:

25

Za pomocą twojej metody

gksudo firefox -install-global-extension addon-1865-latest.xpiwygląda na to, że załatwi sprawę. Spowoduje to zainstalowanie rozszerzenia dla wszystkich użytkowników w systemie.

Aby zainstalować rozszerzenie tylko dla użytkownika, użyj ścieżki rozszerzenia jako argumentu

firefox addon-1865-latest.xpi

Nadal musisz kliknąć Installprzycisk!

Automatyzacja instalacji

Firefoxnie potrzebuje nazwy pliku dodatku, ale identyfikatora dodatku jako nazwy pakietu. Oznacza to, że jeśli planujesz zainstalować dodatek bez interwencji użytkownika, musisz wyodrębnić go do folderu z nazwą ciągu identyfikatora dodatku, a nie nazwą dodatku.

Ciąg identyfikatora można znaleźć na pierwszych liniach dodatek zainstalować plik manifestu install.rdfi wygląda to tak: <em:id>{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}</em:id>. Wszystko w {}(w tym nawiasy klamrowe) jest identyfikatorem.

Aby dodatek działał, musisz wyodrębnić pakiet, zmień nazwę folderu zawierającego pliki na ciąg identyfikatora dodatku i umieść go w globalnym folderze dodatków lub w folderze dodatków użytkownika.

Instalacja globalnego dodatku

Jeśli chcesz zainstalować rozszerzenie automatycznie dla wszystkich użytkowników w systemie, musisz je rozpakować, zmienić nazwę folderu zawierającego dodatek na ciąg identyfikatora dodatku i skopiować go do firefoxfolderu rozszerzeń globalnych /usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/, wszystko, co tam użyjesz, zostanie wywołane automatyczne, gdy użytkownik otworzy firefox.

Instalacja specyficzna dla użytkownika

Jeśli chcesz zainstalować rozszerzenie automatycznie tylko dla jednego użytkownika w systemie, musisz je rozpakować, zmienić nazwę folderu zawierającego dodatek na ciąg identyfikatora dodatku i skopiować go do firefoxfolderu rozszerzeń użytkownika /home/user_name/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/(utwórz go, jeśli nie istnieje) , wszystko, czego tam użyjesz, zostanie wywołane automatycznie po otwarciu użytkownika firefox.

Jak przygotować dodatek do automatycznej instalacji - Przykład

Utwórz extensionsfolder w domu i pobierz do niego dodatek

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

Wyodrębnij go i usuń oryginał

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

Przeczytaj pierwszy wiersz w install.rdfpliku, aby uzyskać identyfikator dodatku (w tym przypadku będzie to {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}). i utwórz folder o tej nazwie

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

Przenieś wszystkie pliki z extensionsfolderu do nowo utworzonego ~/extensions/{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}i jesteś gotowy do instalacji, przenosząc {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}folder, zgodnie z opisem, do instalacji lokalnej lub instalacji globalnej.

Jak ustawić domyślną stronę główną

Aby zmienić stronę główną bez korzystania z preferencji w Firefoksie, musisz edytować ~/.mozilla/firefox/*.default/prefs.js(gdzie *.defaultjest folder ~/.mozilla/firefoxutworzony dla użytkownika) i dodać ten wiersz na końcu

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

lub za pomocą tego polecenia

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

Musisz to zrobić po zamknięciu, firefoxw przeciwnym razie program zastąpi ustawienie przy wyjściu.

Jeśli użytkownik jeszcze nie korzystał firefoxi chcesz ustawić stronę główną dla wszystkich nowych użytkowników (ustaw stronę główną globalnie), użyj tego polecenia

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

Komentarze do twojego pytania

-silentnie istnieje, i tak zostaniesz poproszony o zainstalowanie tego xpirozszerzenia i musisz kliknąć przycisk, aby je zainstalować;

-setDefaultBrowsernie ustawi twojej strony głównej, zmieni firefoxtwoją domyślną przeglądarkę

Bruno Pereira
źródło
gksudo firefox -install-global-extension addon-1865-latest.xpi sprawia, że ​​tylko dla wszystkich nowych użytkowników Gość EXEPT Tak? Ponieważ to zrobiłem, a gość nadal nie ma wtyczek.
Kangarooo
install-global-extensionjest przestarzałe.
uczeń
1
Często zastanawiałem się nad wewnętrznym działaniem systemu rozszerzeń, wiele dobrych informacji tutaj, dzięki!
Madd0g
1
Jeśli masz kilka dodatków, sugeruję, abyś użył dodatku FEBE, to wyodrębni wszystkie twoje dodatki w jednym i uprości wiele kodu: D
Ooker
2
Myślę, że install.rdf lub przynajmniej znajdujący się w nim identyfikator niekoniecznie jest obecny w rozszerzeniach sieci Web. Uwaga: do końca 2017 r. Firefox porzuci obsługę rozszerzeń innych niż WebExtensions.
Forivin
4

Jest to problematyczne, ponieważ w różnych wersjach Firefoksa działają różne rzeczy, aw niektórych nic nie działa. W przypadku nowszych wersji wystarczy zmienić nazwę pliku .xpi <addon id>.xpii umieścić go w folderze rozszerzeń. Gdy później uruchomisz Firefoksa, zostaniesz poproszony o zaakceptowanie instalacji wszystkich dodanych tam dodatków.

Oto kilka funkcji BASH, które ułatwią Ci życie.

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
}

Zainstalujmy Adblock ..

wget https://addons.mozilla.org/firefox/downloads/latest/1865/addon-1865-latest.xpi
install_addon addon-1865-latest.xpi "$EXTENSIONS_USER"
Pithikos
źródło
Dzięki, teraz jest to właściwa ścieżka do cichej instalacji
myol
2

Wtyczki globalne nie są domyślnie włączone i musisz je dodać do listy w prefs.jspliku w swoim profilu, aby je włączyć. Główny problem masowych wdrożeń.

Oto przykładowy skrypt na wypadek, gdy zrzuciliśmy wiązkę prefs.jsplików z komputerów klienckich do sieci i zmieniliśmy z IETabna IETab2, migrowaliśmy ich preferencje itp.

Innym sposobem jest utworzenie profilu użytkownika, który Ci się podoba na pudełku, przesłanie go do sieci, a następnie sklonowanie go na różnych komputerach, Firefox\defaults\profilea wszyscy nowi użytkownicy odziedziczą ten profil.

`

----------------------------------------------------------------------
#!/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

`

Andrzej
źródło
1

Dla niektórych z was ten skrypt powłoki może być pomocny. Analizuje pierwsze wystąpienie em:idtagu w install.rdf( opisane przez Bruno Pereira ):

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

... podając ci identyfikator (w tym {}).

Equanox
źródło
1

Firefox dodaje jedną warstwę. Adblock Plus , FlashBlock i Download Helper pobrane w tej kolejności, a następnie podczas firefoxotwierania wszystkich znalezionych .xpiplików, a następnie usuwania tych .xpiplików:

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
Kangura
źródło
0

Stworzyłem prosty skrypt oparty na odpowiedzi Brunona .

Instaluje rozszerzenie dla bieżącego użytkownika bez potrzeby jakiejkolwiek interakcji. Potrzebujesz tylko liczby, której Mozilla używa w swoich adresach URL na addons.mozilla.org . Zapisz skrypt jako plik .sh i użyj numeru jako argumentu podczas jego wywoływania.

Przetestowane i działające na Linux Mint 17 z Firefoksem 40 , sprawdź, czy Twoja wersja Firefox używa tej samej struktury katalogów, ponieważ zmieniła ją kilka razy.

#!/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
źródło
0

W najnowszych wersjach Firefoksa procedura została znacznie uproszczona!

  1. Rozsunąć suwak extension.xpi
  2. Czytaj applications.gecko.idzmanifest.json
  3. Zmień nazwę extension.xpina<ID>.xpi
  4. Skopiuj do jednego ze standardowych folderów instalacyjnych wymienionych tutaj
Ciemny smok
źródło