Firefox, deux machines Linux, un serveur X

10

J'ai une machine Linux à laquelle je me connecte régulièrement via ssh (putty) à partir de Windows. J'exécute VcXsrv X-server sur mon bureau Windows. Je l'utilise principalement pour exécuter un débogueur (ddd) et firefox pour accéder à notre système de révision de code basé sur le Web. Il est pratique d'utiliser Linux Firefox pour que je puisse le lancer à partir d'un script. Je lance normalement ceci avec "-new-tab" afin de ne pas continuer à créer de nouvelles fenêtres.

Maintenant, j'ai une nouvelle machine Linux de mise à jour que j'exécute à côté de l'ancienne pour le moment. Ce que j'ai remarqué, c'est un comportement étrange: lorsque je lance une nouvelle session Firefox s'il y en a déjà une sur l'une ou l'autre machine, elle l'utilise.

Ce que j'aimerais pouvoir faire, c'est toujours lancer sous un nouvel onglet mais uniquement sous l'instance de Firefox de la machine actuelle, pas une instance d'une autre machine qui se trouve être affichée sur le même X-Server.

J'ai joué avec divers drapeaux, y compris -no-remote, -new-instance et également définir et utiliser des profils spécifiques. Cependant, je n'ai pas pu obtenir le résultat souhaité. Soit j'obtiens le comportement que j'ai décrit ci-dessus, soit je reçois une erreur disant quelque chose comme "Firefox est déjà en cours d'exécution mais ne répond pas, veuillez le fermer".

EDIT: on m'a demandé de modifier cela pour fournir des exemples.

D'ACCORD. Dans ce qui suit, je ferai référence à M_OLD et M_NEW. Il s'agit de machines distinctes exécutant différentes versions de Linux avec différentes versions de Firefox (1.5 et 19). Je me connecte à eux deux via un client ssh appelé Putty et je transfère X vers un serveur X sur mon bureau Windows. Il n'y a qu'un seul serveur X impliqué.

Exemple 1:

Donc, de ma session de mastic à M_OLD, je lance:

firefox www.google.com &

et depuis ma session M_NEW putty je lance:

firefox www.imdb.com &

puis je reçois une fenêtre firefox 1.5 avec deux onglets. Si je fais la même chose en sens inverse, j'obtiens le même résultat mais avec firefox 19. En d'autres termes, comme décrit dans un commentaire ci-dessous, la première commande lance une instance de firefox la seconde dit simplement à l'instance existante d'ouvrir un nouvel onglet. Même si l'instance se trouve sur une autre machine, tant qu'il s'agit du même serveur X.

Mais je n'en veux pas. Je veux avoir des instances distinctes pour des machines distinctes. Donc:

Exemple 2:

Donc, de ma session de mastic à M_OLD, je lance:

firefox -no-remote www.google.com &

et depuis ma session M_NEW putty je lance:

firefox -no-remote www.imdb.com &

Maintenant, j'ai deux instances distinctes de Firefox. Cependant, si je lance ensuite sur M_NEW:

firefox -no-remote www.google.com &

j'aurais

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.

et même si j'essaye

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

ou juste

firefox -new-instance www.google.com &

alors j'obtiendrai toujours l'erreur.

Ce que je veux vraiment - et ce n'est peut-être pas possible - c'est d'avoir une instance distincte pour chaque machine mais si une nouvelle URL est lancée à partir de cette machine, elle ouvre un nouvel onglet. Il semble que je ne puisse avoir qu'une seule instance avec de nouveaux onglets pour chaque URL, ou une instance par machine, mais une seule à la fois.

J'espère que c'est plus clair.

