Firefox, zwei Linux-Maschinen, ein X-Server


10

Ich habe einen Linux-Computer, bei dem ich mich regelmäßig über ssh (putty) von Windows aus anmelde. Ich verwende den VcXsrv X-Server auf meinem Windows-Desktop. Ich verwende dies hauptsächlich, um einen Debugger (ddd) und Firefox auszuführen und auf unser webbasiertes Codeüberprüfungssystem zuzugreifen. Es ist praktisch, das Linux-Firefox zu verwenden, damit ich es über ein Skript starten kann. Normalerweise starte ich dies mit "-new-tab", um keine neuen Fenster zu erstellen.

Jetzt habe ich eine neue Linux-Update-Maschine, die ich vorerst neben der alten laufe. Was mir aufgefallen ist, ist ein merkwürdiges Verhalten: Wenn ich eine neue Firefox-Sitzung starte, wenn auf einem der Computer bereits eine ausgeführt wird, wird diese verwendet.

Ich möchte in der Lage sein, immer noch als neue Registerkarte zu starten, jedoch nur unter der Instanz von Firefox vom aktuellen Computer, nicht als Instanz von einem anderen Computer, der zufällig auf demselben X-Server angezeigt wird.

Ich habe mit verschiedenen Flags herumgespielt, darunter -no-remote, -new-instance und auch bestimmte Profile definiert und verwendet. Ich konnte jedoch nicht das gewünschte Ergebnis erzielen. Entweder erhalte ich das oben beschriebene Verhalten oder es wird eine Fehlermeldung angezeigt, die besagt, dass "Firefox bereits ausgeführt wird, aber nicht reagiert, bitte schließen Sie es".

BEARBEITEN: Ich wurde gebeten, dies zu bearbeiten, um einige Beispiele zu liefern.

OKAY. Im Folgenden werde ich auf M_OLD und M_NEW verweisen. Hierbei handelt es sich um separate Computer, auf denen verschiedene Linux-Versionen mit verschiedenen Firefox-Versionen (1.5 und 19) ausgeführt werden. Ich verbinde mich über einen SSH-Client namens Putty mit beiden und leite X an einen X-Server auf meinem Windows-Desktop weiter. Es ist nur ein X-Server beteiligt.

Beispiel 1:

Von meiner Kitt-Sitzung zu M_OLD laufe ich also:

firefox www.google.com &

und von meiner M_NEW-Kitt-Sitzung starte ich:

firefox www.imdb.com &

dann bekomme ich ein Firefox 1.5-Fenster mit zwei Registerkarten. Wenn ich das Gleiche in umgekehrter Reihenfolge mache, erhalte ich das gleiche Ergebnis, jedoch mit Firefox 19. Mit anderen Worten, wie in einem Kommentar unten beschrieben, startet der erste Befehl eine Instanz von Firefox, der zweite weist die vorhandene Instanz einfach an, eine neue Registerkarte zu öffnen. Auch wenn sich die Instanz auf einem anderen Computer befindet, solange es sich um denselben X-Server handelt.

Das will ich aber nicht. Ich möchte separate Instanzen für separate Maschinen haben. Damit:

Beispiel 2:

Von meiner Kitt-Sitzung zu M_OLD laufe ich also:

firefox -no-remote www.google.com &

und von meiner M_NEW-Kitt-Sitzung starte ich:

firefox -no-remote www.imdb.com &

Jetzt habe ich zwei separate Instanzen von Firefox. Wenn ich dann aber auf M_NEW laufe:

firefox -no-remote www.google.com &

Ich werde bekommen

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.

und selbst wenn ich es versuche

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

oder nur

firefox -new-instance www.google.com &

dann bekomme ich trotzdem den fehler.

Was ich wirklich möchte - und es ist möglicherweise nicht möglich - ist, für jeden Computer eine separate Instanz zu haben. Wenn jedoch eine neue URL von diesem Computer aus gestartet wird, wird eine neue Registerkarte geöffnet. Es scheint, als ob ich entweder nur eine Instanz mit neuen Registerkarten für jede URL oder eine Instanz pro Computer haben kann, aber jeweils nur eine.

Hoffentlich ist das klarer.


Könnten Sie das klarstellen? Wie ist die neue Linux-Maschine relevant? Sie leiten X an Ihren Windows-Computer weiter, oder? Sind Sie gleichzeitig mit beiden Linux-Boxen verbunden? Bitte geben Sie weitere Einzelheiten dazu an, wie Sie eine Verbindung zu den einzelnen Boxen herstellen.
Terdon

OK, wenn das Problem auftritt, sind Sie mit beiden Computern ssh -Xkorrekt verbunden?
Terdon

