Como instalar o Firefox addon a partir da linha de comando em scripts?


25

Quero melhorar meu script autônomo adicionando alguns complementos do Firefox, mas não consigo encontrar o caminho,

Alguém pode ajudar a descobrir como?

Exemplo: (deseja instalar o plug-in adblockPlus e definir uma nova página da web padrão)

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

Desde já, obrigado.


Foram adicionadas instruções para automatizar a instalação de um complemento, se você precisar de um script, é possível.
Bruno Pereira

Esta é uma ótima pergunta agora, pois agora estou tentando encontrar uma maneira de instalar o pacote Adblock da CLI como anteriormente no 10.04, apenas com o apt-get install adblock-plus que a bruxa não existe na 11.10 :( AND SIM - precisamos de script :)
Kangarooo

Respostas:


25

Usando seu método

gksudo firefox -install-global-extension addon-1865-latest.xpiparece fazer o truque para você. Isso instalará a extensão para todos os usuários do seu sistema.

Para instalar a extensão apenas para o usuário, use o caminho da extensão como argumento

firefox addon-1865-latest.xpi

Você ainda precisa clicar no Installbotão!

Automatizando a instalação

Firefoxnão precisa do nome do arquivo de complemento, mas do identificador do complemento como um nome de pacote. Isso significa que, se você estiver planejando instalar um complemento sem a intervenção do usuário, precisará extraí-lo para uma pasta com o nome da string identificadora do complemento, não o nome do complemento.

A cadeia do identificador pode ser encontrado nas primeiras linhas do addon instalar arquivo de manifesto install.rdfe parece que isso: <em:id>{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}</em:id>. Tudo dentro do {}(incluindo os chavetas) é o identificador.

Para que um complemento funcione, você precisa extrair o pacote, renomeie a pasta que contém os arquivos para a cadeia identificadora de complementos e coloque-a na pasta global de complementos ou na pasta de complementos do usuário.

Instalação global de complemento

Se você deseja instalar uma extensão automaticamente para todos os usuários em seu sistema, é necessário extraí-la, renomeie a pasta que contém o complemento para a sequência de IDs do copiador e copie-a para a firefoxpasta de extensões globais /usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/. Qualquer coisa que você usar lá será chamada automático quando um usuário abre firefox.

Instalação específica do usuário

Se você deseja instalar uma extensão automaticamente para apenas um usuário em seu sistema, é necessário extraí-la, renomeie a pasta que contém o complemento para a sequência de IDs do complemento e copie-a para a firefoxpasta de extensões do usuário /home/user_name/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/(crie-a se não existir) , qualquer coisa que você usar será chamada automaticamente quando um usuário abrir firefox.

Como preparar um complemento para instalação automática - Exemplo

Crie uma extensionspasta em sua casa e baixe o complemento nela

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

Extraia e exclua o original

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

Leia a primeira linha do install.rdfarquivo para obter o ID do addon (neste caso, será {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}). e crie uma pasta com esse nome

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

Mova todos os arquivos da sua extensionspasta para o recém-criado ~/extensions/{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}e você estará pronto para instalar movendo a {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}pasta, conforme descrito, para uma instalação local ou global.

Como definir a página inicial padrão

Para alterar sua página inicial sem usar as preferências do firefox, você deve editar ~/.mozilla/firefox/*.default/prefs.js(onde *.defaultestá uma pasta ~/.mozilla/firefoxcriada para o usuário) e adicionar esta linha ao final dela

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

ou usando este comando

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

Você precisa fazer isso após o fechamento firefoxou o programa substituirá a configuração na saída.

Se o seu usuário ainda não o usou firefoxe você deseja definir a página inicial para todos os novos usuários (definir página inicial globalmente), use este comando

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

Comentários sobre sua pergunta

-silentnão existir, você será solicitado a instalar essa xpiextensão de qualquer maneira e precisará clicar no botão para instalá-la;

-setDefaultBrowsernão definirá sua página inicial, fará com que firefoxseu navegador padrão


O gksudo firefox -install-global-extension addon-1865-latest.xpi faz apenas para todos os novos usuários EXEPT Guest yes? Porque eu fiz isso e o convidado ainda não tem plugins.
Kangarooo

install-global-extensionestá obsoleto.
aluno

1
Eu sempre me perguntei sobre o funcionamento interno do sistema de extensões, muitas informações boas aqui, obrigado!
precisa saber é o seguinte

1
Se você tem monte de addon, eu sugiro que você use FEBE addon, ele irá extrair todos os seus complementos em um e simplificar muito do seu código: D
Ooker

2
Eu acho que o install.rdf ou pelo menos o ID dentro dele não está necessariamente presente no WebExtensions. Observe que, até o final de 2017, o Firefox deixará de oferecer suporte a outras extensões além das WebExtensions.
Forivin

4

Isso é problemático, pois em diferentes versões do Firefox, coisas diferentes funcionam e, de alguma forma, nada funciona. Para as versões mais recentes, basta renomear o arquivo .xpi <addon id>.xpie colocá-lo em uma pasta de extensões. Quando você iniciar o firefox posteriormente, você será solicitado a aceitar a instalação de todos os complementos que você adicionou lá.

Aqui estão algumas funções do BASH que facilitam sua vida ..

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
}

Vamos instalar o Adblock ..

wget https://addons.mozilla.org/firefox/downloads/latest/1865/addon-1865-latest.xpi
install_addon addon-1865-latest.xpi "$EXTENSIONS_USER"

Obrigado, este é agora o caminho correto para o uso para uma instalação silenciosa
myol

2

Os plug-ins globais não são ativados por padrão e você precisa adicioná-los à lista no prefs.jsarquivo em seu perfil para que eles sejam ativados. Uma grande dor para implantações em massa.

Aqui está um exemplo de script para quando despejamos vários prefs.jsarquivos das máquinas clientes até a rede e mudamos de IETabpara IETab2, migramos suas preferências etc.

Outra maneira é criar um perfil de usuário que você goste em uma caixa, carregá-lo na rede e cloná-lo nas máquinas, Firefox\defaults\profilee todos os novos usuários herdarão esse 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

`


1

Para alguns de vocês, esse script de shell pode ser útil. Ele analisa a primeira ocorrência da em:idtag em install.rdf( descrita por Bruno Pereira ):

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

... fornecendo o ID (incluindo o {}).


1

Complementos para o Firefox um forro. O Adblock Plus , o FlashBlock e o Download Helper foram baixados nessa ordem, firefoxabrindo todos os .xpiarquivos encontrados e removendo-os .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

Criei um script simples com base na resposta de Bruno .

Ele instala uma extensão para o usuário atual sem nenhuma interação necessária. Você só precisa do número que a Mozilla usa em seus URLs em addons.mozilla.org . Salve o script como um arquivo .sh e use o número como argumento ao chamá-lo.

Testado e funcionando no Linux Mint 17 com Firefox 40 , verifique se a sua versão do Firefox usa a mesma estrutura de diretórios, pois eles foram alteradas algumas vezes.

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

Para as versões mais recentes do Firefox, o procedimento foi bastante simplificado!

  1. Descompactar extension.xpi
  2. Leia applications.gecko.iddemanifest.json
  3. Renomeie extension.xpipara<ID>.xpi
  4. Copie para uma das pastas de instalação padrão listadas aqui
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.