Firefox, dwie maszyny z systemem Linux, jeden serwer X.

10

Mam komputer z systemem Linux, na który regularnie loguję się za pośrednictwem ssh (putty) z systemu Windows. Korzystam z VcXsrv X-server na pulpicie Windows. Używam tego głównie do uruchomienia debuggera (ddd) i firefox, aby uzyskać dostęp do naszego internetowego systemu oceny kodu. Wygodne jest korzystanie z firefoxa dla Linuksa, dzięki czemu mogę uruchomić go ze skryptu. Zwykle uruchamiam to z „-new-tab”, aby nie tworzyć nowych okien.

Teraz mam nową aktualizację komputera z systemem Linux, który na razie pracuję obok starego. Zauważyłem dziwne zachowanie: kiedy uruchamiam nową sesję firefox, jeśli taka jest już uruchomiona na którejkolwiek maszynie, wtedy z niej korzysta.

To, co chciałbym móc zrobić, to nadal uruchamiać się jako nowa karta, ale tylko pod instancją firefox z bieżącego komputera, a nie z innej maszyny, która bywa wyświetlana na tym samym serwerze X.

Bawiłem się różnymi flagami, w tym -no-remote, -new instance, a także definiowaniem i używaniem konkretnych profili. Jednak nie byłem w stanie uzyskać pożądanego rezultatu. Albo dostaję zachowanie, które opisałem powyżej, albo pojawia się błąd, mówiąc: „Firefox już działa, ale nie odpowiada, proszę go zamknąć”.

EDYCJA: Poproszono mnie o edycję tego, aby podać kilka przykładów.

OK. W dalszej części będę odnosił się do M_OLD i M_NEW. Są to osobne maszyny z różnymi wersjami systemu Linux z różnymi wersjami Firefoksa (1.5 i 19). Łączę się z nimi za pośrednictwem klienta ssh o nazwie Putty i przesyłam X na serwer X na pulpicie Windows. W grę wchodzi tylko jeden serwer X.

Przykład 1:

Więc od mojej sesji szpachlowania do M_OLD uruchamiam:

firefox www.google.com &

i z mojej sesji szpachlowania M_NEW uruchamiam:

firefox www.imdb.com &

wtedy dostaję jedno okno Firefoksa 1.5 z dwiema zakładkami. Jeśli zrobię to samo w odwrotnej kolejności, otrzymam ten sam wynik, ale z firefoxem 19. Innymi słowy, jak opisano w komentarzu poniżej, pierwsze polecenie uruchamia instancję firefoxa, drugie po prostu informuje istniejące wystąpienie, aby otworzyło nową kartę. Nawet jeśli instancja znajduje się na innym komputerze, o ile jest to ten sam serwer X.

Jednak tego nie chcę. Chcę mieć osobne instancje dla osobnych maszyn. Więc:

Przykład 2:

Więc od mojej sesji szpachlowania do M_OLD uruchamiam:

firefox -no-remote www.google.com &

i z mojej sesji szpachlowania M_NEW uruchamiam:

firefox -no-remote www.imdb.com &

Teraz mam dwa osobne wystąpienia firefoxa. Jeśli jednak uruchomię M_NEW:

firefox -no-remote www.google.com &

Zdobędę

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.

a nawet jeśli spróbuję

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

Lub tylko

firefox -new-instance www.google.com &

wtedy nadal dostaję błąd.

Naprawdę chcę - i może nie być to możliwe - mieć osobną instancję dla każdej maszyny, ale jeśli nowy adres URL zostanie uruchomiony z tej maszyny, otworzy się nowa karta. Wygląda na to, że mogę mieć tylko jedno wystąpienie z nowymi kartami dla każdego adresu URL lub jedno wystąpienie na maszynę, ale tylko jedno na raz.

Mam nadzieję, że to jest jaśniejsze.

