Desculpe pela resposta tardia de três anos, fiquei interessado neste tópico agora e encontrei esta pergunta.
Como não encontrei uma solução documentada em nenhum lugar, verifiquei o código-fonte e aqui está uma parte muito relevante:
http://dxr.mozilla.org/mozilla-central/source/toolkit/xre/nsAppRunner.cpp#1537
Aqui, o nullptr no final da linha infelizmente significa que o argumento do perfil não está sendo passado para a função SendCommandLine; portanto, não é possível selecionar a janela correta do firefox para a qual enviar a mensagem de abertura.
No entanto, vemos que o nome de usuário está sendo passado e que ele está sendo desativado a partir da variável de ambiente LOGNAME. Com base nisso, eu vim com a seguinte solução:
- Eu envolvo o firefox com este script, chamado firefox.sh:
FOX_PROFILE = facebook
exportar LOGNAME = erro. $ FOX_PROFILE
/ opt / firefox / perfil do firefox ~ / .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 ou não querer usar:
#! / bin / bash
set -e
FOX = / opt / firefox / firefox
MESSAGE = $ @
if [-z "$ FOX_PROFILE"]; então
if [-z "$ {MENSAGEM}"]; então
FOX_PROFILE = padrão
outro
FOX_PROFILE = $ (kdialog - padrão padrão - menu "- $ {MESSAGE} -" padrão padrão google google facebook facebook erro erro erro spam)
fi
fi
exportar FOX_PROFILE
# Esse hack é necessário, porque o envio remoto da linha de comando do firefox
# ignora o parâmetro profile. Consulte nsAppRunner.cpp: 1505.
exportar LOGNAME = erro. $ FOX_PROFILE
# Usando a execução em segundo plano em vez de exec, para que o comportamento seja
# consistente quando o perfil já está sendo executado e quando é apenas
# Começando.
Perfil de $ FOX ~ / .mozilla_profiles / $ FOX_PROFILE "$ @"
# Enorme sucesso.
saída 0
Se você executar o script sem nenhum parâmetro, ele selecionará automaticamente o perfil padrão, mas poderá substituí-lo configurando FOX_PROFILE manualmente no shell. Se um URL é passado na linha de comando, ele sempre solicita um perfil para abri-lo, é porque eu clico principalmente no meu programa de bate-papo e e-mail e, nesse caso, quero sempre selecionar um perfil (google for calendar spam, facebook para spam de aniversário, etc.). Claro que você pode alterar a lógica para se adequar ao seu estilo de uso; este é apenas um exemplo, o conhecimento importante é o truque 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 LOGNAME correto, não poderá mais se comunicar com esse perfil. Coloquei esse script como o primeiro no meu caminho por meio de vários nomes com links simbólicos, como x-www-browser, firefox, sensible-browser e também na variável de ambiente BROWSER. Como fazer isso depende exatamente da sua distribuição GNU / Linux.
Se você já tem uma instância em execução, o Firefox reutilizará isso. Tente
firefox -no-remote
.fonte
@miemik
"Mas eu quero que reutilize uma instância! Somente uma específica, e nenhuma aleatória que ela goste. Se eu tentasse adicionar" -no-remote "ao meu comando, eu recebo:" O Iceweasel já está em execução, mas não está respondendo. Para abrir uma nova janela, você deve primeiro fechar o processo existente do Iceweasel ou reiniciar o sistema. "
Você tem um problema de permissão com o diretório do seu perfil ... verifique a permissão. Você o copiou ou moveu de outro lugar (partição .. disco ..)?
Solução:
Torne-se root e execute o top para ver se está sendo executado como root. Então ls -ld no diretório dir (que deve estar em seu diretório inicial com um ponto (.) Na frente deles .. significa que você precisa usar "ls -al" para vê-lo.
Verifique outra permissão desse diretório e altere de acordo.
Felicidades!
fonte
Isso não vai funcionar. A única maneira de ter duas instâncias de um aplicativo Mozilla em execução é desativando as conexões remotas com a segunda (geralmente com MOZ_NO_REMOTE = 1). Isso significa que você desabilita a capacidade de se comunicar com outras instâncias (como a criação de uma nova página).
Portanto, suas escolhas são abrir um novo aplicativo com
no remote
ativado ou reutilizar a instância que permite acesso remoto.fonte
Você poderá adicionar a
-no-remote
apenas a chamada de perfil de teste (depois que o perfil de software já estiver aberto) assim:Isso deve permitir que todos os outros links ainda sejam abertos remotamente em seu outro perfil.
Se essa solução não funcionar, você poderá sempre executar o Firefox como um usuário separado para teste, usando
sudo -u
. O Firefox realmente deve ser capaz de lidar com isso corretamente com os perfis.fonte
-no-remote
sinalizador, uma nova instância do Firefox é iniciada e a pergunta requer a reutilização das instâncias existentes do Firefox, se elas já estiverem em execução.Se você já possui o Mozilla Firefox aberto com o perfil Padrão ou outro, tente:
Testei e trabalhei para mim com o Mozilla Firefox de 2.x a 12.x
fonte
Na primeira vez que você inicia uma instância do Firefox com um determinado perfil, use o comando:
Você pode anexar um URL no final do comando acima para abri-lo. Posteriormente, quando você desejar abrir um URL nessa instância, poderá usar:
Se você estiver escrevendo um script e quiser descobrir se já existe uma instância executando esse perfil para ver qual dos comandos acima deve ser chamado, você pode usar:
Testado com o Firefox 34 no Linux.
Observe que atualmente há um bug no Firefox que faz com que ocorra um erro com a mensagem
se o
-remote openurl()
comando for feito sem um tty de controle (por exemplo, a partir de um script iniciado por um daemon).Eu acertei esse bug ao iniciar um script a partir de um arquivo .desktop no KDE (por exemplo, de um iniciador no painel), então tive que marcar a opção "executar no terminal", o que é um pouco chato.
fonte
Para o registro, uma solução é: no KDE, configuramos o navegador padrão para executar com o seguinte comando:
onde "padrão" é o nosso perfil que queremos usar sempre.
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, criamos outro iniciador no editor de menus do KDE:
Isso abre o gerenciador de perfis, escolhemos qual perfil usar.
Testada em vários perfis em execução simultaneamente, 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 isso útil :).
Não testado no Gnome, mas espero que possa ser replicado.
fonte