Firefox, dos máquinas Linux, un servidor X

10

Tengo una máquina Linux a la que inicio sesión regularmente a través de ssh (masilla) desde Windows. Estoy ejecutando VcXsrv X-server en mi escritorio de Windows. Principalmente uso esto para ejecutar un depurador (ddd) y firefox para acceder a nuestro sistema de revisión de código basado en la web. Es conveniente utilizar Linux Firefox para poder iniciarlo desde un script. Normalmente ejecuto esto con "-new-tab" para no seguir creando nuevas ventanas.

Ahora tengo una nueva máquina Linux de actualización que estoy ejecutando junto a la anterior por el momento. Lo que he notado es un comportamiento extraño: cuando inicio una nueva sesión de Firefox si ya hay una en ejecución en cualquiera de las máquinas, entonces la usa.

Lo que me gustaría poder hacer es iniciar como una nueva pestaña, pero solo bajo la instancia de Firefox de la máquina actual, no una instancia de una máquina diferente que se muestra en el mismo servidor X.

He estado jugando con varias banderas, incluyendo -no-remote, -new-instance y también definiendo y usando perfiles específicos. Sin embargo, no he podido obtener el resultado deseado. O aparece el comportamiento que describí anteriormente, o aparece un error que dice algo como "Firefox ya se está ejecutando pero no responde, ciérrelo".

EDITAR: Me han pedido que edite esto para proporcionar algunos ejemplos.

OKAY. En lo que sigue me referiré a M_OLD y M_NEW. Estas son máquinas separadas que ejecutan diferentes versiones de Linux con diferentes versiones de Firefox (1.5 y 19). Me conecto a ambos a través de un cliente ssh llamado Putty y reenvío X a un servidor X en mi escritorio de Windows. Solo hay un servidor X involucrado.

Ejemplo 1:

Entonces, desde mi sesión de masilla hasta M_OLD, ejecuto:

firefox www.google.com &

y desde mi sesión de masilla M_NEW ejecuto:

firefox www.imdb.com &

entonces obtengo una ventana de Firefox 1.5 con dos pestañas. Si hago lo mismo a la inversa, obtengo el mismo resultado pero con firefox 19. En otras palabras, como se describe en un comentario a continuación, el primer comando lanza una instancia de firefox, el segundo simplemente le dice a la instancia existente que abra una nueva pestaña. Incluso si la instancia está en otra máquina, siempre que sea el mismo servidor X.

Sin embargo, no quiero esto. Quiero tener instancias separadas para máquinas separadas. Entonces:

Ejemplo 2

Entonces, desde mi sesión de masilla hasta M_OLD, ejecuto:

firefox -no-remote www.google.com &

y desde mi sesión de masilla M_NEW ejecuto:

firefox -no-remote www.imdb.com &

Ahora tengo dos instancias separadas de firefox. Sin embargo, si ejecuto en M_NEW:

firefox -no-remote www.google.com &

Lo tendré

Firefox is already running, but is not responding. To open a new window, you must first close the existing Firefox process, or restart your system.

e incluso si lo intento

firefox -no-remote -new-instance www.google.com &

o solo

firefox -new-instance www.google.com &

entonces aún tendré el error.

Lo que realmente quiero, y puede que no sea posible, es tener una instancia separada para cada máquina, pero si se inicia una nueva URL desde esa máquina, se abre una nueva pestaña. Parece que solo puedo tener una instancia con nuevas pestañas para cada URL, o una instancia por máquina, pero solo una a la vez.

Esperemos que sea más claro.

