come aprire in remoto un URL in Firefox in un profilo specifico?


9

Ho diverse istanze di Firefox con diversi profili in esecuzione. Tra questi i profili con i nomi "software" e "test".

Sto cercando di aprire un URL da uno script bash per averlo aperto nel profilo "test", in questo modo:

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

Tuttavia, ciò lo apre comunque nel profilo "software". Qualche idea?

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

No, non è un problema di autorizzazioni, tutte le mie directory del profilo sono perfettamente sotto le mie autorizzazioni:

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# 

Risposte:


7

Ci scusiamo per la risposta tardiva di 3 anni, mi sono interessato a questo argomento proprio ora e ho trovato questa domanda.

Non ho trovato una soluzione documentata da nessuna parte, quindi ho controllato il codice sorgente e qui è una parte molto rilevante: http://dxr.mozilla.org/mozilla-central/source/toolkit/xre/nsAppRunner.cpp#1537

Qui, nullptr alla fine della riga purtroppo significa che l'argomento profilo non viene passato alla funzione SendCommandLine, quindi non è possibile selezionare la finestra firefox corretta a cui inviare il messaggio openurl.

Tuttavia, vediamo che il nome utente viene passato e che il nome utente viene intiailizzato dalla variabile d'ambiente LOGNAME. Sulla base di questo, ho trovato la seguente soluzione:

  • Ricopro firefox con questo script, chiamato firefox.sh:
FOX_PROFILE = facebook
export LOGNAME = errore. $ FOX_PROFILE
/ opt / firefox / firefox -profile ~ / .mozilla_profiles / $ FOX_PROFILES "$ @"
  • alla prima esecuzione, avvia una nuova istanza e deve esistere la directory ~ / .mozilla_profiles / facebook,

  • quando eseguito la seconda volta se il profilo Facebook è già in esecuzione, si collega correttamente ad esso,

  • può inviare comandi correttamente a più profili in esecuzione diversi (ovviamente è necessario modificare il parametro FOX_PROFILE nella prima riga nei diversi script).

Ho provato questo con Firefox 26 su Linux e funziona.

In alternativa, ecco la mia soluzione a tutti gli effetti che potresti voler o non voler usare:

#! / Bin / bash

set -e

FOX = / opt / firefox / firefox

MESSAGE = $ @

if [-z "$ FOX_PROFILE"]; poi
  if [-z "$ {MESSAGE}"]; poi
    FOX_PROFILE = default
  altro
    FOX_PROFILE = $ (kdialog --default default --menu "- $ {MESSAGE} -" default predefinito google google facebook facebook errore errore errore spam spam)
  fi
fi
esporta FOX_PROFILE

# Questo hack è necessario, perché l'invio da remoto della riga di comando di Firefox
# ignora il parametro del profilo. Vedi nsAppRunner.cpp: 1505.
export LOGNAME = errore. $ FOX_PROFILE

# Utilizzo dell'esecuzione in background anziché di exec, quindi il comportamento è
# coerente quando il profilo è già in esecuzione e quando è giusto
# cominciando.
$ FOX -profile ~ / .mozilla_profiles / $ FOX_PROFILE "$ @"

# Enorme successo.
uscita 0

Se esegui lo script senza alcun parametro, seleziona automaticamente il profilo predefinito, ma puoi sovrascriverlo impostando manualmente FOX_PROFILE nella shell. Se un URL viene passato nella riga di comando, chiede sempre un profilo in cui aprirlo, questo perché faccio principalmente clic sul mio programma di chat ed e-mail e in quei casi voglio selezionare sempre un profilo (google per il calendario spam, facebook per lo spam di compleanno, ecc.). Ovviamente puoi cambiare la logica per adattarla al tuo stile di utilizzo, questo è solo un esempio, la conoscenza importante è il trucco di LOGNAME.

E ovviamente devi assicurarti che questo script wrapper sia l'unico modo per avviare il browser sul tuo computer. Perché se apri un profilo senza il set LOGNAME corretto, allora non sarai più in grado di comunicare con quel profilo. Ho inserito questo script come il primo nel mio percorso tramite più nomi simbolici, come x-www-browser, firefox, sensible-browser e l'ho inserito anche nella variabile d'ambiente BROWSER. Come fare ciò dipende esattamente dalla tua distribuzione GNU / Linux.


Grazie mille per questo. Mi sembra che l'impostazione del profilo non sia necessaria e che l'impostazione LOGNAME sia sufficiente per fare la cosa giusta.
dset0x,

0

Se hai già un'istanza in esecuzione, Firefox la riutilizzerà. Prova firefox -no-remote.


Ma voglio che riutilizzi un'istanza! Solo uno specifico, non uno casuale che gli piaccia. Se provassi ad aggiungere "-no-remote" al mio comando, ottengo: "Iceweasel è già in esecuzione, ma non risponde. Per aprire una nuova finestra, è necessario prima chiudere il processo Iceweasel esistente o riavviare il sistema".
Miernik,

