Firefox เครื่อง Linux สองเครื่อง X-server หนึ่งเครื่อง


10

ฉันมีเครื่อง Linux ฉันเข้าสู่ระบบผ่านทาง ssh (putty) จาก Windows เป็นประจำ ฉันกำลังเรียกใช้ VcXsrv X-server บนเดสก์ท็อป Windows ของฉัน ฉันใช้สิ่งนี้เป็นหลักในการเรียกใช้ดีบักเกอร์ (ddd) และ firefox เพื่อเข้าถึงระบบตรวจสอบโค้ดทางเว็บของเรา สะดวกในการใช้ Linux firefox ดังนั้นฉันจึงสามารถเปิดใช้งานได้จากสคริปต์ ปกติฉันจะเปิดสิ่งนี้ด้วย "- แท็บใหม่" เพื่อไม่ให้สร้างหน้าต่างใหม่ต่อไป

ตอนนี้ฉันมีเครื่องลีนุกซ์รุ่นใหม่ที่ฉันใช้พร้อม ๆ กับของเก่าในขณะนั้น สิ่งที่ฉันสังเกตเห็นคือพฤติกรรมแปลก ๆ : เมื่อฉันเปิดใช้งานเซสชัน firefox ใหม่หากมีสิ่งหนึ่งที่ทำงานอยู่บนเครื่องใดเครื่องหนึ่งแล้วจะใช้สิ่งนั้น

สิ่งที่ฉันต้องการจะทำก็ยังคงเปิดตัวเป็นแท็บใหม่ แต่ภายใต้อินสแตนซ์ของ firefox จากเครื่องปัจจุบันไม่ใช่อินสแตนซ์จากเครื่องอื่นที่ปรากฏขึ้นบน X-server เดียวกัน

ฉันได้เล่นกับธงต่าง ๆ รวมถึง - ไม่มี - ระยะไกล - ใหม่ - อินสแตนซ์และยังกำหนดและใช้โพรไฟล์เฉพาะ อย่างไรก็ตามฉันไม่สามารถรับผลลัพธ์ที่ต้องการได้ ไม่ว่าฉันจะได้รับพฤติกรรมที่ฉันอธิบายไว้ข้างต้นหรือฉันได้รับข้อผิดพลาดในการพูดบางอย่างเช่น "Firefox กำลังทำงานอยู่ แต่ไม่ตอบสนองโปรดปิด"

แก้ไข: ฉันถูกขอให้แก้ไขสิ่งนี้เพื่อให้ตัวอย่างบางส่วน

ตกลง. ในสิ่งต่อไปนี้ฉันจะอ้างถึง M_OLD และ M_NEW เหล่านี้เป็นเครื่องแยกต่างหากที่ใช้ Linux เวอร์ชันต่าง ๆ พร้อม Firefox รุ่นต่าง ๆ (1.5 และ 19) ฉันเชื่อมต่อกับพวกเขาทั้งสองผ่านไคลเอนต์ ssh ชื่อ Putty และกำลังส่งต่อ X ไปยังเซิร์ฟเวอร์ X บนเดสก์ท็อป Windows ของฉัน มีเซิร์ฟเวอร์ X เดียวที่เกี่ยวข้อง

ตัวอย่างที่ 1:

ดังนั้นจากช่วงเวลาโป๊วของฉันถึง M_OLD ฉันจึงเรียกใช้:

firefox www.google.com &

และจากช่วงฉาบ M_NEW ของฉันฉันวิ่ง:

firefox www.imdb.com &

จากนั้นฉันจะได้รับหนึ่งหน้าต่าง firefox 1.5 สองแท็บ ถ้าฉันทำแบบเดียวกันฉันจะได้ผลลัพธ์เหมือนกัน แต่กับ firefox 19. ในคำอื่น ๆ ตามที่อธิบายไว้ในความคิดเห็นด้านล่างคำสั่งแรกจะเรียกใช้อินสแตนซ์ของ firefox ที่สองเพียงบอกอินสแตนซ์ที่มีอยู่เพื่อเปิดแท็บใหม่ แม้ว่าอินสแตนซ์จะอยู่ในเครื่องอื่นตราบใดที่เป็นเซิร์ฟเวอร์ X เดียวกัน

อย่างไรก็ตามฉันไม่ต้องการสิ่งนี้ ฉันต้องการแยกอินสแตนซ์สำหรับเครื่องที่แยกต่างหาก ดังนั้น:

ตัวอย่างที่ 2:

