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.