เป็นไปได้ไหมที่จะย้ายหน้าต่างจากหน้าจอ X หนึ่งไปยังอีกหน้าจอหนึ่งบนโฮสต์เดียวกัน


16

ฉันใช้ XFCE 4.12 โดยมีการตั้งค่าจอภาพ 3 จอเป็นสองหน้าจอ X และการ์ดวิดีโอสองอันบนคอมพิวเตอร์เครื่องเดียวกัน จอภาพสองจอสร้างหน้าจอ X เดียวโดยใช้ฟังก์ชั่น nvidia twinview ซึ่งก็คือ Screen0 บน Device0 ใน Xorg config จอภาพที่ 3 ใช้สำหรับหน้าจอที่สองซึ่งเป็น Screen1 บน Device1 ใน Xorg config ฉันสามารถลากหน้าต่างละเอียดระหว่างจอภาพบน Screen0 ฉันยังสามารถเลื่อนเมาส์ได้อย่างอิสระระหว่าง Screen0 และ Screen1 และแม้แต่ข้อมูลคลิปบอร์ดก็ถูกนำไปใช้ระหว่างหน้าจอ X สองหน้าจอได้

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

คำถามของฉันคือถ้ามีวิธีการย้ายโปรแกรมในขณะที่มันทำงานไปที่หน้าจออื่นโดยใช้คำสั่งหรือฟังก์ชั่นอื่น ๆ ของ X windows ขอบคุณ

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


1
xpraนำเสนอบางสิ่งที่คล้ายคลึงกับสิ่งที่คุณถาม ...
vlp

googling ยังเผยให้เห็น xmove

ฉันจำไม่ได้ว่าฉันต้องเปลี่ยนอะไรบางอย่างใน CentOS 5 หรือ 6 เพื่อให้ได้พฤติกรรมนั้น คุณใช้เวอร์ชั่นใดในการกระจาย?
นิลส์

สิ่งนี้ดูเหมือนซ้ำกับunix.stackexchange.com/questions/152291/…
Nathan Fellman

@NathanFellman เป็นไปได้ แต่ฉันไม่คิดว่าในกรณีของฉันฉันกำลังพูดถึงการย้ายระหว่างการแสดงผล ตามรายการกระบวนการของฉันฉันกำลังทำงานเพียงครั้งเดียวของอินสแตนซ์ของกระบวนการ X ซึ่งก็คือ: 0 ไม่มี: 1 หรือ: 2 เป็นต้นบางทีนี่อาจเป็นปัญหากับวิธีที่ XFCE จัดการหลายหน้าจอหรือบางอย่างในการกำหนดค่าของฉัน เกี่ยวกับโปรแกรมที่กล่าวถึงจนถึงขณะนี้ยังไม่มีการบำรุงรักษาหรือใช้งานได้ xmove เกือบ 20 ปีแล้วและฉันไม่พบสำเนาของ XiMove xpra ดูเหมือนจะเป็นโปรแกรมที่ผิดสำหรับสิ่งที่ฉันพยายามทำ
deltaray

คำตอบ:


13

คุณไม่สามารถย้ายแอปพลิเคชัน X ที่เริ่มต้นโดยตรงกับเซิร์ฟเวอร์ X ที่แอปพลิเคชันจะปรากฏขึ้นในที่สุดเนื่องจากไคลเอนต์ X ถูก "เชื่อมโยงกับเซิร์ฟเวอร์ X (จอแสดงผล X) ที่เริ่มขึ้นในช่วงอายุ" [ 1 ] นี่คือ มีแนวโน้มมากที่จะทำกับข้อมูลเมตาที่เซิร์ฟเวอร์ X เก็บไว้เกี่ยวกับหน้าต่างของไคลเอ็นต์ที่ไม่สามารถถ่ายโอนระหว่างเซิร์ฟเวอร์ X ได้อย่างง่ายดาย

