Eu tenho uma máquina Linux em que logon regularmente via ssh (putty) no Windows. Estou executando o servidor X do VcXsrv na área de trabalho do Windows. Uso principalmente isso para executar um depurador (ddd) e o firefox para acessar nosso sistema de revisão de código baseado na Web. É conveniente usar o Firefox Firefox, para que eu possa iniciá-lo a partir de um script. Normalmente inicio isso com "-new-tab" para não continuar criando novas janelas.
Agora eu tenho uma nova máquina Linux de atualização que estou executando ao lado da antiga por enquanto. O que eu notei é um comportamento estranho: quando inicio uma nova sessão do firefox, se já houver uma em execução em qualquer máquina, ela será usada.
O que eu gostaria de fazer ainda é iniciar como uma nova guia, mas apenas sob a instância do firefox da máquina atual, não uma instância de uma máquina diferente que, por acaso, está sendo exibida no mesmo servidor X.
Venho brincando com vários sinalizadores, incluindo -no-remote, -new-instance e também definindo e usando perfis específicos. No entanto, não consegui obter o resultado desejado. Ou recebo o comportamento descrito acima ou recebo um erro dizendo algo como "O Firefox já está em execução, mas não está respondendo, feche-o".
EDIT: Pediram-me para editar isso para fornecer alguns exemplos.
ESTÁ BEM. A seguir, vou me referir a M_OLD e M_NEW. São máquinas separadas executando versões diferentes do Linux com versões diferentes do Firefox (1.5 e 19). Eu me conecto a eles através de um cliente ssh chamado Putty e estou encaminhando o X para um servidor X na área de trabalho do Windows. Há apenas um servidor X envolvido.
Exemplo 1:
Então, da minha sessão de massa para M_OLD, eu corro:
firefox www.google.com &
e da minha sessão de massa M_NEW eu corro:
firefox www.imdb.com &
então eu recebo uma janela do firefox 1.5 com duas guias. Se eu fizer o mesmo no sentido inverso, obtenho o mesmo resultado, mas com o firefox 19. Em outras palavras, como descrito em um comentário abaixo, o primeiro comando lança uma instância do firefox e o segundo simplesmente diz à instância existente para abrir uma nova guia. Mesmo que a instância esteja em outra máquina, desde que seja o mesmo servidor X.
No entanto, eu não quero isso. Eu quero ter instâncias separadas para máquinas separadas. Assim:
Exemplo 2:
Então, da minha sessão de massa para M_OLD, eu corro:
firefox -no-remote www.google.com &
e da minha sessão de massa M_NEW eu corro:
firefox -no-remote www.imdb.com &
Agora eu tenho duas instâncias separadas do firefox. No entanto, se eu executar no M_NEW:
firefox -no-remote www.google.com &
Eu vou pegar
Firefox is already running, but is not responding. To open a new window, you must first close the existing Firefox process, or restart your system.
e mesmo se eu tentar
firefox -no-remote -new-instance www.google.com &
ou apenas
firefox -new-instance www.google.com &
então ainda vou receber o erro.
O que eu realmente quero - e talvez não seja possível - é ter uma instância separada para cada máquina, mas se um novo URL for lançado a partir dessa máquina, ele abrirá uma nova guia. Parece que só posso ter uma instância com novas guias para cada URL ou uma instância por máquina, mas apenas uma de cada vez.
Espero que seja mais claro.
ssh -X
corretamente?--no-remote
. Você pode editar sua pergunta e nos dizer quando receber a mensagem "O Firefox já está em execução"? A execuçãofirefox -no-remote
deve iniciar uma nova instância do firefox em execução na máquina remota, mas exibida no servidor X local.-p -no-remote
. Isso permite começar com um novo perfil de FX. Consulte Opções de linha de comando . Para conectar-se o processo de Fx existente você poderia tentarfirefox https://www.mozilla.org
oufirefox -remote "openURL(https://www.mozilla.org, new-tab)"
Respostas:
Instâncias distintas do Firefox (por exemplo, criadas com
--no-remote
) devem ter perfis separados.Opção 1: Crie dois (ou mais) perfis, um para cada sistema executando o Firefox. Exemplo
Agora inicie o firefox e selecione um perfil na inicialização
ou
Opção 2: configure uma solução dinâmica para criar um perfil "descartável" na inicialização, por exemplo, uma ruptura ao longo das linhas de:
Convém adicionar etapas para remover o perfil temporário posteriormente (o diretório a remover pode ser encontrado analisando a saída do comando CreateProfile, armazenada por meio do comando acima em /tmp/.mozprofile.$TEMPPROFILE
fonte
-no-remote
...Ok ... não sei se isso vai funcionar, mas é a primeira coisa que eu tentaria:
Que tal se você criar um segundo script em cada máquina, que não tente criar a nova guia, apenas uma nova instância. Se você não tiver o FF atualmente em execução nessa máquina, use este novo script, mas se já estiver em execução, use o script antigo que cria a nova guia.
Se isso funcionar, você poderá fazer uma análise regex da saída ps em um único script para verificar se o FF já está em execução na máquina e usar a opção -new-tab ou -no-remote, dependendo do que encontra; mas você provavelmente quer esperar até que esse método seja testado, pois é uma boa quantidade de codificação para algo que pode não funcionar ...
fonte
Olhando para o XRemoteClient.cpp , acho que você deve fazer:
e:
Então, quando você quiser ir a algum lugar, faça algo como
ou, bem, acho que você pode adivinhar o que fazer no host2.
Obviamente, você pode escolher nomes melhores. Também não importa muito como você cria os perfis. O importante é especificar um nome de perfil na linha de comandos toda vez que você o chamar, onde cada instância terá seu próprio nome de perfil.
Isso pode até funcionar .
fonte
Eu tenho uma solução bastante elegante aqui, se você ainda precisar. Por enquanto, eu tenho 5 instâncias independentes de execução do firefox e o quanto eu quiser.
fonte