Przepraszam za 3 lata spóźnienia, zainteresowałem się tym tematem i znalazłem to pytanie.
Nigdzie nie znalazłem udokumentowanego rozwiązania, więc sprawdziłem kod źródłowy, a tutaj jest bardzo istotna część:
http://dxr.mozilla.org/mozilla-central/source/toolkit/xre/nsAppRunner.cpp#1537
Tutaj nullptr na końcu wiersza niestety oznacza, że argument profilu nie jest przekazywany do funkcji SendCommandLine, dlatego nie można wybrać poprawnego okna firefox, do którego ma zostać wysłana wiadomość openurl.
Widzimy jednak, że nazwa użytkownika jest przekazywana i że nazwa użytkownika jest inicjalizowana ze zmiennej środowiskowej LOGNAME. Na tej podstawie opracowałem następujące rozwiązanie:
- Zawijam Firefoksa za pomocą tego skryptu o nazwie firefox.sh:
FOX_PROFILE = facebook
eksport LOGNAME = błąd. $ FOX_PROFILE
/ opt / firefox / firefox -profile ~ / .mozilla_profiles / $ FOX_PROFILES „$ @”
przy pierwszym uruchomieniu uruchamia nową instancję i musi istnieć katalog ~ / .mozilla_profiles / facebook,
po uruchomieniu drugi raz, jeśli profil na Facebooku jest już uruchomiony, poprawnie się z nim łączy,
może poprawnie wysyłać polecenia do wielu różnych działających profili (oczywiście musisz zmienić parametr FOX_PROFILE w pierwszym wierszu w różnych skryptach).
Testowałem to z Firefoksem 26 w systemie Linux i działa.
Alternatywnie, oto moje pełnoprawne rozwiązanie, którego możesz chcieć lub nie używać:
#! / bin / bash
ustaw -e
FOX = / opt / firefox / firefox
WIADOMOŚĆ = $ @
jeśli [-z "$ FOX_PROFILE"]; następnie
if [-z "$ {MESSAGE}"]; następnie
FOX_PROFILE = wartość domyślna
jeszcze
FOX_PROFILE = $ (kdialog - domyślny domyślny - menu "- $ {WIADOMOŚĆ} -" domyślny domyślny google google facebook facebook pomyłka pomyłka spam spam)
fi
fi
eksport FOX_PROFILE
# Ten hack jest potrzebny, ponieważ wysyła zdalną linię poleceń firefox
# ignoruje parametr profilu. Zobacz nsAppRunner.cpp: 1505.
eksport LOGNAME = błąd. $ FOX_PROFILE
# Używanie wykonywania w tle zamiast exec, więc zachowanie jest
# spójne, gdy profil jest już uruchomiony, a kiedy jest po prostu
# uruchomienie.
$ FOX -profil ~ / .mozilla_profiles / $ FOX_PROFILE „$ @”
# Ogromny sukces.
wyjście 0
Jeśli skrypt zostanie uruchomiony bez żadnego parametru, automatycznie wybierze profil domyślny, ale można go zastąpić, ustawiając FOX_PROFILE ręcznie w powłoce. Jeśli adres URL zostanie przekazany w wierszu polecenia, zawsze prosi o profil, w którym należy go otworzyć, ponieważ głównie klikam z mojego programu czatu i poczty e-mail, a w takim przypadku zawsze chcę wybrać profil (Google dla kalendarza spam, Facebook na spam urodzinowy itp.). Oczywiście możesz zmienić logikę, aby dopasować ją do swojego stylu użytkowania, to tylko przykład, ważna wiedza to sztuczka LOGNAME.
I oczywiście musisz upewnić się, że ten skrypt otoki jest jedynym sposobem na uruchomienie przeglądarki na twoim komputerze. Ponieważ jeśli otworzysz profil bez prawidłowego zestawu LOGNAME, nie będziesz już mógł komunikować się z tym profilem. Skrypt ten umieszczam jako pierwszy na mojej ścieżce za pomocą wielu nazw dowiązań symbolicznych, takich jak x-www-browser, firefox, sensible-browser i umieszczam go również w zmiennej środowiskowej BROWSER. Jak to zrobić dokładnie zależy od twojej dystrybucji GNU / Linux.
Jeśli masz już uruchomioną instancję, Firefox ponownie z niej skorzysta. Spróbować
firefox -no-remote
.źródło
@miemik
„Ale chcę, aby ponownie użyła instancji! Tylko konkretna, nie przypadkowa, którą lubi. Jeśli spróbuję dodać„ -no-remote ”do mojego polecenia, otrzymuję:„ Iceweasel już działa, ale nie odpowiada. Aby otworzyć nowe okno, musisz najpierw zamknąć istniejący proces Iceweasel lub ponownie uruchomić system. ”
Masz problem z uprawnieniami w swoim profilu reż ... sprawdź uprawnienia. Czy skopiowałeś go lub przeniosłeś z innego miejsca (partycja ... dysk ...)?
Rozwiązanie:
Zostań rootem i uruchom na górze, aby zobaczyć, czy działa jako root. Następnie ls -ld na profilu dir (który powinien znajdować się pod katalogiem ur home z kropką (.) Przed nimi .. oznacza, że musisz użyć „ls -al”, aby go zobaczyć.
Sprawdź inne uprawnienia tego katalogu i odpowiednio je zmień.
Twoje zdrowie!
źródło
To nie zadziała. Jedynym sposobem na uruchomienie 2 instancji aplikacji Mozilla jest wyłączenie zdalnych połączeń z drugim (zazwyczaj z MOZ_NO_REMOTE = 1). Oznacza to, że wyłączasz możliwość komunikowania się z innymi instancjami (na przykład tworzeniem nowej strony).
Masz więc do wyboru nową aplikację z
no remote
włączoną funkcją lub ponowne użycie instancji, która umożliwia zdalny dostęp.źródło
Powinieneś być w stanie dodać
-no-remote
tylko do wywołania profilu testowego (po tym, jak profil oprogramowania jest już otwarty) w następujący sposób:Powinno to umożliwić zdalne otwieranie wszystkich innych łączy w innym profilu.
Jeśli to rozwiązanie nie działa, zawsze możesz uruchomić Firefoksa jako osobnego użytkownika do testowania, używając
sudo -u
. Jednak Firefox naprawdę powinien być w stanie odpowiednio sobie z tym poradzić dzięki profilom.źródło
-no-remote
flagą uruchamiana jest nowa instancja Firefox, a pytanie wymaga ponownego użycia istniejących instancji Firefox, jeśli są już uruchomione.Jeśli masz już Mozilla Firefox z profilem domyślnym lub innym profilem, spróbuj:
Testowany i działał dla mnie z Mozilla Firefox od 2.x do 12.x
źródło
Przy pierwszym uruchomieniu instancji Firefox z danym profilem użyj polecenia:
Możesz dodać adres URL na końcu powyższego polecenia, aby go otworzyć. Później, jeśli chcesz otworzyć adres URL w tej instancji, możesz użyć:
Jeśli piszesz skrypt i chcesz się dowiedzieć, czy istnieje już instancja z tym profilem, aby sprawdzić, które z powyższych poleceń powinny zostać wywołane, możesz użyć:
Testowane z Firefoksem 34 w systemie Linux.
Zauważ, że obecnie w Firefoksie jest błąd, który powoduje błąd w komunikacie
jeśli
-remote openurl()
polecenie zostało wykonane bez kontrolnego tty (np. ze skryptu uruchomionego przez demona).Uderzyłem ten błąd podczas uruchamiania skryptu z pliku .desktop w KDE (np. Z programu uruchamiającego w panelu), więc musiałem zaznaczyć opcję „uruchom w terminalu”, co jest nieco denerwujące.
źródło
Dla przypomnienia, jednym rozwiązaniem jest: w KDE ustawiamy domyślną przeglądarkę, aby działała z następującą komendą:
gdzie „default” to nasz profil, którego chcemy używać za każdym razem.
Teraz uruchamiamy naszą instancję Firefoksa bez argumentów (domyślny program uruchamiający KDE Firefox). To otwiera Firefox normalnie, teraz chcemy otworzyć inny profil, aby to zrobić, robimy kolejny program uruchamiający w edytorze menu KDE:
Spowoduje to otwarcie menedżera profilu. Wybieramy profil, którego chcesz użyć.
Przetestowane na kilku profilach jednocześnie działających, gdy klikamy adres URL z dowolnej aplikacji (np. Klienta czatu), nowa karta jest następnie otwierana w wybranym przez nas profilu.
Mam nadzieję, że ktoś uzna to za pomocne :).
Nie testowano na Gnome, ale mam nadzieję, że można go powielić.
źródło