Firefox, dua mesin Linux, satu X-server

10

Saya memiliki mesin Linux yang secara teratur saya masuki melalui ssh (dempul) dari Windows. Saya menjalankan VcXsrv X-server di desktop Windows saya. Saya terutama menggunakan ini untuk menjalankan debugger (ddd) dan firefox untuk mengakses sistem peninjauan kode berbasis web kami. Lebih mudah menggunakan Linux firefox sehingga saya bisa meluncurkannya dari skrip. Saya biasanya meluncurkan ini dengan "-new-tab" agar tidak terus membuat jendela baru.

Sekarang saya punya mesin Linux pembaruan baru yang saya jalankan bersama yang lama untuk saat ini. Apa yang saya perhatikan adalah beberapa perilaku aneh: ketika saya meluncurkan sesi firefox baru jika ada yang sudah berjalan di kedua mesin, maka ia menggunakan itu.

Apa yang saya ingin dapat lakukan masih diluncurkan sebagai tab baru tetapi hanya di bawah contoh firefox dari mesin saat ini, bukan sebuah contoh dari mesin yang berbeda yang kebetulan ditampilkan pada server-X yang sama.

Saya telah bermain-main dengan berbagai flag termasuk -no-remote, -new-instance dan juga mendefinisikan dan menggunakan profil tertentu. Namun saya belum bisa mendapatkan hasil yang diinginkan. Entah saya mendapatkan perilaku yang saya jelaskan di atas, atau saya mendapatkan kesalahan mengatakan sesuatu seperti "Firefox sudah berjalan tetapi tidak merespons, harap tutup".

EDIT: Saya diminta mengedit ini untuk memberikan beberapa contoh.

BAIK. Berikut ini saya akan merujuk ke M_OLD dan M_NEW. Ini adalah mesin terpisah yang menjalankan berbagai versi Linux dengan versi Firefox yang berbeda (1.5 dan 19). Saya terhubung ke keduanya melalui klien ssh bernama Putty dan saya meneruskan X ke server X di desktop Windows saya. Hanya ada satu server X yang terlibat.

Contoh 1:

Jadi dari sesi dempul saya ke M_OLD saya jalankan:

firefox www.google.com &

dan dari sesi dempul M_NEW saya, saya menjalankan:

firefox www.imdb.com &

lalu saya mendapatkan satu jendela firefox 1.5 dengan dua tab. Jika saya melakukan hal yang sama secara terbalik, saya mendapatkan hasil yang sama tetapi dengan firefox 19. Dengan kata lain, seperti yang dijelaskan dalam komentar di bawah ini, perintah pertama meluncurkan sebuah instance dari firefox yang kedua hanya memberi tahu instance yang ada untuk membuka tab baru. Bahkan jika instance ada di komputer lain, asalkan X server yang sama.

Namun saya tidak menginginkan ini. Saya ingin memiliki mesin virtual yang terpisah untuk mesin yang berbeda. Begitu:

Contoh 2:

Jadi dari sesi dempul saya ke M_OLD saya jalankan:

firefox -no-remote www.google.com &

dan dari sesi dempul M_NEW saya, saya menjalankan:

firefox -no-remote www.imdb.com &

Sekarang saya memiliki dua contoh firefox yang terpisah. Namun jika saya menjalankannya di M_NEW:

firefox -no-remote www.google.com &

Saya akan mendapatkan

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.

dan bahkan jika saya mencoba

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

atau hanya

firefox -new-instance www.google.com &

maka saya masih akan mendapatkan kesalahan.

Apa yang benar-benar saya inginkan - dan mungkin tidak mungkin - adalah memiliki contoh terpisah untuk setiap mesin tetapi jika URL baru diluncurkan dari mesin itu, ia membuka tab baru. Sepertinya saya hanya dapat memiliki satu instance dengan tab baru untuk setiap URL, atau satu instance per mesin, tetapi hanya satu per satu.

Semoga itu lebih jelas.

