cara membuka URL di Firefox dari jarak jauh di profil tertentu?


9

Saya memiliki beberapa contoh Firefox dengan beberapa profil berbeda berjalan. Diantaranya profil dengan nama "software" dan "test".

Saya mencoba membuka URL dari skrip bash untuk membukanya di profil "test", seperti ini:

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

Namun itu tetap membukanya di profil "perangkat lunak". Ada ide?

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

Tidak, ini bukan masalah izin, semua direktori profil saya sepenuhnya di bawah izin saya:

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# 

Jawaban:


7

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.


Terima kasih banyak atas ini. Menurut saya pengaturan profil tidak diperlukan dan pengaturan LOGNAME cukup untuk melakukan hal yang benar.
dset0x

0

Jika Anda sudah menjalankan instance, Firefox akan menggunakannya kembali. Coba firefox -no-remote.


Tapi saya ingin menggunakan kembali contoh! Hanya yang spesifik, bukan sembarang yang disukai. Jika saya mencoba menambahkan "-no-remote" 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."
miernik

Ah, itu membuatnya lebih menarik. Saya khawatir saya tidak tahu bagaimana Anda bisa melakukan itu. IIUC, -tidak ada remote menonaktifkan "berbicara" antara instance. Ini mungkin jauh dari target dan total berlebihan, tetapi Anda dapat membuat ekstensi yang memilih file pusat atau antrian URL server dan membukanya ketika itu dimaksudkan untuk profil saat ini. Anda kemudian menginstal ekstensi itu di semua instance Anda.
janmoesen

0

@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!


Saya memeriksa izin dan menempelkan hasilnya di edit untuk pertanyaan saya. Bukan masalah itu.
miernik

0

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 remotediaktifkan, atau menggunakan kembali instance yang memungkinkan akses jarak jauh.


Itu memang berhasil, lihat jawaban errge. Apa maksudmu dengan itu tidak akan berhasil ?
Poin

0

Anda harus dapat menambahkan -no-remotehanya ke panggilan profil uji (setelah profil perangkat lunak sudah terbuka) seperti ini:

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

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.


Jawaban ini tidak baik karena dengan -no-remoteflag instance Firefox baru dimulai, dan pertanyaannya memerlukan penggunaan kembali instance Firefox yang sudah ada jika sudah dijalankan.
Poin

0

Jika Mozilla Firefox Anda sudah terbuka dengan profil Default atau profil lainnya, coba:

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

Diuji dan bekerja untuk saya dengan Mozilla Firefox dari 2.x hingga 12.x


Jawaban ini tidak baik karena baris perintah tidak berisi profil yang diperlukan untuk digunakan.
Poin

0

Pertama kali Anda memulai instance Firefox dengan profil yang diberikan, gunakan perintah:

firefox -P foo -new-instance

Anda dapat menambahkan URL di akhir perintah di atas untuk membukanya. Kemudian, ketika Anda ingin membuka URL dalam hal itu, Anda dapat menggunakan:

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

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:

firefox -P foo -remote 'ping()'

Diuji dengan Firefox 34 di Linux.

Perhatikan bahwa saat ini ada bug di Firefox yang membuatnya kesalahan dengan pesan

Error: Failed to send command: 500 command not parseable

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.


-1

Sebagai catatan, satu solusinya adalah: di KDE kami mengatur browser default untuk dijalankan dengan perintah berikut:

firefox -P "default"

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:

firefox -ProfileManager -no-remote %u

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.


1
Ini tidak menjawab pertanyaan, OP ingin meluncurkan firefox dengan profil yang berbeda dari skrip secara otomatis.
terdon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.