Wie kann ich eine URL in Firefox in einem bestimmten Profil aus der Ferne öffnen?


9

Ich habe mehrere Instanzen von Firefox mit verschiedenen Profilen ausgeführt. Darunter Profile mit den Namen "Software" und "Test".

Ich versuche, eine URL aus einem Bash-Skript zu öffnen, um sie im Profil "test" wie folgt zu öffnen:

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

Das öffnet es jedoch trotzdem im Profil "Software". Irgendwelche Ideen?

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

Nein, es ist kein Berechtigungsproblem. Alle meine Profilverzeichnisse sind perfekt unter meinen Berechtigungen:

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# 

Antworten:


7

Entschuldigung für die 3 Jahre verspätete Antwort, ich habe mich gerade für dieses Thema interessiert und diese Frage gefunden.

Ich habe nirgendwo eine dokumentierte Lösung gefunden, also habe ich den Quellcode überprüft und hier ist ein sehr relevanter Teil: http://dxr.mozilla.org/mozilla-central/source/toolkit/xre/nsAppRunner.cpp#1537

Hier bedeutet der Nullptr am Ende der Zeile leider, dass das Profilargument nicht an die SendCommandLine-Funktion übergeben wird. Daher ist es nicht möglich, das richtige Firefox-Fenster auszuwählen, an das die OpenURL-Nachricht gesendet werden soll.

Wir sehen jedoch, dass der Benutzername übergeben wird und dass der Benutzername aus der Umgebungsvariablen LOGNAME intiailisiert wird. Auf dieser Grundlage habe ich die folgende Lösung gefunden:

  • Ich verpacke Firefox mit diesem Skript namens Firefox.sh:
FOX_PROFILE = Facebook
export LOGNAME = errge. $ FOX_PROFILE
/ opt / Firefox / Firefox-Profil ~ / .mozilla_profiles / $ FOX_PROFILES "$ @"
  • Beim ersten Ausführen wird eine neue Instanz gestartet und das Verzeichnis ~ / .mozilla_profiles / facebook muss vorhanden sein.

  • Wenn das Facebook-Profil das zweite Mal ausgeführt wird und bereits ausgeführt wird, wird eine korrekte Verbindung hergestellt.

  • Es kann Befehle korrekt an mehrere verschiedene laufende Profile senden (natürlich müssen Sie den Parameter FOX_PROFILE in der ersten Zeile in den verschiedenen Skripten ändern).

Ich habe dies mit Firefox 26 unter Linux getestet und es funktioniert.

Alternativ ist hier meine vollwertige Lösung, die Sie möglicherweise verwenden möchten oder nicht:

#! / bin / bash

setze -e

FOX = / opt / Firefox / Firefox

NACHRICHT = $ @

if [-z "$ FOX_PROFILE"]; dann
  if [-z "$ {MESSAGE}"]; dann
    FOX_PROFILE = Standard
  sonst
    FOX_PROFILE = $ (kdialog --default default --menu "- $ {MESSAGE} -" Standardstandard Google Google Facebook Facebook Errge Errge Spam Spam)
  fi
fi
exportiere FOX_PROFILE

# Dieser Hack wird benötigt, da Firefox Remote-Befehlszeilen senden
# ignoriert den Profilparameter. Siehe nsAppRunner.cpp: 1505.
export LOGNAME = errge. $ FOX_PROFILE

# Verwenden der Hintergrundausführung anstelle von exec, also ist das Verhalten
# konsistent, wenn das Profil bereits ausgeführt wird und wenn es nur ausgeführt wird
# Inbetriebnahme.
$ FOX -profile ~ / .mozilla_profiles / $ FOX_PROFILE "$ @"

# Riesenerfolg.
Ausfahrt 0

