como abrir remotamente uma URL no Firefox em um perfil específico?

9

Eu tenho várias instâncias do Firefox com vários perfis diferentes corrida. Entre eles, perfis com os nomes "software" e "teste".

Estou tentando abrir um URL a partir de um script bash para que ele seja aberto perfil "teste", assim:

firefox -P "test" http://www.example.org/

No entanto, isso abre no perfil "software" de qualquer maneira. Alguma idéia?

Mozilla / 5.0 (X11; U; Linux x86_64; pt-BR; rv: 1.9.1.8) Gecko / 20100308 Iceweasel / 3.5.8 (como Firefox / 3.5.8)

Não, não é um problema de permissões, todos os meus diretórios de perfil estão perfeitamente sob minhas permissões:

root@przehyba:~/.mozilla# ls -ld firefox/
drwx------ 13 miernik miernik 4096 Mar 11 09:15 firefox/
root@przehyba:~/.mozilla# ls -ld firefox/*
drwxr-xr-x  9 miernik miernik 4096 Mar 12 11:29 firefox/info
-rw-r--r--  1 miernik miernik  560 Mar 11 09:15 firefox/profiles.ini
drwxr-xr-x 10 miernik miernik 4096 Mar 16 11:51 firefox/software
drwxr-xr-x  9 miernik miernik 4096 Mar 11 09:14 firefox/tech
drwxr-xr-x 11 miernik miernik 4096 Mar 15 22:48 firefox/test
root@przehyba:~/.mozilla# 
    
por miernik 16.03.2010 / 11:54

8 respostas

7

Desculpe pela resposta de 3 anos, fiquei interessado neste tópico agora e encontrei esta pergunta.

Não encontrei uma solução documentada em nenhum lugar, então verifiquei o código-fonte e aqui está uma parte muito relevante: link

Aqui, o nullptr no final da linha, infelizmente, significa que o argumento de perfil não está sendo passado para a função SendCommandLine, portanto, não é possível selecionar a janela correta do firefox para enviar a mensagem de abertura para.

No entanto, vemos que o nome de usuário está sendo passado e que o nome de usuário está sendo intiailizado a partir da variável de ambiente LOGNAME. Com base nisso, desenvolvi a seguinte solução:

  • Eu envolvo o firefox com esse script, chamado firefox.sh:
FOX_PROFILE=facebook
export LOGNAME=errge.$FOX_PROFILE
/opt/firefox/firefox -profile ~/.mozilla_profiles/$FOX_PROFILES "$@"
  • quando executado pela primeira vez, ele inicia uma nova instância e o diretório ~ / .mozilla_profiles / facebook deve existir,

  • quando executado pela segunda vez, se o perfil do Facebook já estiver em execução, ele se conecta corretamente a ele,

  • ele pode enviar comandos corretamente para vários perfis de execução diferentes (é claro que você precisa alterar o parâmetro FOX_PROFILE na primeira linha dos diferentes scripts).

Eu testei isso com o Firefox 26 no Linux e funciona.

Como alternativa, aqui está minha solução completa que você pode querer ou não usar:

#!/bin/bash

set -e

FOX=/opt/firefox/firefox

MESSAGE=$@

if [ -z "$FOX_PROFILE" ]; then
  if [ -z "${MESSAGE}" ]; then
    FOX_PROFILE=default
  else
    FOX_PROFILE=$(kdialog --default default --menu "-- ${MESSAGE} --" default default google google facebook facebook errge errge spam spam)
  fi
fi
export FOX_PROFILE

# This hack is needed, because firefox remote command line sending
# ignores the profile parameter.  See nsAppRunner.cpp:1505.
export LOGNAME=errge.$FOX_PROFILE

# Using background execution instead of exec, so the behavior is
# consistent when the profile is already running and when it's just
# starting up.
$FOX -profile ~/.mozilla_profiles/$FOX_PROFILE "$@"

# Huge success.
exit 0

Se você executar o script sem nenhum parâmetro, ele selecionará automaticamente o perfil padrão, mas você poderá substituí-lo definindo FOX_PROFILE manualmente no seu shell. Se um URL é passado na linha de comando, ele sempre pede um perfil para abri-lo, isso é porque eu principalmente clico no meu programa de bate-papo e e-mail e nesses casos eu quero sempre selecionar um perfil (google for calendar spam, facebook para spam de aniversário, etc.). É claro que você pode mudar a lógica para se adequar ao seu estilo de uso, isso é apenas um exemplo, o conhecimento importante é o truque de LOGNAME.

