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.
ssh -X
poprawnie podłączony do obu komputerów ?--no-remote
biegasz. Czy możesz edytować swoje pytanie i powiedzieć nam, kiedy pojawi się komunikat „Firefox już działa”? Uruchomionefirefox -no-remote
powinno uruchomić nową instancję firefox działającą na zdalnym komputerze, ale wyświetlaną na lokalnym serwerze X.-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.org
lubfirefox -remote "openURL(https://www.mozilla.org, new-tab)"
Odpowiedzi:
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
Teraz uruchom Firefoksa i wybierz profil przy uruchomieniu
lub
Opcja 2: Skonfiguruj dynamiczne rozwiązanie, aby utworzyć profil „jednorazowy” przy uruchamianiu, np. Skok po linii:
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
źródło
-no-remote
...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ć ...
źródło
Patrząc na XRemoteClient.cpp , myślę, że powinieneś zrobić:
i:
Następnie, gdy chcesz gdzieś pójść, zrób coś takiego
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ć .
źródło
Mam tutaj dość eleganckie rozwiązanie , jeśli nadal potrzebujesz. Na razie mam 5 niezależnych instancji firefoxa i tyle, ile chcę.
źródło