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

21

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

¿Alguien puede ayudar a descubrir cómo hacerlo?

Ejemplo: (Desea instalar el complemento adblockPlus y establecer 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 de antemano.

    
pregunta glococo 29.10.2011 - 09:25

7 respuestas

24

Usando tu método

gksudo firefox -install-global-extension addon-1865-latest.xpi parece ser el truco para ti. Eso instalará la extensión a 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

¡Sin embargo, aún debes hacer clic en el botón Install !

Automatizando la instalación

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

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

Para que un complemento funcione, debe extraer el paquete, cambiar el nombre de la carpeta que contiene los archivos a la cadena de identificador de complemento y colocarlo en la carpeta de complemento global o dentro de la carpeta de complemento de 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 id del complemento y copiarla en la carpeta firefox de extensiones globales /usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/ , cualquier cosa que use allí será llamada automática cuando un usuario abre firefox .

Instalación específica para el usuario

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

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

Cree una carpeta extensions en su hogar y descargue el complemento en ella

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

Extraer y eliminar el original

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

Lea la primera línea en el archivo install.rdf para obtener el id 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 en su carpeta extensions al ~/extensions/{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d} recién creado y está listo para instalar moviendo la carpeta {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d} , 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 tu página de inicio sin usar las preferencias dentro de Firefox, debes editar ~/.mozilla/firefox/*.default/prefs.js (donde *.default es una carpeta dentro de ~/.mozilla/firefox creado para tu usuario) y agregar esta línea al final de ella

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

Necesitas hacerlo después de cerrar firefox o el programa sobrescribirá la configuración al salir.

Si su usuario todavía no ha usado firefox y desea establecer la página de inicio para todos los usuarios nuevos (establezca la página principal globalmente) use este comando

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

Comentarios sobre su pregunta

-silent no existe, se le pedirá que instale esa extensión xpi de todos modos y tendrá que hacer clic en el botón para instalarlo;

-setDefaultBrowser no configurará su página de inicio, hará que firefox sea su navegador predeterminado

    

respondido por el Bruno Pereira 29.10.2011 - 10:10
3

Esto es problemático ya que en diferentes versiones de Firefox, funcionan diferentes cosas y en algo no funciona. Para las versiones más nuevas solo tiene que cambiar el nombre de .xpi a <addon id>.xpi y colocarlo en una carpeta de extensiones. Cuando inicies Firefox luego, se te pedirá que aceptes la instalación de todos los complementos que hayas agregado allí.

Aquí hay algunas funciones de BASH que le 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  install.rdf | egrep '<em:id>' -m 1'
    addon_id='echo $addon_id_line | sed "s/.*>\(.*\)<.*//"'
    echo "$addon_id"
}

get_addon_name_from_xpi () { #path to .xpi file
    addon_name_line='unzip -p  install.rdf | egrep '<em:name>' -m 1'
    addon_name='echo $addon_name_line | sed "s/.*>\(.*\)<.*//"'
    echo "$addon_name"
}

# Installs .xpi given by relative path
# to the extensions path given
install_addon () {
    xpi="${PWD}/"
    extensions_path=
    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"
    
respondido por el Pithikos 23.12.2015 - 13:21
2

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

Aquí hay un script de muestra para cuando volcamos un montón de archivos prefs.js de las máquinas cliente hasta la red y cambiamos de IETab a IETab2 , migramos sus preferencias, etc.

Otra forma es crear un perfil de usuario que le guste en un cuadro, subirlo a la red, luego clonarlo en máquinas en Firefox\defaults\profile y 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

'

    
respondido por el Andrew 21.03.2013 - 17:30
1

Para algunos de ustedes, este script de shell podría ser útil. Analiza la primera aparición de la etiqueta em:id en install.rdf ( descrita por Bruno Pereira ):

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

... que le proporciona la identificación (incluido el {} ).

    
respondido por el Equanox 11.08.2015 - 21:33
1

Complementos de Firefox one liner. Adblock Plus , FlashBlock y Descargar Helper descargados en ese orden, luego en firefox abriendo todos los archivos encontrados .xpi , luego quitándolos .xpi files:

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
    
respondido por el Kangarooo 14.05.2012 - 17:21
0

Creé un script simple basado en la respuesta de Bruno .

Instala una extensión para el usuario actual sin necesidad de interacción. Solo necesita el número que Mozilla usa en su 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 directorio desde lo cambiaron unas pocas veces.

#!/bin/bash
extensionnumber=

# 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
    
respondido por el arne 08.09.2015 - 20:02
0

Para completar, encontré otro guión muy bien documentado en enlace que básicamente está haciendo exactamente lo que Bruno Pereira sugirió en su respuesta.

    
respondido por el balu 06.12.2017 - 22:47

Lea otras preguntas en las etiquetas