PaulM
sumber
Bisakah Anda mengklarifikasi? Bagaimana mesin Linux baru ini relevan? Anda meneruskan X ke mesin Windows Anda, kan? Apakah Anda terhubung ke kedua kotak Linux secara bersamaan? Tolong beri beberapa detail tentang bagaimana Anda terhubung ke setiap kotak.
terdon
OK, jadi ketika masalah terjadi Anda terhubung ke kedua mesin dengan ssh -Xbenar?
terdon
Ya saya meneruskan X ke mesin Windows saya. Ya saya terhubung dengan keduanya. Mesin baru ini relevan karena saya juga meluncurkan firefox darinya. Namun alih-alih meluncurkan instance baru dari firefox, ia membuka tab baru pada instance yang sudah ada - yang diluncurkan dari mesin lama. Seolah-olah proses firefox baru memeriksa untuk melihat apakah firefox berjalan pada server X itu dan jika demikian mengirimkannya pesan untuk membuka tab baru. Yang sangat pintar tapi bukan yang saya inginkan. "Lama" dan "baru" hanya relevan sejauh mereka merupakan versi firefox yang sangat berbeda. Masuk akal?
PaulM
1
Apa yang Anda gambarkan adalah normal (seperti yang saya tahu mengejutkan saya), saya tidak mengerti bagaimana itu tidak tetap ketika berjalan dengan --no-remote. Bisakah Anda mengedit pertanyaan Anda dan memberi tahu kami ketika Anda mendapatkan pesan "Firefox sudah berjalan"? Menjalankan firefox -no-remote harus memulai instance firefox baru yang berjalan pada mesin jarak jauh tetapi ditampilkan pada server X lokal Anda.
terdon
1
Saya pikir Anda mungkin juga harus menambahkan -p misalnya -p -no-remote. Ini memungkinkan untuk memulai dengan profil Fx baru. Lihat opsi baris perintah . Untuk terhubung ke proses Fx yang ada, Anda dapat mencoba firefox https://www.mozilla.orgataufirefox -remote "openURL(https://www.mozilla.org, new-tab)"
vWil

Jawaban:

1

Contoh Firefox yang berbeda (misalnya dibuat dengan --no-remote) harus memiliki profil yang terpisah.

Opsi 1: Buat dua (atau lebih) profil, satu untuk setiap sistem yang menjalankan Firefox. Contoh

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

Sekarang mulai firefox dan pilih profil saat startup

firefox --no-remote -P localuser

atau

firefox --no-remote -P host1

Opsi 2: Siapkan solusi dinamis untuk membuat profil "sekali pakai" pada saat startup, mis. Sebuah pemberhentian di sepanjang baris:

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

Anda mungkin ingin menambahkan langkah-langkah untuk menghapus profil sementara setelah itu (direcotry untuk menghapus dapat ditemukan dengan mem-parsing output dari perintah CreateProfile, disimpan melalui perintah di atas di /tmp/.mozprofile.$TEMPPROFILE

Johan
sumber
sudah mencobanya - lihat "contoh 2"
PaulM
Ah ya, benar - contoh berbeda harus menggunakan profil yang berbeda.
Johan
"Opsi" pertama yang Anda usulkan tidak masuk akal sama sekali, sungguh, jadi saya telah mengusulkan agar dihapus dari jawaban Anda.
SamB
Padahal, sebenarnya, itu mungkin berhasil tanpa -no-remote...
SamB
0

Ok ... tidak tahu apakah ini akan berhasil, tapi itu hal pertama yang saya coba:

Bagaimana jika Anda membuat skrip kedua di setiap mesin, yang tidak mencoba membuat tab baru, hanya contoh baru. Jika FF Anda saat ini tidak berjalan di mesin itu, Anda menggunakan skrip baru ini, tetapi jika sudah berjalan, Anda menggunakan skrip lama yang membuat tab baru.

Jika ini berhasil, Anda mungkin dapat melakukan regex parsing output ps dalam satu skrip untuk melihat apakah FF sudah berjalan pada mesin, dan baik menggunakan -new-tab switch atau -no-remote, tergantung pada apa menemukan; tetapi Anda mungkin ingin menunggu sampai metode ini diuji, karena cukup banyak pengkodean untuk sesuatu yang mungkin tidak berfungsi ....

Layanan CB
sumber
kedengarannya seperti itu mungkin berhasil - tetapi tbh saya menyerah pada ini. M_OLD akan segera dinonaktifkan.
PaulM
0

Melihat XRemoteClient.cpp , saya pikir Anda harus melakukan:

user@host1$ firefox -CreateProfile profile1

dan:

user@host2$ firefox -CreateProfile profile2

Kemudian, ketika Anda ingin pergi ke suatu tempat, lakukan sesuatu seperti

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

atau, well, saya pikir Anda bisa menebak apa yang harus dilakukan pada host2.

Jelas, Anda dapat memilih nama yang lebih baik. Tidak masalah bagaimana Anda membuat profil. Yang penting adalah menentukan nama profil pada baris perintah setiap kali Anda memintanya, di mana setiap instance memiliki nama profilnya sendiri.

Ini bahkan mungkin berhasil .

SamB
sumber
0

Saya punya solusi yang cukup elegan di sini jika Anda masih membutuhkannya. Untuk saat ini saya memiliki, misalnya, 5 instance independen dari firefox yang berjalan dan sebanyak yang saya inginkan.

tmh1999
sumber