Ja, ich leite X an meinen Windows-Computer weiter. Ja, ich bin mit beiden verbunden. Die neue Maschine ist relevant, weil ich auch Firefox von dort aus starte. Anstatt jedoch eine neue Instanz von Firefox zu starten, wird in der vorhandenen Instanz eine neue Registerkarte geöffnet - die, die vom alten Computer gestartet wurde. Es ist, als ob der neue Firefox-Prozess prüft, ob Firefox auf diesem X-Server ausgeführt wird, und in diesem Fall eine Nachricht zum Öffnen eines neuen Tabs sendet. Welches ist sehr klug, aber nicht was ich will. Das "Alte" und "Neue" ist nur insoweit relevant, als es sich um sehr unterschiedliche Versionen von Firefox handelt. Sinn ergeben?
PaulM

1
Was Sie beschreiben, ist normal (wie ich zu meiner Überraschung herausgefunden habe), ich verstehe jedoch nicht, wie es beim Laufen nicht behoben wird --no-remote. Könnten Sie Ihre Frage bearbeiten und uns mitteilen, wann die Meldung "Firefox läuft bereits" angezeigt wird? Beim Ausführen firefox -no-remote sollte eine neue Firefox-Instanz gestartet werden, die auf dem Remotecomputer ausgeführt wird, aber auf Ihrem lokalen X-Server angezeigt wird.
Terdon

1
Ich denke, Sie müssen möglicherweise auch -p hinzufügen, z -p -no-remote. Dies ermöglicht es, mit einem neuen Fx-Profil zu beginnen. Siehe Befehlszeilenoptionen . Um eine Verbindung zum bestehenden Fx Prozess könnten Sie versuchen , firefox https://www.mozilla.orgoderfirefox -remote "openURL(https://www.mozilla.org, new-tab)"
vWil

Antworten:


1

Bestimmte Firefox-Instanzen (z. B. erstellt mit --no-remote) müssen separate Profile haben.

Option 1: Erstellen Sie zwei (oder mehr) Profile, eines für jedes System, auf dem Firefox ausgeführt wird. Beispiel

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

Starten Sie nun Firefox und wählen Sie beim Start ein Profil aus

firefox --no-remote -P localuser

oder

firefox --no-remote -P host1

Option 2: Richten Sie eine dynamische Lösung ein, um beim Start ein "Einweg" -Profil zu erstellen, z. B. einen Scrupt wie folgt:

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

Möglicherweise möchten Sie Schritte hinzufügen, um das temporäre Profil anschließend zu entfernen. (Das zu entfernende Verzeichnis kann durch Analysieren der Ausgabe des Befehls CreateProfile ermittelt werden, der über den obigen Befehl in /tmp/.mozprofile.$TEMPPROFILE gespeichert wird


habe das schon versucht - siehe "Beispiel 2"
PaulM

Ah ja, wahr - unterschiedliche Instanzen müssen unterschiedliche Profile verwenden.
Johan

Die erste "Option", die Sie vorgeschlagen haben, ergab überhaupt keinen Sinn, daher habe ich vorgeschlagen, sie aus Ihrer Antwort zu entfernen.
SamB

Obwohl es tatsächlich funktionieren könnte ohne -no-remote...
SamB

0

Ok ... ich weiß nicht, ob das funktionieren wird, aber es ist das erste, was ich versuchen würde:

Wie wäre es, wenn Sie auf jedem Computer ein zweites Skript erstellen, das nicht versucht, die neue Registerkarte zu erstellen, sondern nur eine neue Instanz. Wenn auf diesem Computer derzeit kein FF ausgeführt wird, verwenden Sie dieses neue Skript. Wenn es jedoch bereits ausgeführt wird, verwenden Sie das alte Skript, mit dem die neue Registerkarte erstellt wird.

Wenn dies funktioniert, können Sie möglicherweise die ps-Ausgabe in einem einzigen Skript regulär analysieren, um festzustellen, ob FF bereits auf dem Computer ausgeführt wird, und je nach Verfügbarkeit entweder den Schalter -new-tab oder -no-remote verwenden findet; Aber Sie möchten wahrscheinlich warten, bis diese Methode getestet wurde, da es sich um eine Menge Codierung für etwas handelt, das möglicherweise nicht funktioniert.


das klingt so, als würde es funktionieren - aber ich habe das aufgegeben. M_OLD wird bald außer Betrieb genommen.
PaulM

0

Wenn Sie sich XRemoteClient.cpp ansehen , sollten Sie Folgendes tun:

user@host1$ firefox -CreateProfile profile1

und:

user@host2$ firefox -CreateProfile profile2

Wenn Sie dann irgendwohin wollen, machen Sie so etwas wie

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

oder ich denke, Sie können sich vorstellen, was auf host2 zu tun ist.

Natürlich können Sie bessere Namen auswählen. Es sollte auch nicht viel ausmachen, wie Sie die Profile erstellen. Wichtig ist, dass Sie bei jedem Aufruf einen Profilnamen in der Befehlszeile angeben , wobei jede Instanz ihren eigenen Profilnamen hat.

Dies könnte sogar funktionieren .


0

Ich habe hier eine ziemlich elegante Lösung , wenn Sie noch brauchen. Im Moment laufen ungefähr 5 unabhängige Instanzen von Firefox und so viel ich will.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.