Wenn Sie das Skript ohne Parameter ausführen, wird das Standardprofil automatisch ausgewählt. Sie können es jedoch überschreiben, indem Sie FOX_PROFILE manuell in Ihrer Shell festlegen. Wenn eine URL in der Befehlszeile übergeben wird, wird immer nach einem Profil gefragt, in dem sie geöffnet werden soll. Dies liegt daran, dass ich hauptsächlich in meinem Chat- und E-Mail-Programm durchklicke und in diesem Fall immer ein Profil auswählen möchte (Google für Kalender) Spam, Facebook für Geburtstags-Spam usw.). Natürlich können Sie die Logik an Ihren Verwendungsstil anpassen. Dies ist nur ein Beispiel. Das wichtige Wissen ist der LOGNAME-Trick.

Und natürlich müssen Sie sicherstellen, dass dieses Wrapper-Skript die einzige Möglichkeit ist, den Browser auf Ihrem Computer zu starten. Denn wenn Sie ein Profil ohne den richtigen LOGNAME-Satz öffnen, können Sie nicht mehr mit diesem Profil kommunizieren. Ich habe dieses Skript als erstes in meinen Pfad über mehrere verknüpfte Namen wie x-www-browser, Firefox, Sensible-Browser eingefügt und es auch in die Umgebungsvariable BROWSER eingefügt. Wie dies genau funktioniert, hängt von Ihrer GNU / Linux-Distribution ab.


Vielen Dank dafür. Es scheint mir, dass das Festlegen des Profils nicht erforderlich ist und dass das Festlegen von LOGNAME ausreicht, um das Richtige zu tun.
dset0x

0

Wenn bereits eine Instanz ausgeführt wird, wird diese von Firefox wiederverwendet. Versuchen Sie es firefox -no-remote.


Aber ich möchte, dass es eine Instanz wiederverwendet! Nur eine bestimmte, keine zufällige, die sie mag. Wenn ich versucht habe, meinem Befehl "-no-remote" hinzuzufügen, wird Folgendes angezeigt: "Iceweasel wird bereits ausgeführt, reagiert jedoch nicht. Um ein neues Fenster zu öffnen, müssen Sie zuerst den vorhandenen Iceweasel-Prozess schließen oder Ihr System neu starten."
Miernik

Ah, das macht es interessanter. Ich fürchte, ich weiß nicht, wie Sie das machen könnten. IIUC, -no-remote deaktiviert das "Sprechen" zwischen Instanzen. Dies kann weit vom Ziel und vom totalen Overkill entfernt sein, aber Sie können eine Erweiterung erstellen, die eine zentrale Datei- oder Server-URL-Warteschlange abfragt und sie öffnet, wenn sie für das aktuelle Profil bestimmt ist. Anschließend installieren Sie diese Erweiterung in allen Ihren Instanzen.
Janmoesen

0

@miemik

"Aber ich möchte, dass es eine Instanz wiederverwendet! Nur eine bestimmte, keine zufällige, die es mag. Wenn ich versuche, meinem Befehl" -no-remote "hinzuzufügen, erhalte ich:" Iceweasel läuft bereits, antwortet aber nicht. Um ein neues Fenster zu öffnen, müssen Sie zuerst den vorhandenen Iceweasel-Prozess schließen oder Ihr System neu starten. "

Sie haben ein Berechtigungsproblem mit Ihrem Profilverzeichnis. Überprüfen Sie die Berechtigung. Haben Sie es von einem anderen Ort kopiert oder verschoben (partition..disk ..)?

Lösung:

