Firefox, duas máquinas Linux, um servidor X


10

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.


Você poderia esclarecer? Como a nova máquina Linux é relevante? Você está encaminhando o X para a sua máquina Windows, certo? Você está conectado às duas caixas Linux ao mesmo tempo? Forneça mais detalhes sobre como você se conecta a cada caixa.
terdon

OK, então quando o problema ocorre, você está conectado às duas máquinas ssh -Xcorretamente?
terdon

Sim, estou encaminhando o X para minha máquina Windows. Sim, eu estou conectado aos dois. A nova máquina é relevante porque também estou lançando o Firefox. No entanto, em vez de iniciar uma nova instância do firefox, ele abre uma nova guia na instância existente - aquela que foi lançada da máquina antiga. É como se o novo processo do firefox verifique se o firefox está sendo executado no servidor X e, se for o caso, envie uma mensagem para abrir uma nova guia. O que é muito inteligente, mas não o que eu quero. O "antigo" e o "novo" são relevantes apenas na medida em que são versões muito diferentes do firefox. Faz sentido?
21713 PaulM

1
O que você está descrevendo é normal (como descobri para minha surpresa), não entendo como isso não é corrigido ao executar com ele --no-remote. Você pode editar sua pergunta e nos dizer quando receber a mensagem "O Firefox já está em execução"? A execução firefox -no-remote deve iniciar uma nova instância do firefox em execução na máquina remota, mas exibida no servidor X local.
terdon

1
Eu acho que você também pode ter que adicionar -p, por exemplo -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 tentar firefox https://www.mozilla.orgoufirefox -remote "openURL(https://www.mozilla.org, new-tab)"
vWil

Respostas:


1

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

firefox --no-remote -CreateProfile localuser
firefox --no-remote -CreateProfile host2

Agora inicie o firefox e selecione um perfil na inicialização

firefox --no-remote -P localuser

ou

firefox --no-remote -P host1

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:

TEMPPROFILE=$(date +%Y%m%d%H%M%S)
firefox --no-remote -CreateProfile $TEMPPROFILE 2>/tmp/.mozprofile.$TEMPPROFILE
firefox --no-remote -P $TEMPPROFILE

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


ja tentei isso - veja o "exemplo 2"
PaulM 15/01/14

Ah, sim, é verdade - instâncias distintas precisam usar perfis diferentes.
Johan

A primeira "opção" que você propôs não fazia nenhum sentido, na verdade, então propus que ela fosse removida da sua resposta.
SamB

Embora, na verdade, ele poderia funcionar sem a -no-remote...
Samb

0

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 ...


parece que pode funcionar - mas desisti disso. M_OLD será desativado em breve.
PaulM

0

Olhando para o XRemoteClient.cpp , acho que você deve fazer:

user@host1$ firefox -CreateProfile profile1

e:

user@host2$ firefox -CreateProfile profile2

Então, quando você quiser ir a algum lugar, faça algo como

user@host1$ firefox -P profile1 -new-tab http://example.com

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 .


0

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.