ดังนั้นจากช่วงเวลาโป๊วของฉันถึง M_OLD ฉันจึงเรียกใช้:

firefox -no-remote www.google.com &

และจากช่วงฉาบ M_NEW ของฉันฉันวิ่ง:

firefox -no-remote www.imdb.com &

ตอนนี้ฉันมี Firefox สองชุดแยกกัน อย่างไรก็ตามถ้าฉันวิ่งบน M_NEW:

firefox -no-remote www.google.com &

ฉันจะได้รับ

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.

และแม้ว่าฉันจะพยายาม

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

หรือเพียงแค่

firefox -new-instance www.google.com &

จากนั้นฉันจะยังคงได้รับข้อผิดพลาด

สิ่งที่ฉันต้องการจริงๆ - และอาจเป็นไปไม่ได้ - คือการมีอินสแตนซ์แยกต่างหากสำหรับแต่ละเครื่อง แต่หากมีการเปิดตัว URL ใหม่จากเครื่องนั้นจะเปิดแท็บใหม่ขึ้นมา ดูเหมือนว่าฉันสามารถมีได้เพียงหนึ่งอินสแตนซ์ที่มีแท็บใหม่สำหรับแต่ละ URL หรือหนึ่งอินสแตนซ์ต่อเครื่อง แต่หนึ่งครั้งเท่านั้น

หวังว่าจะชัดเจนขึ้น


คุณช่วยอธิบายได้ไหม เครื่อง Linux ตัวใหม่มีความเกี่ยวข้องกันอย่างไร? คุณกำลังส่งต่อ X ไปยังเครื่อง Windows ของคุณใช่ไหม คุณเชื่อมต่อกับกล่อง Linux ทั้งสองในเวลาเดียวกันหรือไม่? โปรดให้รายละเอียดเพิ่มเติมเกี่ยวกับวิธีการเชื่อมต่อแต่ละช่อง
terdon

ตกลงดังนั้นเมื่อเกิดปัญหาขึ้นคุณเชื่อมต่อกับเครื่องทั้งสองssh -Xถูกต้องหรือไม่
terdon

ใช่ฉันส่งต่อ X ไปยังเครื่อง Windows ของฉัน ใช่ฉันเชื่อมต่อกับทั้งสอง เครื่องใหม่มีความเกี่ยวข้องเพราะฉันยังเปิดตัว Firefox จากมัน อย่างไรก็ตามแทนที่จะเปิดตัวอินสแตนซ์ใหม่ของ firefox มันจะเปิดแท็บใหม่ในอินสแตนซ์ที่มีอยู่ - อันที่เปิดตัวจากเครื่องเก่า เหมือนกับว่ากระบวนการ firefox ใหม่ตรวจสอบเพื่อดูว่า firefox ทำงานบนเซิร์ฟเวอร์ X นั้นและส่งข้อความเพื่อเปิดแท็บใหม่ ซึ่งฉลาดมาก แต่ไม่ใช่สิ่งที่ฉันต้องการ "เก่า" และ "ใหม่" มีความเกี่ยวข้องเฉพาะในขณะที่พวกเขาเป็นรุ่นที่แตกต่างกันมากของ Firefox ทำให้รู้สึก?
PaulM

1
สิ่งที่คุณอธิบายเป็นเรื่องปกติ (เท่าที่ผมพบความประหลาดใจของฉัน) ฉันไม่ได้รับวิธีการที่จะไม่คงที่เมื่อทำงานกับ--no-remoteแม้ว่า คุณสามารถแก้ไขคำถามและแจ้งให้เราทราบเมื่อคุณได้รับข้อความ "Firefox ทำงานแล้ว" การรันfirefox -no-remote ควรเริ่มต้นอินสแตนซ์ firefox ใหม่ที่รันบนเครื่องระยะไกล แต่แสดงบนเซิร์ฟเวอร์ X ในเครื่อง
terdon

1
ฉันคิดว่าคุณยังอาจต้องเพิ่ม -p -p -no-remoteเช่น สิ่งนี้อนุญาตให้เริ่มต้นด้วยโปรไฟล์ Fx ใหม่ ดูตัวเลือกบรรทัดคำสั่ง ในการเชื่อมต่อกับกระบวนการ Fx ที่มีอยู่คุณสามารถลองfirefox https://www.mozilla.orgหรือfirefox -remote "openURL(https://www.mozilla.org, new-tab)"
vWil

คำตอบ:


1

อินสแตนซ์ Firefox ที่แตกต่าง (เช่นสร้างด้วย--no-remote) ต้องมีโปรไฟล์แยกต่างหาก

