Désolé pour la réponse tardive de 3 ans, je me suis intéressé à ce sujet tout à l'heure et j'ai trouvé cette question.
Je n'ai trouvé aucune solution documentée nulle part, j'ai donc vérifié le code source et voici une partie très pertinente:
http://dxr.mozilla.org/mozilla-central/source/toolkit/xre/nsAppRunner.cpp#1537
Ici, le nullptr à la fin de la ligne signifie malheureusement que l'argument de profil n'est pas transmis à la fonction SendCommandLine, il n'est donc pas possible de sélectionner la fenêtre firefox correcte pour envoyer le message openurl.
Cependant, nous voyons que le nom d'utilisateur est passé et que le nom d'utilisateur est intiailized à partir de la variable d'environnement LOGNAME. Sur cette base, j'ai trouvé la solution suivante:
- J'enveloppe firefox avec ce script, appelé firefox.sh:
FOX_PROFILE = facebook
export LOGNAME = errge. $ FOX_PROFILE
/ opt / firefox / firefox -profile ~ / .mozilla_profiles / $ FOX_PROFILES "$ @"
lors de sa première exécution, il démarre une nouvelle instance et le répertoire ~ / .mozilla_profiles / facebook doit exister,
lors de sa deuxième exécution si le profil facebook est déjà en cours d'exécution, il s'y connecte correctement,
il peut envoyer des commandes correctement à plusieurs profils d'exécution différents (bien sûr, vous devez modifier le paramètre FOX_PROFILE dans la première ligne des différents scripts).
J'ai testé cela avec Firefox 26 sur Linux et cela fonctionne.
Alternativement, voici ma solution à part entière que vous souhaiterez ou non utiliser:
#! / bin / bash
set -e
FOX = / opt / firefox / firefox
MESSAGE = $ @
if [-z "$ FOX_PROFILE"]; puis
if [-z "$ {MESSAGE}"]; puis
FOX_PROFILE = par défaut
autre
FOX_PROFILE = $ (kdialog --default default --menu "- $ {MESSAGE} -" default default google google facebook facebook errge errge spam spam)
Fi
Fi
exporter FOX_PROFILE
# Ce hack est nécessaire, car l'envoi de la ligne de commande à distance de Firefox
# ignore le paramètre de profil. Voir nsAppRunner.cpp: 1505.
export LOGNAME = errge. $ FOX_PROFILE
# Utiliser l'exécution en arrière-plan au lieu de exec, donc le comportement est
# cohérent lorsque le profil est déjà en cours d'exécution et lorsqu'il est juste
# démarrage.
$ FOX -profile ~ / .mozilla_profiles / $ FOX_PROFILE "$ @"
# Énorme succès.
sortie 0
Si vous exécutez le script sans aucun paramètre, il sélectionne automatiquement le profil par défaut, mais vous pouvez le remplacer en définissant FOX_PROFILE à la main dans votre shell. Si une URL est passée dans la ligne de commande, elle demande toujours un profil dans lequel l'ouvrir, c'est parce que je clique principalement à partir de mon programme de chat et de messagerie et dans ce cas, je veux toujours sélectionner un profil (google for calendar spam, facebook pour anniversaire spam, etc.). Bien sûr, vous pouvez modifier la logique pour l'adapter à votre style d'utilisation, ce n'est qu'un exemple, la connaissance importante est l'astuce LOGNAME.
Et bien sûr, vous devez vous assurer que ce script wrapper est le seul moyen de démarrer le navigateur sur votre machine. Parce que si vous ouvrez un profil sans l'ensemble LOGNAME correct, vous ne pourrez plus communiquer avec ce profil. J'ai mis ce script en premier sur mon chemin via plusieurs noms liés par des liens symboliques, comme x-www-browser, firefox, sensible-browser et je l'ai également placé dans la variable d'environnement BROWSER. Comment faire cela dépend exactement de votre distribution GNU / Linux.
Si vous avez déjà une instance en cours d'exécution, Firefox la réutilisera. Essayez
firefox -no-remote
.la source
@miemik
"Mais je veux qu'il réutilise une instance! Seule une spécifique, pas une aléatoire qu'il aime. Si j'ai essayé d'ajouter" -no-remote "à ma commande, j'obtiens:" Iceweasel est déjà en cours d'exécution, mais ne répond pas. Pour ouvrir une nouvelle fenêtre, vous devez d'abord fermer le processus Iceweasel existant ou redémarrer votre système. "
Vous avez un problème d'autorisation avec votre répertoire de profil ... vérifiez l'autorisation. L'avez-vous copié ou déplacé depuis un autre endroit (partition..disk ..)?
Solution:
Devenez root et exécutez top pour voir s'il fonctionne en tant que root. Ensuite, ls -ld sur le répertoire de profil (qui devrait être sous votre répertoire d'accueil avec un point (.) Devant eux. Signifie que vous devez utiliser "ls -al" pour le voir.
Vérifiez les autres autorisations de ce répertoire et modifiez-les en conséquence.
À votre santé!
la source
Ça ne marchera pas. La seule façon d'avoir 2 instances d'une application Mozilla en cours d'exécution est de désactiver les connexions distantes à la seconde (généralement avec MOZ_NO_REMOTE = 1). Cela signifie que vous désactivez sa capacité à communiquer avec d'autres instances (comme celle qui crée l'ouverture d'une nouvelle page).
Vos choix sont donc soit d'ouvrir une nouvelle application avec
no remote
activé, soit de réutiliser l'instance qui autorise l'accès à distance.la source
Vous devriez pouvoir ajouter le
-no-remote
à l'appel de profil de test uniquement (une fois que le profil logiciel est déjà ouvert) comme ceci:Cela devrait permettre à tous les autres liens de s'ouvrir à distance dans votre autre profil.
Si cette solution ne fonctionne pas, vous pouvez toujours exécuter Firefox en tant qu'utilisateur distinct pour les tests, en utilisant
sudo -u
. Firefox devrait vraiment être capable de gérer cela correctement avec des profils.la source
-no-remote
indicateur, une nouvelle instance de Firefox est démarrée et la question nécessite de réutiliser les instances de Firefox existantes si elles sont déjà en cours d'exécution.Si Mozilla Firefox est déjà ouvert avec le profil par défaut ou tout autre profil, essayez:
Testé et travaillé pour moi avec Mozilla Firefox de 2.x à 12.x
la source
La première fois que vous démarrez une instance de Firefox avec un profil donné, utilisez la commande:
Vous pouvez ajouter une URL à la fin de la commande ci-dessus pour l'ouvrir. Plus tard, lorsque vous souhaitez ouvrir une URL dans cette instance, vous pouvez utiliser:
Si vous écrivez un script et que vous souhaitez savoir s'il existe déjà une instance exécutant ce profil pour voir laquelle des commandes ci-dessus doit être appelée, vous pouvez utiliser:
Testé avec Firefox 34 sous Linux.
Notez qu'il y a actuellement un bogue dans Firefox qui fait qu'il y a une erreur avec le message
si la
-remote openurl()
commande est faite sans tty de contrôle (par exemple, à partir d'un script démarré par un démon).J'ai rencontré ce bogue lors du lancement d'un script à partir d'un fichier .desktop dans KDE (par exemple, à partir d'un lanceur dans le panneau), j'ai donc dû cocher l'option "exécuter dans le terminal", ce qui est un peu ennuyeux.
la source
Pour mémoire, une solution est la suivante: dans KDE, nous configurons le navigateur par défaut pour qu'il s'exécute avec la commande suivante:
où "par défaut" est notre profil que nous voulons utiliser à chaque fois.
Maintenant, nous démarrons notre instance Firefox sans arguments (le lanceur par défaut de KDE Firefox). Cela ouvre Firefox normalement, maintenant nous voulons ouvrir un autre profil, pour ce faire, nous faisons un autre lanceur dans l'éditeur de menu de KDE:
Cela ouvre le gestionnaire de profils, nous choisissons le profil à utiliser.
Testé sur plusieurs profils exécutés simultanément, lorsque nous cliquons sur une URL depuis n'importe quelle application (comme un client de chat), un nouvel onglet est alors ouvert dans le profil que nous avons choisi.
J'espère que quelqu'un trouve cela utile :).
Non testé sur Gnome, mais j'espère qu'il pourra être répliqué.
la source