¿Cómo instalar el complemento de Firefox desde la línea de comandos en scripts?

25

Quiero mejorar mi script desatendido agregando algún complemento de Firefox, sin embargo, no puedo encontrar el camino,

¿Alguien puede ayudar a descubrir cómo hacerlo?

Ejemplo: (desea instalar el complemento adblockPlus y configurar una nueva página web predeterminada)

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

Gracias por adelantado.

glococo
fuente
Se agregaron instrucciones para automatizar la instalación de un complemento, si necesita un script, hágamelo saber, es posible.
Bruno Pereira
Esta es una gran pregunta ahora, ya que ahora estoy luchando por encontrar la manera de instalar CLI paquete Adblock como anteriormente en 10.04 con solo apt-get install adblock-plus bruja no existe en 11.10 :( Y SÍ, necesitamos script :)
Kangarooo

Respuestas:

25

Usando tu método

gksudo firefox -install-global-extension addon-1865-latest.xpiparece hacer el truco para ti. Eso instalará la extensión para todos los usuarios en su sistema.

Para instalar la extensión solo para su usuario, use la ruta de extensión como argumento

firefox addon-1865-latest.xpi

¡Aún necesita hacer clic en el Installbotón!

Automatizando la instalación

Firefoxno necesita el nombre del archivo del complemento sino el identificador del complemento como nombre del paquete. Eso significa que si planea instalar un complemento sin intervención del usuario, debe extraerlo a una carpeta con el nombre de la cadena de identificación del complemento, no el nombre del complemento.

La cadena de identificador se puede encontrar en las primeras líneas del complemento instalar archivo de manifiesto install.rdfy se ve así: <em:id>{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}</em:id>. Todo dentro de {}(incluyendo las llaves) es el identificador.

Para que un complemento funcione, debe extraer el paquete, cambie el nombre de la carpeta que contiene los archivos a la cadena de identificación del complemento y colóquelo en la carpeta del complemento global o dentro de la carpeta del complemento del usuario.

Instalación de complemento global

Si desea instalar una extensión automáticamente para todos los usuarios de su sistema, debe extraerla, cambiar el nombre de la carpeta que contiene el complemento a la cadena de identificación del complemento y copiarla en la firefoxcarpeta de extensiones globales /usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/, se llamará a todo lo que use allí. automático cuando se abre un usuario firefox.

Instalación específica del usuario

Si desea instalar una extensión automáticamente a un solo usuario en su sistema, debe extraerla, cambiar el nombre de la carpeta que contiene el complemento a la cadena de identificación del complemento y copiarlo en la firefoxcarpeta de extensiones de usuario /home/user_name/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/(créelo si no existe) , todo lo que use allí se llamará automáticamente cuando se abra un usuario firefox.

Cómo preparar un complemento para la instalación automática - Ejemplo

Haga una extensionscarpeta en su hogar y descargue el complemento

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

Extraerlo y borrar el original.

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

Lea la primera línea del install.rdfarchivo para obtener la identificación del complemento (en este caso será {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}). y crea una carpeta con ese nombre

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

Mueva todos los archivos de su extensionscarpeta a los recién creados ~/extensions/{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}y estará listo para instalar moviendo la {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}carpeta, como se describe, para una instalación local o para una instalación global.

Cómo configurar la página de inicio predeterminada