PaulM
źródło
Czy możesz to wyjaśnić? Jakie znaczenie ma nowa maszyna Linux? Przesyłasz X na komputer z systemem Windows, prawda? Czy jesteś podłączony do obu urządzeń Linux jednocześnie? Podaj więcej szczegółów na temat sposobu łączenia się z każdym urządzeniem.
terdon
OK, więc kiedy problem wystąpi, jesteś ssh -Xpoprawnie podłączony do obu komputerów ?
terdon
Tak, przesyłam X na mój komputer z systemem Windows. Tak, jestem podłączony do obu. Nowa maszyna jest odpowiednia, ponieważ uruchamiam z niej również Firefox. Jednak zamiast uruchamiać nową instancję Firefoksa, otwiera ona nową kartę w istniejącej instancji - tę, która została uruchomiona ze starego komputera. To tak, jakby nowy proces firefox sprawdzał, czy firefox działa na tym serwerze X, a jeśli tak, wysyła mu komunikat o otwarciu nowej karty. Co jest bardzo sprytne, ale nie to, czego chcę. „Stary” i „nowy” jest istotny tylko w takim stopniu, w jakim są to bardzo różne wersje Firefoksa. Ma sens?
PaulM
1
To, co opisujesz, jest normalne (jak się zdziwiłem), ale nie rozumiem, jak to nie jest naprawione, kiedy --no-remotebiegasz. Czy możesz edytować swoje pytanie i powiedzieć nam, kiedy pojawi się komunikat „Firefox już działa”? Uruchomione firefox -no-remote powinno uruchomić nową instancję firefox działającą na zdalnym komputerze, ale wyświetlaną na lokalnym serwerze X.
terdon
1
Myślę, że możesz także dodać -p np -p -no-remote. Pozwala to rozpocząć od nowego profilu Fx. Zobacz Opcje wiersza poleceń . Aby połączyć się z istniejącym procesem Fx, możesz spróbować firefox https://www.mozilla.orglubfirefox -remote "openURL(https://www.mozilla.org, new-tab)"
vWil

Odpowiedzi:

1

Odrębne instancje Firefoksa (np. Utworzone za pomocą --no-remote) muszą mieć osobne profile.

Opcja 1: Utwórz dwa (lub więcej) profile, po jednym dla każdego systemu z Firefoxem. Przykład

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

Teraz uruchom Firefoksa i wybierz profil przy uruchomieniu

firefox --no-remote -P localuser

lub

firefox --no-remote -P host1

Opcja 2: Skonfiguruj dynamiczne rozwiązanie, aby utworzyć profil „jednorazowy” przy uruchamianiu, np. Skok po linii:

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

Możesz później dodać kroki, aby usunąć profil tymczasowy (direcotry do usunięcia można znaleźć, analizując dane wyjściowe polecenia CreateProfile, zapisanego za pomocą powyższego polecenia w /tmp/.mozprofile.$TEMPPROFILE

Johan
źródło
już tego próbowałem - patrz „przykład 2”
PaulM
Ach tak, prawda - różne instancje muszą korzystać z różnych profili.
Johan
Pierwsza zaproponowana przez Ciebie „opcja” nie miała żadnego sensu, więc zaproponowałem, aby usunąć ją z twojej odpowiedzi.
SamB
Chociaż tak naprawdę może działać bez -no-remote...
SamB
0

Ok ... nie wiem, czy to zadziała, ale najpierw spróbuję:

A może utworzysz drugi skrypt na każdym komputerze, który nie próbuje utworzyć nowej karty, tylko nową instancję. Jeśli nie masz FF aktualnie uruchomionego na tym komputerze, użyj tego nowego skryptu, ale jeśli już działa, użyj starego skryptu, który tworzy nową kartę.

Jeśli to zadziała, być może będziesz w stanie wykonać parsowanie wyrażeń regularnych wyjścia ps w jednym skrypcie, aby sprawdzić, czy FF jest już uruchomiony na komputerze, i użyj przełącznika -new-tab lub -no-remote, w zależności od tego, co znaleziska; ale prawdopodobnie chcesz poczekać, aż ta metoda zostanie przetestowana, ponieważ jest to dość dużo kodowania czegoś, co może nie działać ...

Usługi CB
źródło
brzmi, jakby to mogło zadziałać - ale zrezygnowałem z tego. Wkrótce M_OLD zostanie wycofany z eksploatacji.
PaulM
0

Patrząc na XRemoteClient.cpp , myślę, że powinieneś zrobić:

user@host1$ firefox -CreateProfile profile1

i:

user@host2$ firefox -CreateProfile profile2

Następnie, gdy chcesz gdzieś pójść, zrób coś takiego

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

lub cóż, myślę, że możesz zgadnąć, co zrobić na hoście 2.

Oczywiście możesz wybrać lepsze nazwiska. Nie powinno też mieć większego znaczenia, jak tworzysz profile. Ważną rzeczą jest określenie nazwy profilu w wierszu polecenia przy każdym jego wywołaniu, gdzie każda instancja ma własną nazwę profilu.

To może nawet zadziałać .

SamB
źródło
0

Mam tutaj dość eleganckie rozwiązanie , jeśli nadal potrzebujesz. Na razie mam 5 niezależnych instancji firefoxa i tyle, ile chcę.

tmh1999
źródło