ตัวเลือก 1: สร้างสองโปรไฟล์ (หรือมากกว่า) หนึ่งโปรไฟล์สำหรับแต่ละระบบที่ใช้ Firefox ตัวอย่าง

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

ตอนนี้เริ่ม Firefox และเลือกโปรไฟล์เมื่อเริ่มต้น

firefox --no-remote -P localuser

หรือ

firefox --no-remote -P host1

ตัวเลือกที่ 2: ตั้งค่าโซลูชันแบบไดนามิกเพื่อสร้างโปรไฟล์ "ทิ้ง" เมื่อเริ่มต้นเช่นการขัดจังหวะตามบรรทัดของ:

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

คุณอาจต้องการเพิ่มขั้นตอนในการลบโปรไฟล์ชั่วคราวหลังจากนั้น (สามารถพบไดเร็คคอตเพื่อลบออกได้โดยแยกวิเคราะห์เอาต์พุตจากคำสั่ง CreateProfile ซึ่งจัดเก็บผ่านคำสั่งด้านบนใน /tmp/.mozprofile.$TEMPPROFILE


ลองแล้ว - ดู "ตัวอย่าง 2"
PaulM

อ่าใช่จริง - อินสแตนซ์ที่แตกต่างต้องใช้โปรไฟล์ที่ต่างกัน
Johan

"ตัวเลือก" แรกที่คุณเสนอไม่สมเหตุสมผลเลยจริง ๆ ดังนั้นฉันจึงเสนอให้มันถูกลบออกจากคำตอบของคุณ
SamB

แม้ว่าในความเป็นจริงมันอาจจะทำงานได้โดยไม่ต้อง-no-remote...
SAMB

0

ตกลง ... ไม่รู้ว่ามันจะใช้งานได้หรือไม่ แต่เป็นสิ่งแรกที่ฉันจะลอง:

ถ้าคุณสร้างสคริปต์ที่สองในแต่ละเครื่องซึ่งไม่ได้พยายามสร้างแท็บใหม่เพียงแค่อินสแตนซ์ใหม่ หากคุณไม่มี FF ที่กำลังทำงานบนเครื่องนั้นคุณใช้สคริปต์ใหม่นี้ แต่ถ้ามันกำลังทำงานอยู่คุณใช้สคริปต์เก่าที่สร้างแท็บใหม่

หากวิธีนี้ใช้งานได้คุณอาจสามารถแยกวิเคราะห์ regex ของเอาต์พุต ps ในสคริปต์เดียวเพื่อดูว่า FF ทำงานอยู่บนเครื่องอยู่หรือไม่และใช้สวิตช์ -new-tab หรือ -no-remote ขึ้นอยู่กับว่ามันทำงานอะไร พบ; แต่คุณอาจต้องการรอจนกว่าจะมีการทดสอบวิธีการนี้เนื่องจากเป็นการเข้ารหัสที่เหมาะสมสำหรับบางสิ่งที่อาจไม่ทำงาน ....


ฟังดูเหมือนมันอาจจะใช้ได้ - แต่ฉันก็ยอมแพ้กับสิ่งนี้ M_OLD กำลังถูกปลดประจำการในไม่ช้า
PaulM

0

ดูXRemoteClient.cppฉันคิดว่าคุณควรทำ:

user@host1$ firefox -CreateProfile profile1

และ:

user@host2$ firefox -CreateProfile profile2

จากนั้นเมื่อคุณต้องการไปที่ใดที่หนึ่งให้ทำสิ่งที่ต้องการ

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

หรือฉันคิดว่าคุณสามารถเดาได้ว่าจะทำอย่างไรกับ host2

เห็นได้ชัดว่าคุณสามารถเลือกชื่อที่ดีกว่า นอกจากนี้ยังไม่สำคัญว่าคุณจะสร้างโปรไฟล์อย่างไร สิ่งสำคัญคือการระบุชื่อโปรไฟล์ในบรรทัดคำสั่งทุกครั้งที่คุณเรียกใช้โดยที่แต่ละอินสแตนซ์มีชื่อโปรไฟล์ของตัวเอง

นี้อาจแม้กระทั่งการทำงาน


0

ฉันมีทางออกที่สวยงามมากที่นี่ถ้าคุณยังต้องการ ตอนนี้ฉันมีตัวอย่างเช่น 5 อินสแตนซ์ที่เป็นอิสระของ Firefox ที่ทำงานอยู่และมากเท่าที่ฉันต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.