jak zdalnie otworzyć adres URL w przeglądarce Firefox w określonym profilu?

9

Mam kilka wystąpień Firefoksa z kilkoma różnymi profilami. Wśród nich profile o nazwach „oprogramowanie” i „test”.

Próbuję otworzyć adres URL ze skryptu bash, aby był otwarty w profilu „test”, w następujący sposób:

firefox -P "test" http://www.example.org/

Jednak to i tak otwiera to w „oprogramowaniu” profilu. Jakieś pomysły?

Mozilla / 5.0 (X11; U; Linux x86_64; en-US; rv: 1.9.1.8) Gecko / 20100308 Iceweasel / 3.5.8 (jak Firefox / 3.5.8)

Nie, to nie jest problem z uprawnieniami, wszystkie katalogi mojego profilu są całkowicie objęte moimi uprawnieniami:

root@przehyba:~/.mozilla# ls -ld firefox/
drwx------ 13 miernik miernik 4096 Mar 11 09:15 firefox/
root@przehyba:~/.mozilla# ls -ld firefox/*
drwxr-xr-x  9 miernik miernik 4096 Mar 12 11:29 firefox/info
-rw-r--r--  1 miernik miernik  560 Mar 11 09:15 firefox/profiles.ini
drwxr-xr-x 10 miernik miernik 4096 Mar 16 11:51 firefox/software
drwxr-xr-x  9 miernik miernik 4096 Mar 11 09:14 firefox/tech
drwxr-xr-x 11 miernik miernik 4096 Mar 15 22:48 firefox/test
root@przehyba:~/.mozilla# 
miernik
źródło

Odpowiedzi:

7

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.

pomyłka
źródło
Wielkie dzięki za to. Wydaje mi się, że ustawienie profilu nie jest konieczne i że ustawienie LOGNAME wystarczy, aby zrobić właściwą rzecz.
dset0x
0

Jeśli masz już uruchomioną instancję, Firefox ponownie z niej skorzysta. Spróbować firefox -no-remote.

janmoesen
źródło
Ale chcę, aby ponownie wykorzystała instancję! Tylko konkretny, a nie dowolny, który mu się podoba. Jeśli spróbowałem 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.”
miernik
Ach, to czyni to bardziej interesującym. Obawiam się, że nie wiem jak to zrobić. IIUC, -nie-zdalny wyłącza „rozmowę” między instancjami. Może to być dalekie od docelowego i całkowitego przesadzenia, ale można utworzyć rozszerzenie, które sonduje centralną kolejkę plików lub adresów URL serwera i otwiera je, gdy jest przeznaczone dla bieżącego profilu. Następnie zainstaluj to rozszerzenie we wszystkich swoich instancjach.
janmoesen
0

@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!

unixbhaskar
źródło
Sprawdziłem uprawnienia i wkleiłem wynik w edycji mojego pytania. To nie jest taki problem.
miernik
0

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 remotewłączoną funkcją lub ponowne użycie instancji, która umożliwia zdalny dostęp.

jneves
źródło
To rzeczywiście działa, patrz odpowiedź na błąd. Co masz na myśli mówiąc, że to nie zadziała ?
pkt
0

Powinieneś być w stanie dodać -no-remotetylko do wywołania profilu testowego (po tym, jak profil oprogramowania jest już otwarty) w następujący sposób:

firefox -P "test" -no-remote http://www.example.org/

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.

Trey Hunner
źródło
Ta odpowiedź nie może być dobra, ponieważ z -no-remoteflagą uruchamiana jest nowa instancja Firefox, a pytanie wymaga ponownego użycia istniejących instancji Firefox, jeśli są już uruchomione.
pkt
0

Jeśli masz już Mozilla Firefox z profilem domyślnym lub innym profilem, spróbuj:

Path-To/firefox -remote openurl("http://www.example.org")

Testowany i działał dla mnie z Mozilla Firefox od 2.x do 12.x

Ipers
źródło
Ta odpowiedź nie może być dobra, ponieważ wiersz poleceń nie zawiera wymaganego profilu do użycia.
pkt
0

Przy pierwszym uruchomieniu instancji Firefox z danym profilem użyj polecenia:

firefox -P foo -new-instance

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ć:

firefox -P foo -remote 'openurl(http://www.example.org)'

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ć:

firefox -P foo -remote 'ping()'

Testowane z Firefoksem 34 w systemie Linux.

Zauważ, że obecnie w Firefoksie jest błąd, który powoduje błąd w komunikacie

Error: Failed to send command: 500 command not parseable

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.

bauermann
źródło
-1

Dla przypomnienia, jednym rozwiązaniem jest: w KDE ustawiamy domyślną przeglądarkę, aby działała z następującą komendą:

firefox -P "default"

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:

firefox -ProfileManager -no-remote %u

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ć.

Damjan Dimitrioski
źródło
1
To nie odpowiada na pytanie, PO chce automatycznie uruchomić firefox z różnymi profilami ze skryptu.
terdon