PaulM
fuente
¿Podrías aclarar? ¿Cómo es relevante la nueva máquina Linux? Estás reenviando X a tu máquina Windows ¿verdad? ¿Estás conectado a ambas cajas de Linux al mismo tiempo? Proporcione más detalles sobre cómo se conecta a cada cuadro.
terdon el
OK, entonces cuando ocurre el problema, ¿estás conectado a ambas máquinas con la ssh -Xcorrecta?
terdon
Sí, estoy reenviando X a mi máquina Windows. Sí, estoy conectado a ambos. La nueva máquina es relevante porque también estoy lanzando Firefox desde ella. Sin embargo, en lugar de lanzar una nueva instancia de firefox, abre una nueva pestaña en la instancia existente, la que se lanzó desde la máquina anterior. Es como si el nuevo proceso de Firefox verificara si Firefox se está ejecutando en ese servidor X y, de ser así, le envía un mensaje para abrir una nueva pestaña. Lo cual es muy inteligente pero no es lo que quiero. El "viejo" y el "nuevo" solo son relevantes en la medida en que son versiones muy diferentes de Firefox. ¿Tener sentido?
PaulM
1
Lo que estás describiendo es normal (como descubrí para mi sorpresa), sin embargo, no entiendo cómo no se soluciona cuando se ejecuta --no-remote. ¿Podrías editar tu pregunta y decirnos cuándo recibes el mensaje "Firefox ya se está ejecutando"? La ejecución firefox -no-remote debería iniciar una nueva instancia de Firefox que se ejecute en la máquina remota pero se muestre en su servidor X local.
terdon
1
Creo que también puede que tenga que agregar -p, por ejemplo -p -no-remote. Esto permite comenzar con un nuevo perfil Fx. Ver las opciones de la línea de comando . Para conectarse al proceso Fx existente, puede probar firefox https://www.mozilla.orgofirefox -remote "openURL(https://www.mozilla.org, new-tab)"
vWil

Respuestas:

1

Las distintas instancias de Firefox (por ejemplo, creadas con --no-remote) deben tener perfiles separados.

Opción 1: cree dos (o más) perfiles, uno para cada sistema que ejecute Firefox. Ejemplo

firefox --no-remote -CreateProfile localuser
firefox --no-remote -CreateProfile host2

Ahora inicie firefox y seleccione un perfil al inicio

firefox --no-remote -P localuser

o

firefox --no-remote -P host1

Opción 2: configurar una solución dinámica para crear un perfil "desechable" en el inicio, por ejemplo, un escrutinio a lo largo de las líneas de:

TEMPPROFILE=$(date +%Y%m%d%H%M%S)
firefox --no-remote -CreateProfile $TEMPPROFILE 2>/tmp/.mozprofile.$TEMPPROFILE
firefox --no-remote -P $TEMPPROFILE

Es posible que desee agregar pasos para eliminar el perfil temporal después (el directorio para eliminar se puede encontrar analizando el resultado del comando CreateProfile, almacenado a través del comando anterior en /tmp/.mozprofile.$TEMPPROFILE

Johan
fuente
ya lo intenté - ver "ejemplo 2"
PaulM
Ah sí, cierto: las instancias distintas tienen que usar diferentes perfiles.
Johan
La primera "opción" que propusiste no tenía ningún sentido, realmente, así que he propuesto que se elimine de tu respuesta.
SamB
Aunque, en realidad, podría funcionar sin el -no-remote...
SamB
0

Ok ... no sé si esto funcionará, pero es lo primero que probaría:

¿Qué tal si crea un segundo script en cada máquina, que no intenta crear la nueva pestaña, solo una nueva instancia? Si no tiene FF ejecutándose actualmente en esa máquina, utiliza este nuevo script, pero si ya se está ejecutando, utiliza el antiguo script que crea la nueva pestaña.

Si esto funciona, es posible que pueda realizar un análisis de expresiones regulares de la salida ps en un solo script para ver si FF ya se está ejecutando en la máquina, y usar el interruptor -new-tab o -no-remote, dependiendo de qué encuentra; pero probablemente desee esperar hasta que se pruebe este método, ya que es una buena cantidad de codificación para algo que podría no funcionar ...

Servicios CB
fuente
eso suena como que podría funcionar, pero por cierto renuncié a esto. M_OLD está siendo dado de baja pronto.
PaulM
0

Mirando XRemoteClient.cpp , creo que deberías hacer:

user@host1$ firefox -CreateProfile profile1

y:

user@host2$ firefox -CreateProfile profile2

Luego, cuando quieras ir a algún lado, haz algo como

user@host1$ firefox -P profile1 -new-tab http://example.com

o bien, creo que puedes adivinar qué hacer en host2.

Obviamente, puedes elegir mejores nombres. Tampoco debería importar mucho cómo se crean los perfiles. Lo importante es especificar un nombre de perfil en la línea de comando cada vez que lo invoque, donde cada instancia tiene su propio nombre de perfil.

Esto incluso podría funcionar .

SamB
fuente
0

Tengo una solución bastante elegante aquí si todavía la necesitas. Por ahora tengo, como, 5 instancias independientes de Firefox ejecutándose y todo lo que quiero.

tmh1999
fuente