เช่นเดียวกับหน้าจอที่กำหนดค่าแยกต่างหาก (เมื่อไม่ได้ใช้ส่วนขยายเช่น Xinerama หรือ Twinview) สำหรับโปรแกรมที่ไม่มีการสนับสนุนหลายหน้าจออย่างชัดเจนเขียนด้วย - "ด้วยการกำหนดค่านี้ทำให้ไม่สามารถย้ายหน้าต่างระหว่างหน้าจอนอกเหนือจาก โปรแกรมพิเศษสองสามอย่างเช่น GIMP และ Emacs ที่รองรับหลายหน้าจอ "[ 2 ]

ในทางทฤษฎีหากแอปพลิเคชันได้รับการออกแบบมาเพื่อรับมือกับการสลับบริบทของเซิร์ฟเวอร์ X มันอาจมีหมายเลขหน้าจอ / หน้าจอใหม่บันทึกสถานะของ windows เชื่อมต่อกับ X server / หน้าจอใหม่และคืนค่าหน้าต่างใหม่ แอปพลิเคชันจะได้รับการออกแบบในลักษณะนี้และอาจจำเป็นต้องมีส่วนร่วมอย่างมากในส่วนของสำเร็จรูปหรือการรวมของห้องสมุดที่จะช่วยอำนวยความสะดวกในเรื่องนี้

ตัวเลือกที่ดีที่สุดสำหรับคุณน่าจะใช้แอปพลิเคชั่นอื่นที่สามารถทำหน้าที่เป็นพร็อกซีระหว่างไคลเอนต์ X และเซิร์ฟเวอร์ X ที่แสดงในลักษณะที่คล้ายกันที่หน้าจอ GNU สามารถใช้สำหรับคอนโซลแอปพลิเคชันและเทอร์มินัล Xmove และ Xpra [ 3 & 4 ] ดูเหมือนจะเป็นการใช้งานที่แพร่หลายที่สุดสำหรับการทำเช่นนี้ ข้อแม้ของการใช้สิ่งเหล่านี้คือแอปพลิเคชันที่คุณเริ่มต้องลงทะเบียนกับ Xmove หรือ Xpra เป็นเซิร์ฟเวอร์ X เพื่อให้สามารถสลับบริบทระหว่างเซิร์ฟเวอร์ดิสเพลย์ที่แตกต่างกัน

ในที่สุดก็มีคำถามอีกข้อหนึ่งบน SuperUser นั่นคือการถามคำถามที่คล้ายกันเพื่อจุดประสงค์ที่แตกต่างกันเล็กน้อย (เชื่อมต่อกับ X อีกครั้งหลังจาก X ล่มแทนที่จะทำการตัดการเชื่อมต่อ / เชื่อมต่อไคลเอนต์โดยเจตนา) [ 5 ]


2
ขอบคุณที่พยายามตอบ แต่นี่ไม่ใช่ปัญหา ฉันกำลังพูดถึงการย้ายระหว่างหน้าจอ X ในเซิร์ฟเวอร์เดียวกันไม่ใช่ระหว่างเซิร์ฟเวอร์ X
deltaray

5
ฉันพลาดที่แตกต่างกันนิดหน่อย แต่เดิมขอโทษ น่าเสียดายที่ไม่มีส่วนขยายเช่น Xinerama ที่รวมหน้าจอหลายหน้าจอเข้าด้วยกันดูเหมือนว่าแอปพลิเคชันจะจัดการหน้าจอแยกกันบนเซิร์ฟเวอร์เดียวกันเป็นเซิร์ฟเวอร์โลจิคัลแยกต่างหากและจัดการการเชื่อมต่อกับพวกเขาแยกต่างหาก - ดูลิงก์ [2] วิธีแก้ปัญหาสำหรับการย้ายแอปพลิเคชันระหว่างเซิร์ฟเวอร์ X ควรมีไว้สำหรับการย้ายระหว่างหน้าจอคุณเพียงแค่ต้องระบุส่วนของหน้าจอของตัวแปรสภาพแวดล้อม DISPLAY เมื่อ (ตัวอย่าง) ติด Xpra
Benjamin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.