E é claro que você precisa garantir que esse script de wrapper seja a única maneira de iniciar o navegador em sua máquina. Porque se você abrir um perfil sem o conjunto correto de LOGNAME, você não poderá mais se comunicar com esse perfil. Eu coloquei este script como o primeiro no meu caminho através de vários nomes ligados simbolicamente, como x-www-browser, firefox, sensible-browser e coloque-o na variável de ambiente BROWSER também. Como fazer isso depende exatamente da sua distribuição GNU / Linux.

    
por 14.01.2014 / 14:34
0

Se você já tiver uma instância em execução, o Firefox a reutilizará. Experimente firefox -no-remote .

    
por 12.03.2010 / 08:19
0

@miemik

"Mas eu quero reutilizar uma instância! Apenas uma específica, não aleatória. Se eu tentei adicionar" -no-remote "ao meu comando, eu recebo:" Iceweasel já está rodando, mas está não está respondendo. Para abrir uma nova janela, primeiro você deve fechar o processo Iceweasel existente ou reiniciar o sistema. "

Você tem um problema de permissão com seu diretório de perfil ... verifique a permissão. Você copiou ou moveu de qualquer outro lugar (partition..disk ..)?

Solução:

Torne-se root e execute top para ver se ele está sendo executado como root. Em seguida, ls -ld no diretório profile (que deve estar sob seu diretório home com um ponto (.) Na frente deles, significa que você tem que usar "ls -al" para vê-lo.

Confirme outras permissões desse diretório e altere as alterações de acordo.

Felicidades!

    
por 16.03.2010 / 07:39
0

Não vai funcionar. A única maneira de ter duas instâncias de um aplicativo Mozilla em execução é desabilitar as conexões remotas para a segunda (geralmente com MOZ_NO_REMOTE = 1). Isso significa que você desativa a capacidade de comunicação com outras instâncias (como a criação de uma nova página).

Portanto, suas opções são abrir um novo aplicativo com no remote ativado ou reutilizar a instância que permite acesso remoto.

    
por 15.05.2010 / 20:39
0

Você deve ser capaz de adicionar o -no-remote somente à chamada do perfil de teste (depois que o perfil do software já estiver aberto) assim:

firefox -P "test" -no-remote http://www.example.org/

Isso deve permitir que todos os outros links ainda sejam abertos remotamente em seu outro perfil.

Se esta solução não funcionar, você poderá sempre executar o Firefox como um usuário separado para testes, usando sudo -u . O Firefox realmente deve ser capaz de lidar com isso corretamente com perfis.

    
por 17.05.2010 / 18:41
0

Se você já tiver o Mozilla Firefox aberto com o perfil Padrão ou outro perfil, tente:

Path-To/firefox -remote openurl("http://www.example.org")

Testei e trabalhei para mim com o Mozilla Firefox de 2.x para 12.x

    
por 13.12.2012 / 09:10
0

Na primeira vez que você iniciar uma instância do Firefox com um determinado perfil, use o comando:

firefox -P foo -new-instance

Você pode acrescentar um URL no final do comando acima para abri-lo. Mais tarde, quando você quiser abrir um URL nessa instância, poderá usar:

firefox -P foo -remote 'openurl(http://www.example.org)'

Se você estiver escrevendo um script e quiser descobrir se já existe uma instância executando esse perfil para ver quais dos comandos acima devem ser chamados, use:

firefox -P foo -remote 'ping()'

Testado com o Firefox 34 no Linux.

Observe que atualmente há um bug no Firefox que causa erros com a mensagem

Error: Failed to send command: 500 command not parseable

se o comando -remote openurl() for feito sem um controle tty (por exemplo, de um script iniciado por um daemon).

Eu acertei esse bug ao lançar um script de um arquivo .desktop no KDE (por exemplo, de um launcher no painel), então eu tive que marcar a opção "run in terminal", o que é um pouco irritante.

    
por 19.12.2014 / 00:42
-1

Para o registro, uma solução é: no KDE nós configuramos o navegador padrão para rodar com o seguinte comando:

firefox -P "default"

onde "padrão" é o nosso perfil que queremos usar a cada vez.

Agora, iniciamos nossa instância do Firefox sem argumentos (o iniciador padrão do KDE Firefox). Isso abre o Firefox normalmente, agora queremos abrir outro perfil, para isso, fazemos outro lançador no editor de menu do KDE:

firefox -ProfileManager -no-remote %u

Isso abre o gerenciador de perfis, escolhemos qual perfil usar.

Testado em vários perfis em execução simultânea, quando clicamos em um URL de qualquer aplicativo (como um cliente de bate-papo), uma nova guia é aberta no perfil que escolhemos.

Espero que alguém ache isto útil:).

Não foi testado no Gnome, mas espero que possa ser replicado.

    
por 12.10.2012 / 01:52