Para cambiar su página de inicio sin usar las preferencias dentro de Firefox, debe editar ~/.mozilla/firefox/*.default/prefs.js(donde *.defaulthay una carpeta ~/.mozilla/firefoxcreada para su usuario) y agregar esta línea al final.

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

o usando este comando

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

Debe hacerlo después de cerrar firefoxo el programa sobrescribirá la configuración al salir.

Si su usuario aún no lo ha usado firefoxy desea establecer la página de inicio para todos los usuarios nuevos (establecer la página de inicio globalmente) use este comando

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

Comentarios sobre tu pregunta

-silentno existe, se le pedirá que instale esa xpiextensión de todos modos y deberá hacer clic en el botón para instalarla;

-setDefaultBrowserno configurará su página de inicio, hará que firefoxsu navegador predeterminado

Bruno Pereira
fuente
gksudo firefox -install-global-extension addon-1865-latest.xpi hace solo para todos los nuevos usuarios EXEPT Guest ¿sí? Porque lo hice y el invitado todavía no tiene complementos.
Kangarooo
install-global-extensiones obsoleto.
aprendiz
1
A menudo me he preguntado sobre el funcionamiento interno del sistema de extensiones, mucha buena información aquí, ¡gracias!
Madd0g
1
Si tiene un montón de complementos, le sugiero que use el complemento FEBE, extraerá todos sus complementos en uno y simplificará gran parte de su código: D
Ooker
2
Creo que install.rdf o al menos la identificación dentro de él no está necesariamente presente en WebExtensions. Tenga en cuenta que a finales de 2017 Firefox dejará de admitir extensiones que no sean WebExtensions.
Forivin
4

Esto es problemático ya que en diferentes versiones de Firefox, diferentes cosas funcionan y, en algunos casos, nada funciona. Para las versiones más nuevas, solo tiene que cambiar el nombre del .xpi <addon id>.xpiy colocarlo en una carpeta de extensiones. Cuando inicie Firefox después, se le pedirá que acepte la instalación de todos los complementos que haya agregado allí.

Aquí hay algunas funciones de BASH que te hacen la vida más fácil.

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
}

Instalemos Adblock ..

wget https://addons.mozilla.org/firefox/downloads/latest/1865/addon-1865-latest.xpi
install_addon addon-1865-latest.xpi "$EXTENSIONS_USER"
Pithikos
fuente
Gracias, esta es la ruta correcta para usar para una instalación silenciosa
myol
2

Los complementos globales no están habilitados de forma predeterminada, y debe agregarlos a la lista en el prefs.jsarchivo en su perfil para que se habiliten. Un gran dolor para los despliegues masivos.

Aquí hay una secuencia de comandos de muestra para cuando volcamos un montón de prefs.jsarchivos de máquinas cliente a la red y cambiamos de IETaba IETab2, migramos sus preferencias, etc.

Otra forma es crear un perfil de usuario que le guste en una caja, subirlo a la red, luego clonarlo en las máquinas Firefox\defaults\profiley todos los usuarios nuevos heredarán ese perfil.

``

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

``

Andrés
fuente
1

Para algunos de ustedes, este script de shell puede ser útil. Analiza la primera aparición de la em:idetiqueta en install.rdf( descrito por Bruno Pereira ):

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

... dándote la identificación (incluida la {}).

Equanox
fuente
1

Complementos de Firefox un trazador de líneas. Adblock Plus , FlashBlock y Download Helper se descargaron en ese orden, luego al firefoxabrir todos los .xpiarchivos encontrados y luego eliminar esos .xpiarchivos:

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
Canguro
fuente
0

Creé un guión simple basado en la respuesta de Bruno .

Instala una extensión para el usuario actual sin ninguna interacción necesaria. Solo necesita el número que usa Mozilla en sus URL en addons.mozilla.org . Guarde el script como un archivo .sh y use el número como argumento cuando lo llame.

Probado y trabajando en Linux Mint 17 con Firefox 40 , asegúrese de verificar si su versión de Firefox usa la misma estructura de directorios, ya que la cambiaron varias veces.

#!/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
fuente
¿cuál es el número de este addons.mozilla.org/en-US/firefox/addon/vimium-ff
alhelal
0

¡Para las últimas versiones de Firefox, el procedimiento se ha simplificado mucho!

  1. Abrir la cremallera extension.xpi
  2. Leer applications.gecko.iddemanifest.json
  3. Renombrar extension.xpia<ID>.xpi
  4. Copie a una de las carpetas de instalación estándar enumeradas aquí
Dragón oscuro
fuente