Perdón por la respuesta tardía de 3 años, me interesé en este tema hace un momento y encontré esta pregunta.
No encontré una solución documentada en ninguna parte, así que revisé el código fuente y aquí hay una parte muy relevante:
http://dxr.mozilla.org/mozilla-central/source/toolkit/xre/nsAppRunner.cpp#1537
Aquí, el nullptr al final de la línea desafortunadamente significa que el argumento del perfil no se pasa a la función SendCommandLine, por lo tanto, no es posible seleccionar la ventana correcta de firefox para enviar el mensaje openurl.
Sin embargo, vemos que se está pasando el nombre de usuario y que se está intiailizando desde la variable de entorno LOGNAME. En base a esto, se me ocurrió la siguiente solución:
- Envuelvo firefox con este script, llamado firefox.sh:
FOX_PROFILE = facebook
export LOGNAME = errge. $ FOX_PROFILE
/ opt / firefox / firefox -profile ~ / .mozilla_profiles / $ FOX_PROFILES "$ @"
cuando se ejecuta por primera vez, inicia una nueva instancia y el directorio ~ / .mozilla_profiles / facebook debe existir,
cuando se ejecuta por segunda vez si el perfil de Facebook ya se está ejecutando, se conecta correctamente a él,
puede enviar comandos correctamente a múltiples perfiles de ejecución diferentes (por supuesto, debe cambiar el parámetro FOX_PROFILE en la primera línea en los diferentes scripts).
Probé esto con Firefox 26 en Linux y funciona.
Alternativamente, aquí está mi solución completa que puede querer o no usar:
#! / bin / bash
conjunto -e
FOX = / opt / firefox / firefox
MENSAJE = $ @
si [-z "$ FOX_PROFILE"]; entonces
si [-z "$ {MENSAJE}"]; entonces
FOX_PROFILE = predeterminado
más
FOX_PROFILE = $ (kdialog - default default --menu "- $ {MESSAGE} -" default default google google facebook facebook errge errge spam spam)
fi
fi
exportar FOX_PROFILE
# Este truco es necesario, porque el envío de línea de comando remoto de Firefox
# ignora el parámetro de perfil. Ver nsAppRunner.cpp: 1505.
export LOGNAME = errge. $ FOX_PROFILE
# Uso de ejecución en segundo plano en lugar de exec, por lo que el comportamiento es
# consistente cuando el perfil ya se está ejecutando y cuando es solo
# empezando.
$ FOX -profile ~ / .mozilla_profiles / $ FOX_PROFILE "$ @"
# Gran éxito.
salida 0
Si ejecuta el script sin ningún parámetro, selecciona automáticamente el perfil predeterminado, pero puede anularlo configurando FOX_PROFILE a mano en su shell. Si se pasa una URL en la línea de comando, siempre solicita un perfil para abrirla, esto se debe a que hago clic principalmente desde mi programa de chat y correo electrónico y en ese caso quiero seleccionar siempre un perfil (google para el calendario spam, facebook para spam de cumpleaños, etc.). Por supuesto, puede cambiar la lógica para que se ajuste a su estilo de uso, esto es solo un ejemplo, el conocimiento importante es el truco LOGNAME.
Y, por supuesto, debe asegurarse de que este script de contenedor sea la única forma de iniciar el navegador en su máquina. Porque si abre un perfil sin el conjunto de LOGNAME correcto, entonces ya no podrá comunicarse con ese perfil. Puse este script como el primero en mi camino a través de múltiples nombres enlazados, como x-www-browser, firefox, sensible-browser y lo puse en la variable de entorno BROWSER también. Cómo hacer esto depende exactamente de su distribución GNU / Linux.
Si ya tiene una instancia en ejecución, Firefox la reutilizará. Tratar
firefox -no-remote
.fuente
@miemik
"¡Pero quiero que reutilice una instancia! Solo una específica, no cualquiera aleatoria que le guste. Si intenté agregar" -no-remote "a mi comando, obtengo:" Iceweasel ya se está ejecutando, pero no responde. Para abrir una nueva ventana, primero debe cerrar el proceso Iceweasel existente o reiniciar su sistema ".
Tiene un problema de permiso con su directorio de perfil ... verifique el permiso. ¿Lo copió o movió desde otro lugar (partición ... disco ...)?
Solución:
Conviértete en root y ejecuta arriba para ver si se está ejecutando como root. Luego ls -ld en el directorio de perfil (que debe estar debajo de su directorio de inicio con un punto (.) Delante de ellos ... significa que debe usar "ls -al" para verlo.
Verifique otro permiso de ese directorio y cambie en consecuencia.
¡Salud!
fuente
No va a funcionar La única forma de tener 2 instancias de una aplicación Mozilla ejecutándose es deshabilitando las conexiones remotas a la segunda (generalmente con MOZ_NO_REMOTE = 1). Eso significa que deshabilita la capacidad de comunicarse con otras instancias (como una que crea abrir una nueva página).
Entonces, sus opciones son abrir una nueva aplicación con
no remote
habilitado o reutilizar la instancia que permite el acceso remoto.fuente
Debería poder agregar
-no-remote
solo a la llamada del perfil de prueba (después de que el perfil de software ya esté abierto) de esta manera:Eso debería permitir que todos los demás enlaces aún se abran en su otro perfil de forma remota.
Si esta solución no funciona, siempre puede ejecutar Firefox como un usuario separado para las pruebas, utilizando
sudo -u
. Sin embargo, Firefox realmente debería poder manejar esto correctamente con perfiles.fuente
-no-remote
indicador se inicia una nueva instancia de Firefox, y la pregunta requiere reutilizar las instancias existentes de Firefox si ya se están ejecutando.Si ya tiene abierto Mozilla Firefox con el perfil predeterminado o cualquier otro perfil, intente:
Probado y funcionó para mí con Mozilla Firefox de 2.xa 12.x
fuente
La primera vez que inicie una instancia de Firefox con un perfil determinado, use el comando:
Puede agregar una URL al final del comando anterior para abrirla. Más tarde, cuando desee abrir una URL en esa instancia, puede usar:
Si está escribiendo una secuencia de comandos y desea saber si ya hay una instancia que ejecuta ese perfil para ver cuál de los comandos anteriores debe llamarse, puede usar:
Probado con Firefox 34 en Linux.
Tenga en cuenta que actualmente hay un error en Firefox que lo hace un error con el mensaje
si el
-remote openurl()
comando se realiza sin un tty controlador (p. ej., a partir de un script iniciado por un demonio).Llegué a este error al iniciar un script desde un archivo .desktop en KDE (por ejemplo, desde un iniciador en el panel), así que tuve que marcar la opción "ejecutar en terminal", lo cual es un poco molesto.
fuente
Para el registro, una solución es: en KDE configuramos el navegador predeterminado para que se ejecute con el siguiente comando:
donde "predeterminado" es nuestro perfil que queremos usar cada vez.
Ahora, comenzamos nuestra instancia de Firefox sin argumentos (el iniciador predeterminado de KDE Firefox). Esto abre Firefox normalmente, ahora queremos abrir otro perfil, para hacerlo, hacemos otro lanzador en el editor de menú de KDE:
Esto abre el administrador de perfiles, elegimos qué perfil usar.
Probado en varios perfiles que se ejecutan simultáneamente, cuando hacemos clic en una URL de cualquier aplicación (como un cliente de chat), se abre una nueva pestaña en el perfil que hemos elegido.
Espero que alguien encuentre esto útil :).
No probado en Gnome, pero espero que pueda replicarse.
fuente