PaulM
la source
Pourriez-vous clarifier? Quelle est la pertinence de la nouvelle machine Linux? Vous transférez X vers votre machine Windows, n'est-ce pas? Êtes-vous connecté aux deux boîtiers Linux en même temps? Veuillez donner plus de détails sur la façon dont vous vous connectez à chaque boîte.
terdon
OK, donc lorsque le problème se produit, vous êtes connecté aux deux machines avec ssh -Xcorrect?
terdon
Oui, je transfère X vers ma machine Windows. Oui, je suis connecté aux deux. La nouvelle machine est pertinente car j'en lance également Firefox. Cependant, au lieu de lancer une nouvelle instance de Firefox, il ouvre un nouvel onglet dans l'instance existante - celle qui a été lancée à partir de l'ancienne machine. C'est comme si le nouveau processus firefox vérifie si firefox fonctionne sur ce serveur X et, si c'est le cas, lui envoie un message pour ouvrir un nouvel onglet. C'est très intelligent mais pas ce que je veux. L'ancien et le nouveau ne sont pertinents que dans la mesure où il s'agit de versions très différentes de Firefox. Ça a du sens?
PaulM
1
Ce que vous décrivez est normal (comme je l'ai découvert à ma grande surprise), je ne comprends pas comment cela n'est pas résolu lors de l'exécution --no-remote. Pourriez-vous modifier votre question et nous dire quand vous recevez le message "Firefox déjà en cours d'exécution"? L'exécution firefox -no-remote devrait démarrer une nouvelle instance de Firefox exécutée sur la machine distante mais affichée sur votre serveur X local.
terdon
1
Je pense que vous devrez peut-être également ajouter -p, par exemple -p -no-remote. Cela permet de commencer avec un nouveau profil Fx. Voir Options de ligne de commande . Pour vous connecter au processus Fx existant, vous pouvez essayer firefox https://www.mozilla.orgoufirefox -remote "openURL(https://www.mozilla.org, new-tab)"
vWil

Réponses:

1

Les instances distinctes de Firefox (par exemple créées avec --no-remote) doivent avoir des profils distincts.

Option 1: Créez deux profils (ou plus), un pour chaque système exécutant Firefox. Exemple

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

Maintenant, lancez Firefox et sélectionnez un profil au démarrage

firefox --no-remote -P localuser

ou

firefox --no-remote -P host1

Option 2: Mettre en place une solution dynamique pour créer un profil "jetable" au démarrage, par exemple un échec dans le sens de:

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

Vous souhaiterez peut-être ajouter des étapes pour supprimer le profil temporaire par la suite (le direcotry à supprimer peut être trouvé en analysant la sortie de la commande CreateProfile, stockée via la commande ci-dessus dans /tmp/.mozprofile.$TEMPPROFILE

Johan
la source
déjà essayé - voir "exemple 2"
PaulM
Ah oui, vrai - des instances distinctes doivent utiliser des profils différents.
Johan
La première "option" que vous avez proposée n'avait vraiment aucun sens, donc j'ai proposé qu'elle soit supprimée de votre réponse.
SamB
Mais en fait, cela pourrait fonctionner sans -no-remote...
SamB
0

D'accord ... je ne sais pas si cela fonctionnera, mais c'est la première chose que j'essaierais:

Que diriez-vous si vous créez un deuxième script sur chaque machine, qui n'essaie pas de créer le nouvel onglet, juste une nouvelle instance. Si vous n'avez pas FF en cours d'exécution sur cette machine, vous utilisez ce nouveau script, mais s'il est déjà en cours d'exécution, vous utilisez l'ancien script qui crée le nouvel onglet.

Si cela fonctionne, vous pourrez peut-être effectuer une analyse syntaxique regex de la sortie ps dans un seul script pour voir si FF est déjà en cours d'exécution sur la machine, et utiliser le commutateur -new-tab ou -no-remote, selon ce qu'il trouve; mais vous voudrez probablement attendre que cette méthode soit testée, car c'est une bonne quantité de codage pour quelque chose qui pourrait ne pas fonctionner ...

Services CB
la source
cela semble que cela pourrait fonctionner - mais tbh j'ai abandonné à ce sujet. M_OLD sera bientôt mis hors service.
PaulM
0

En regardant XRemoteClient.cpp , je pense que vous devriez faire:

user@host1$ firefox -CreateProfile profile1

et:

user@host2$ firefox -CreateProfile profile2

Ensuite, quand vous voulez aller quelque part, faites quelque chose comme

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

ou bien, je pense que vous pouvez deviner quoi faire sur host2.

De toute évidence, vous pouvez choisir de meilleurs noms. La façon dont vous créez les profils ne devrait pas non plus avoir d'importance. L'important est de spécifier un nom de profil sur la ligne de commande chaque fois que vous l'appelez, où chaque instance a son propre nom de profil.

Cela pourrait même fonctionner .

SamB
la source
0

J'ai une solution assez élégante ici si vous en avez encore besoin. Pour l'instant, j'ai, comme, 5 instances indépendantes de Firefox en cours d'exécution et autant que je veux.

tmh1999
la source