Firefox, due macchine Linux, un X-server


10

Ho una macchina Linux a cui accedo regolarmente tramite ssh (putty) da Windows. Sto eseguendo VcXsrv X-server sul mio desktop di Windows. Lo uso principalmente per eseguire un debugger (ddd) e firefox per accedere al nostro sistema di revisione del codice basato sul web. È conveniente usare Linux Firefox in modo da poterlo avviare da uno script. Di solito lancio questo con "-new-tab" per non continuare a creare nuove finestre.

Ora ho un nuovo aggiornamento della macchina Linux che sto correndo accanto a quello vecchio per il momento. Quello che ho notato è un comportamento strano: quando lancio una nuova sessione di Firefox se ce n'è già una in esecuzione su una delle due macchine, la usa.

Quello che mi piacerebbe poter fare è ancora lanciare come una nuova scheda ma solo sotto l'istanza di firefox dalla macchina corrente, non un'istanza di una macchina diversa che viene visualizzata sullo stesso X-server.

Ho giocato con varie bandiere tra cui -no-remote, -new-istanza e anche la definizione e l'utilizzo di profili specifici. Tuttavia, non sono stato in grado di ottenere il risultato desiderato. O ottengo il comportamento che ho descritto sopra o ho un errore che dice qualcosa come "Firefox è già in esecuzione ma non risponde, per favore chiudilo".

EDIT: mi è stato chiesto di modificarlo per fornire alcuni esempi.

OK. Di seguito farò riferimento a M_OLD e M_NEW. Si tratta di macchine separate che eseguono diverse versioni di Linux con diverse versioni di Firefox (1.5 e 19). Mi collego a entrambi tramite un client SSH chiamato Putty e inoltro X a un server X sul desktop di Windows. C'è solo un server X coinvolto.

Esempio 1:

Quindi dalla mia sessione di stucco a M_OLD corro:

firefox www.google.com &

e dalla mia sessione di stucco M_NEW corro:

firefox www.imdb.com &

poi ottengo una finestra di Firefox 1.5 con due schede. Se faccio lo stesso al contrario, ottengo lo stesso risultato ma con Firefox 19. In altre parole, come descritto in un commento qui sotto, il primo comando avvia un'istanza di Firefox, il secondo dice semplicemente all'istanza esistente di aprire una nuova scheda. Anche se l'istanza si trova su un altro computer, purché si tratti dello stesso server X.

Comunque non lo voglio. Voglio avere istanze separate per macchine separate. Così:

Esempio 2:

Quindi dalla mia sessione di stucco a M_OLD corro:

firefox -no-remote www.google.com &

e dalla mia sessione di stucco M_NEW corro:

firefox -no-remote www.imdb.com &

Ora ho due istanze separate di firefox. Tuttavia, se corro su M_NEW:

firefox -no-remote www.google.com &

prenderò

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 anche se ci provo

firefox -no-remote -new-instance www.google.com &

o solo

firefox -new-instance www.google.com &

allora avrò ancora l'errore.

Quello che voglio davvero - e potrebbe non essere possibile - è avere un'istanza separata per ogni macchina ma se un nuovo URL viene lanciato da quella macchina apre una nuova scheda. Sembra che posso avere solo un'istanza con nuove schede per ciascun URL o un'istanza per macchina, ma solo una alla volta.

Spero sia più chiaro.


Potresti chiarire? In che modo è rilevante la nuova macchina Linux? Stai inoltrando X sul tuo computer Windows, giusto? Sei connesso a entrambi i box Linux contemporaneamente? Si prega di fornire qualche dettaglio in più su come connettersi ad ogni box.
terdon,

OK, quindi quando si verifica il problema sei collegato a entrambe le macchine con ssh -Xcorretto?
terdon,

