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

21

Eu quero melhorar meu script autônomo adicionando algum addon 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

Obrigado antecipadamente.

    
por glococo 29.10.2011 / 11:25

7 respostas

23

Usando seu método

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

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

firefox addon-1865-latest.xpi

Você ainda precisa clicar no botão Install !

Automatizando a instalação

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

A cadeia do identificador pode ser encontrada nas primeiras linhas do arquivo de manifesto de instalação do addon install.rdf e tem esta aparência: <em:id>{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}</em:id> . Tudo dentro do {} (incluindo as chaves) é o identificador.

Para obter um addon para funcionar, você precisa extrair o pacote, renomear a pasta que contém os arquivos para a string do identificador de addon e colocá-la na pasta global addon ou na pasta addon do usuário.

Instalação global de addon

Se você quiser instalar uma extensão automaticamente para todos os usuários em seu sistema, precisará extraí-la, renomear a pasta que contém o addon para a string id do addon e copiá-la para a pasta firefox global extensions /usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/ , qualquer coisa que você usar lá será chamada automaticamente quando um usuário abrir firefox .

Instalação específica do usuário

Se você quiser instalar uma extensão automaticamente para apenas um usuário em seu sistema, precisará extraí-la, renomear a pasta que contém o addon para a string id do addon e copiá-la para a pasta firefox user extensions /home/user_name/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/ (crie se não existir), qualquer coisa que você usar lá será chamada automaticamente quando um usuário abrir firefox .

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

Crie uma pasta extensions em sua casa e faça o download do addon 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 no arquivo install.rdf para obter o id do addon (nesse 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 pasta extensions para o recém criado ~/extensions/{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d} e você estará pronto para instalar movendo a pasta {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d} , conforme descrito, para uma instalação local ou para uma instalação global.

Como definir a página inicial padrão

Para alterar sua página inicial sem usar as preferências dentro do firefox, você precisa editar ~/.mozilla/firefox/*.default/prefs.js (onde *.default é uma pasta dentro de ~/.mozilla/firefox criada para seu usuário) e adicionar essa 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 depois de fechar firefox ou o programa substituirá a configuração ao sair.

Se o usuário ainda não usou firefox e deseja definir a página inicial para todos os novos usuários (defina a página global) use este comando

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

Comentários sobre sua pergunta

-silent não existe, você será solicitado a instalar a extensão xpi de qualquer forma e você terá que clicar no botão para instalá-lo;

-setDefaultBrowser não definirá sua página inicial, ele tornará firefox seu navegador padrão

    
por Bruno Pereira 29.10.2011 / 12:10
3

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

Aqui estão algumas funções 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  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
}

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"
    
por Pithikos 23.12.2015 / 14:21
2

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

Aqui está um script de exemplo para quando despejamos um monte de prefs.js arquivos de máquinas cliente na rede e mudamos de IETab para IETab2 , migramos suas preferências, etc.

Outra forma é criar um perfil de usuário que você gosta em uma caixa, enviá-lo para a rede e, em seguida, cloná-lo nas máquinas em Firefox\defaults\profile e 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

'

    
por Andrew 21.03.2013 / 18:30
1

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

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

... dando-lhe o id (incluindo o {} ).

    
por Equanox 11.08.2015 / 23:33
1

Complementos do Firefox em um liner. Adblock Plus , FlashBlock e Download do Helper baixados nessa ordem, em firefox abrindo todos os arquivos .xpi encontrados e removendo esses .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
    
por Kangarooo 14.05.2012 / 19:21
0

Eu criei um script simples baseado na resposta de Bruno .

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

Testado e trabalhando em Linux Mint 17 com Firefox 40 , verifique se sua versão do Firefox usa a mesma estrutura de diretórios desde eles mudaram algumas vezes.

#!/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
    
por arne 08.09.2015 / 22:02
0

Para completar, encontrei outro script muito bem documentado no link que basicamente faz exatamente o que Bruno Pereira sugeriu em sua resposta.

    
por balu 06.12.2017 / 23:47