Ah, questo lo rende più interessante. Temo di non sapere come potresti farlo. IIUC, -no-remote disabilita la "conversazione" tra istanze. Questo potrebbe essere lontano dall'obiettivo e dall'overkill totale, ma è possibile creare un'estensione che esegue il polling di un file centrale o di una coda URL del server e la apre quando è destinata al profilo corrente. Quindi installare tale estensione in tutte le istanze.
Janmoesen,

0

@miemik

"Ma voglio che riutilizzi un'istanza! Solo una specifica, non una casuale a cui piace. Se provassi ad aggiungere" -no-remote "al mio comando, ottengo:" Iceweasel è già in esecuzione, ma non risponde. Per aprire una nuova finestra, devi prima chiudere il processo Iceweasel esistente o riavviare il sistema. "

Hai un problema di autorizzazione con la tua dir profilo ... controlla l'autorizzazione. L'hai copiato o spostato da un'altra posizione (partizione ... disco ...)?

Soluzione:

Diventa root ed esegui top per vedere se funziona come root. Quindi ls -ld nella directory del profilo (che dovrebbe essere sotto la tua home directory con un punto (.) Davanti a loro .. significa che devi usare "ls -al" per vederlo.

Verifica le altre autorizzazioni di quella directory e modifica di conseguenza.

Saluti!


Ho controllato le autorizzazioni e incollato il risultato in una modifica alla mia domanda. Non è questo problema.
miernik,

0

Non funzionerà L'unico modo per far funzionare 2 istanze di un'app Mozilla è disabilitare le connessioni remote alla seconda (di solito con MOZ_NO_REMOTE = 1). Ciò significa che disabiliti la capacità di comunicare con altre istanze (come quella che crea l'apertura di una nuova pagina).

Pertanto, puoi scegliere di aprire una nuova app con no remoteabilitato o di riutilizzare l'istanza che consente l'accesso remoto.


Funziona davvero, vedi la risposta dell'errore. Cosa intendi con non funzionerà ?
punti

0

Dovresti essere in grado di aggiungere il -no-remotesolo alla chiamata del profilo di test (dopo che il profilo del software è già aperto) in questo modo:

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

Ciò dovrebbe consentire a tutti gli altri link di aprirsi in remoto nell'altro profilo.

Se questa soluzione non funziona, è sempre possibile eseguire Firefox come utente separato per i test, utilizzando sudo -u. Firefox dovrebbe davvero essere in grado di gestirlo correttamente con i profili.


Questa risposta non può essere buona perché con il -no-remoteflag viene avviata una nuova istanza di Firefox e la domanda richiede il riutilizzo delle istanze esistenti di Firefox se sono già in esecuzione.
punti

0

Se Mozilla Firefox è già aperto con il profilo predefinito o qualsiasi altro profilo, prova:

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

Testato e lavorato per me con Mozilla Firefox dalla 2.x alla 12.x


Questa risposta non può essere buona perché la riga di comando non contiene il profilo richiesto da usare.
punti

0

La prima volta che avvii un'istanza di Firefox con un determinato profilo, usa il comando:

firefox -P foo -new-instance

È possibile aggiungere un URL alla fine del comando sopra per aprirlo. Successivamente, quando si desidera aprire un URL in tale istanza, è possibile utilizzare:

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

Se stai scrivendo uno script e vuoi scoprire se esiste già un'istanza che esegue quel profilo per vedere quale dei comandi sopra dovrebbe essere chiamato, puoi usare:

firefox -P foo -remote 'ping()'

Testato con Firefox 34 su Linux.

Si noti che attualmente esiste un bug in Firefox che lo rende errore con il messaggio

Error: Failed to send command: 500 command not parseable

se il -remote openurl()comando viene eseguito senza un controllo tty (ad esempio, da uno script avviato da un demone).

Ho riscontrato questo errore durante l'avvio di uno script da un file .desktop in KDE (ad es. Da un launcher nel pannello), quindi ho dovuto selezionare l'opzione "run in terminal", che è un po 'fastidioso.


-1

Per la cronaca, una soluzione è: in KDE impostiamo il browser predefinito per l'esecuzione con il seguente comando:

firefox -P "default"

dove "default" è il nostro profilo che vogliamo usare ogni volta.

Ora, iniziamo la nostra istanza di Firefox senza argomenti (il launcher predefinito di KDE Firefox). Questo apre normalmente Firefox, ora vogliamo aprire un altro profilo, per farlo, facciamo un altro lanciatore nell'editor di menu di KDE:

firefox -ProfileManager -no-remote %u

Questo apre il gestore profilo, scegliamo quale profilo usare.

Testato su più profili contemporaneamente in esecuzione, quando facciamo clic su un URL da qualsiasi app (come un client di chat), viene quindi aperta una nuova scheda nel profilo che abbiamo scelto.

Spero che qualcuno lo trovi utile :).

Non testato su Gnome, ma spero che possa essere replicato.


1
Questo non risponde alla domanda, l'OP vuole avviare automaticamente Firefox con profili diversi da uno script.
terdon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.