Maaf atas jawaban 3 tahun terlambat, saya menjadi tertarik pada topik ini sekarang dan menemukan pertanyaan ini.
Saya tidak menemukan solusi yang terdokumentasi di mana pun, jadi saya memeriksa kode sumbernya dan ini adalah bagian yang sangat relevan:
http://dxr.mozilla.org/mozilla-central/source/toolkit/xre/nsAppRunner.cpp#1537
Di sini, sayangnya nullptr di akhir baris berarti bahwa argumen profil tidak diteruskan ke fungsi SendCommandLine, oleh karena itu tidak mungkin untuk memilih jendela firefox yang benar untuk mengirim pesan openurl ke.
Namun, kami melihat bahwa nama pengguna sedang diteruskan dan nama pengguna sedang dimasukkan dari variabel lingkungan LOGNAME. Berdasarkan ini, saya datang dengan solusi berikut:
- Saya membungkus firefox dengan skrip ini, bernama firefox.sh:
FOX_PROFILE = facebook
export LOGNAME = errge. $ FOX_PROFILE
/ opt / firefox / firefox -profile ~ / .mozilla_profiles / $ FOX_PROFILES "$ @"
ketika dijalankan pertama kali, ia memulai instance baru dan direktori ~ / .mozilla_profiles / facebook harus ada,
ketika berlari kedua kalinya jika profil facebook sudah berjalan, itu terhubung dengan benar,
ia dapat mengirim perintah dengan benar ke beberapa profil yang berjalan (tentu saja Anda harus mengubah parameter FOX_PROFILE di baris pertama dalam skrip yang berbeda).
Saya menguji ini dengan Firefox 26 di Linux dan berhasil.
Atau, inilah solusi lengkap saya yang mungkin Anda inginkan atau tidak ingin Anda gunakan:
#! / bin / bash
set -e
FOX = / opt / firefox / firefox
MESSAGE = $ @
jika [-z "$ FOX_PROFILE"]; kemudian
if [-z "$ {MESSAGE}"]; kemudian
FOX_PROFILE = default
lain
FOX_PROFILE = $ (kdialog - default default --menu "- $ {MESSAGE} -" default default google google facebook facebook errge errge spam spam)
fi
fi
ekspor FOX_PROFILE
# Peretasan ini diperlukan, karena firefox mengirim perintah baris jarak jauh
# mengabaikan parameter profil. Lihat nsAppRunner.cpp: 1505.
export LOGNAME = errge. $ FOX_PROFILE
# Menggunakan eksekusi latar belakang alih-alih exec, jadi perilakunya adalah
# konsisten ketika profil sudah berjalan dan kapan saja
# memulai.
$ FOX -profile ~ / .mozilla_profiles / $ FOX_PROFILE "$ @"
# Sukses besar.
keluar 0
Jika Anda menjalankan skrip tanpa parameter apa pun, skrip memilih profil default secara otomatis, tetapi Anda dapat menimpanya dengan mengatur FOX_PROFILE dengan tangan di shell Anda. Jika URL dilewatkan di baris perintah, selalu meminta profil untuk membukanya, ini karena saya terutama mengklik dari program chat dan email saya dan dalam hal ini saya ingin selalu memilih profil (google for calendar spam, facebook untuk spam ulang tahun, dll.). Tentu saja Anda dapat mengubah logika agar sesuai dengan gaya penggunaan Anda, ini hanyalah sebuah contoh, pengetahuan penting adalah trik LOGNAME.
Dan tentu saja Anda harus memastikan bahwa skrip pembungkus ini adalah satu-satunya cara untuk memulai browser di mesin Anda. Karena jika Anda membuka profil tanpa set LOGNAME yang benar, maka Anda tidak akan dapat berkomunikasi dengan profil itu lagi. Saya menempatkan skrip ini sebagai yang pertama di jalur saya melalui beberapa nama yang disinkronkan, seperti x-www-browser, firefox, sensible-browser dan memasukkannya ke dalam variabel lingkungan BROWSER juga. Cara melakukan ini tergantung pada distribusi GNU / Linux Anda.
Jika Anda sudah menjalankan instance, Firefox akan menggunakannya kembali. Coba
firefox -no-remote
.sumber
@miemik
"Tapi saya ingin menggunakan kembali contoh! Hanya yang spesifik, bukan sembarang yang disukai. Jika saya mencoba menambahkan" -tidak-jauh "ke perintah saya, saya mendapatkan:" Iceweasel sudah berjalan, tetapi tidak merespons. Untuk membuka jendela baru, Anda harus terlebih dahulu menutup proses Iceweasel yang ada, atau restart sistem Anda. "
Anda memiliki masalah izin dengan dir profil Anda ... periksa izin. Apakah Anda menyalin atau memindahkannya dari tempat lain (partisi..disk ..)?
Larutan:
Menjadi root dan jalankan top untuk melihat apakah itu berjalan sebagai root. Kemudian ls-lh di dir profil (yang seharusnya berada di bawah dir home Anda dengan tanda (.) Di depan mereka..berarti Anda harus menggunakan "ls -al" untuk melihatnya.
Verifikasi izin lain dari dir itu dan ubah sesuai.
Bersulang!
sumber
Itu tidak akan berhasil. Satu-satunya cara untuk menjalankan 2 contoh aplikasi Mozilla adalah dengan menonaktifkan koneksi jarak jauh ke yang kedua (biasanya dengan MOZ_NO_REMOTE = 1). Itu berarti Anda menonaktifkan kemampuan untuk berkomunikasi dengan instance lain (seperti membuat membuka halaman baru).
Jadi pilihan Anda adalah membuka aplikasi baru dengan
no remote
diaktifkan, atau menggunakan kembali instance yang memungkinkan akses jarak jauh.sumber
Anda harus dapat menambahkan
-no-remote
hanya ke panggilan profil uji (setelah profil perangkat lunak sudah terbuka) seperti ini:Itu akan memungkinkan semua tautan lain tetap terbuka di profil Anda yang lain dari jarak jauh.
Jika solusi ini tidak berhasil, Anda selalu dapat menjalankan Firefox sebagai pengguna terpisah untuk pengujian, menggunakan
sudo -u
. Firefox benar-benar harus dapat menangani ini dengan benar dengan profil sekalipun.sumber
-no-remote
flag instance Firefox baru dimulai, dan pertanyaannya memerlukan penggunaan kembali instance Firefox yang sudah ada jika sudah dijalankan.Jika Mozilla Firefox Anda sudah terbuka dengan profil Default atau profil lainnya, coba:
Diuji dan bekerja untuk saya dengan Mozilla Firefox dari 2.x hingga 12.x
sumber
Pertama kali Anda memulai instance Firefox dengan profil yang diberikan, gunakan perintah:
Anda dapat menambahkan URL di akhir perintah di atas untuk membukanya. Kemudian, ketika Anda ingin membuka URL dalam hal itu, Anda dapat menggunakan:
Jika Anda menulis skrip dan ingin mencari tahu apakah sudah ada instance yang menjalankan profil itu untuk melihat perintah mana di atas yang harus dipanggil, Anda dapat menggunakan:
Diuji dengan Firefox 34 di Linux.
Perhatikan bahwa saat ini ada bug di Firefox yang membuatnya kesalahan dengan pesan
jika
-remote openurl()
perintah dibuat tanpa tty yang mengontrol (misalnya, dari skrip yang dimulai oleh daemon).Saya menekan bug ini ketika meluncurkan skrip dari file .desktop di KDE (mis., Dari peluncur di panel), jadi saya harus mencentang opsi "run in terminal", yang sedikit mengganggu.
sumber
Sebagai catatan, satu solusinya adalah: di KDE kami mengatur browser default untuk dijalankan dengan perintah berikut:
di mana "default" adalah profil kami yang ingin kami gunakan setiap kali.
Sekarang, kami memulai instance Firefox kami tanpa argumen (default KDE Firefox launcher). Ini membuka Firefox secara normal, sekarang kami ingin membuka profil lain, untuk melakukannya, kami membuat peluncur lain di editor menu KDE:
Ini membuka manajer profil, kami memilih profil mana yang akan digunakan.
Diuji pada beberapa profil yang berjalan bersamaan, ketika kami mengklik url dari aplikasi apa pun (seperti klien obrolan), tab baru kemudian dibuka di profil yang kami pilih.
Semoga seseorang menemukan ini bermanfaat :).
Tidak diuji pada Gnome, tapi saya harap itu bisa ditiru.
sumber