Sì, sto inoltrando X sul mio computer Windows. Sì, sono collegato ad entrambi. La nuova macchina è rilevante perché sto anche lanciando Firefox da essa. Tuttavia, invece di avviare una nuova istanza di firefox, apre una nuova scheda nell'istanza esistente, quella avviata dalla vecchia macchina. È come se il nuovo processo firefox controlla se firefox è in esecuzione su quel server X e in tal caso invia un messaggio per aprire una nuova scheda. Il che è molto intelligente, ma non quello che voglio. Il "vecchio" e il "nuovo" sono rilevanti solo nella misura in cui sono versioni molto diverse di firefox. Ha senso?
PaulM

1
Quello che stai descrivendo è normale (come ho scoperto con mia sorpresa), non capisco come non sia stato risolto durante l'esecuzione --no-remote. Potresti modificare la tua domanda e dirci quando viene visualizzato il messaggio "Firefox già in esecuzione"? In esecuzione firefox -no-remote dovrebbe avviare una nuova istanza di Firefox in esecuzione sul computer remoto ma visualizzata sul server X locale.
terdon,

1
Penso che potresti anche dover aggiungere -p ad es -p -no-remote. Ciò consente di iniziare con un nuovo profilo Fx. Vedi Opzioni della riga di comando . Per connetterti al processo Fx esistente puoi provare firefox https://www.mozilla.orgoppurefirefox -remote "openURL(https://www.mozilla.org, new-tab)"
vWil

Risposte:


1

Le istanze distinte di Firefox (ad es. Create con --no-remote) devono avere profili separati.

Opzione 1: creare due (o più) profili, uno per ciascun sistema che esegue Firefox. Esempio

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

Ora avvia firefox e seleziona un profilo all'avvio

firefox --no-remote -P localuser

o

firefox --no-remote -P host1

Opzione 2: impostare una soluzione dinamica per creare un profilo "usa e getta" all'avvio, ad es. Un messaggio lungo le linee di:

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

Potresti voler aggiungere passaggi per rimuovere il profilo temporaneo in seguito (La directory da rimuovere può essere trovata analizzando l'output dal comando CreateProfile, memorizzato tramite il comando sopra in /tmp/.mozprofile.$TEMPPROFILE


già provato - vedi "esempio 2"
PaulM,

Ah sì, vero - istanze distinte devono usare profili diversi.
Johan

La prima "opzione" che hai proposto non aveva alcun senso, davvero, quindi ho proposto di rimuoverla dalla tua risposta.
SamB,

Anche se, in realtà, potrebbe funzionare senza il -no-remote...
SamB,

0

Ok ... non so se funzionerà, ma è la prima cosa che proverei:

Che ne dici se crei un secondo script su ogni macchina, che non tenta di creare la nuova scheda, solo una nuova istanza. Se non hai FF attualmente in esecuzione su quella macchina, usi questo nuovo script, ma se è già in esecuzione, usi il vecchio script che crea la nuova scheda.

Se funziona, potresti essere in grado di eseguire l'analisi regex dell'output ps in un singolo script per vedere se FF è già in esecuzione sul computer e utilizzare l'opzione -new-tab o -no-remote, a seconda di cosa reperti; ma probabilmente vorrai aspettare fino a quando questo metodo non sarà testato, dato che è una buona dose di codifica per qualcosa che potrebbe non funzionare ...


sembra che potrebbe funzionare, ma ho rinunciato a questo. M_OLD verrà presto rimosso.
PaulM,

0

Guardando XRemoteClient.cpp , penso che dovresti fare:

user@host1$ firefox -CreateProfile profile1

e:

user@host2$ firefox -CreateProfile profile2

Quindi, quando vuoi andare da qualche parte, fai qualcosa di simile

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

o, beh, penso che tu possa indovinare cosa fare su host2.

Ovviamente, puoi scegliere nomi migliori. Inoltre, non dovrebbe importare molto come si creano i profili. L'importante è specificare un nome profilo nella riga di comando ogni volta che lo si richiama, dove ogni istanza ha il proprio nome profilo.

Questo potrebbe anche funzionare .


0

Ho una soluzione abbastanza elegante qui se hai ancora bisogno. Per ora ho, come, 5 istanze indipendenti di Firefox in esecuzione e quanto voglio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.