Werden Sie root und führen Sie top aus, um zu sehen, ob es als root ausgeführt wird. Dann ls -ld auf dem Profilverzeichnis (das unter Ihrem Home-Verzeichnis mit einem Punkt (.) Vor ihnen stehen sollte .. bedeutet, dass Sie "ls -al" verwenden müssen, um es zu sehen.

Überprüfen Sie die andere Berechtigung dieses Verzeichnisses und ändern Sie sie entsprechend.

Prost!


Ich habe die Berechtigungen überprüft und das Ergebnis in eine Bearbeitung meiner Frage eingefügt. Das ist nicht das Problem.
Miernik

0

Es wird nicht funktionieren. Die einzige Möglichkeit, zwei Instanzen einer Mozilla-App auszuführen, besteht darin, Remoteverbindungen zur zweiten zu deaktivieren (normalerweise mit MOZ_NO_REMOTE = 1). Das bedeutet, dass Sie die Kommunikation mit anderen Instanzen deaktivieren (z. B. beim Erstellen einer neuen Seite).

Sie können also entweder eine neue App mit no remoteaktivierter App öffnen oder die Instanz wiederverwenden, die den Remotezugriff ermöglicht.


Es funktioniert in der Tat, siehe die Antwort von errge. Was meinst du damit, dass es nicht funktioniert ?
Punkte

0

Sie sollten in der Lage sein, -no-remotenur den Testprofilaufruf (nachdem das Softwareprofil bereits geöffnet ist) wie folgt hinzuzufügen :

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

Dadurch sollten alle anderen Links weiterhin remote in Ihrem anderen Profil geöffnet werden können.

Wenn diese Lösung nicht funktioniert, können Sie Firefox immer als separaten Benutzer zum Testen ausführen sudo -u. Firefox sollte dies jedoch mit Profilen richtig handhaben können.


Diese Antwort kann nicht gut sein, da mit dem -no-remoteFlag eine neue Firefox-Instanz gestartet wird und die Frage die Wiederverwendung der vorhandenen Firefox-Instanzen erfordert, wenn diese bereits ausgeführt werden.
Punkte

0

Wenn Mozilla Firefox bereits mit dem Standardprofil oder einem anderen Profil geöffnet ist, versuchen Sie Folgendes:

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

Getestet und für mich mit Mozilla Firefox von 2.x bis 12.x gearbeitet


Diese Antwort kann nicht gut sein, da die Befehlszeile nicht das erforderliche Profil enthält.
Punkte

0

Verwenden Sie den Befehl, wenn Sie zum ersten Mal eine Firefox-Instanz mit einem bestimmten Profil starten:

firefox -P foo -new-instance

Sie können eine URL am Ende des obigen Befehls anhängen, um sie zu öffnen. Wenn Sie später in dieser Instanz eine URL öffnen möchten, können Sie Folgendes verwenden:

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

Wenn Sie ein Skript schreiben und herausfinden möchten, ob bereits eine Instanz dieses Profils ausführt, um zu sehen, welcher der oben genannten Befehle aufgerufen werden soll, können Sie Folgendes verwenden:

firefox -P foo -remote 'ping()'

Getestet mit Firefox 34 unter Linux.

Beachten Sie, dass es derzeit einen Fehler in Firefox gibt, der einen Fehler mit der Nachricht verursacht

Error: Failed to send command: 500 command not parseable

wenn der -remote openurl()Befehl ohne steuernde tty ausgeführt wird (z. B. von einem Skript, das von einem Daemon gestartet wurde).

Ich habe diesen Fehler beim Starten eines Skripts aus einer .desktop-Datei in KDE (z. B. von einem Launcher im Bedienfeld) festgestellt, daher musste ich die Option "In Terminal ausführen" aktivieren, was etwas ärgerlich ist.


-1

Für den Datensatz ist eine Lösung: In KDE stellen wir den Standardbrowser so ein, dass er mit dem folgenden Befehl ausgeführt wird:

firefox -P "default"

Dabei ist "Standard" unser Profil, das wir jedes Mal verwenden möchten.

Jetzt starten wir unsere Firefox-Instanz ohne Argumente (der Standard-KDE-Firefox-Launcher). Dies öffnet Firefox normalerweise. Jetzt möchten wir ein anderes Profil öffnen. Dazu erstellen wir einen weiteren Launcher im KDE-Menü-Editor:

firefox -ProfileManager -no-remote %u

Dadurch wird der Profilmanager geöffnet. Wir wählen das zu verwendende Profil aus.

Bei mehreren Profilen, die gleichzeitig ausgeführt werden, wird beim Klicken auf eine URL in einer App (z. B. einem Chat-Client) eine neue Registerkarte in dem von uns ausgewählten Profil geöffnet.

Hoffe jemand findet das hilfreich :).

Nicht auf Gnome getestet, aber ich hoffe, es konnte repliziert werden.


1
Dies beantwortet die Frage nicht, das OP möchte Firefox mit verschiedenen Profilen aus einem Skript automatisch starten.
Terdon
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.