การแสดงผลหน้าจอระยะไกล


10

ห้องปฏิบัติการวิจัยของฉันเพิ่งเพิ่มเซิร์ฟเวอร์ที่มีการ์ดกราฟิก NVIDIA ซึ่งเราต้องการใช้ในการคำนวณทางวิทยาศาสตร์ เนื่องจากไม่ใช่เวิร์กสเตชันเราจะต้องเรียกใช้งานจากระยะไกลผ่านการเชื่อมต่อ ssh แอปพลิเคชั่นส่วนใหญ่ของเราต้องการทำการเรนเดอร์ opengl ให้เป็นบัฟเฟอร์นอกจอจากนั้นทำการวิเคราะห์รูปภาพเกี่ยวกับผลลัพธ์ใน CUDA

การตรวจสอบครั้งแรกของฉันแสดงให้เห็นว่าการส่งต่อ X11 เป็นความคิดที่ไม่ดีเนื่องจากการเรนเดอร์ opengl จะเกิดขึ้นบนเครื่องไคลเอนต์ (หรือมากกว่าเซิร์ฟเวอร์ X11 - เป็นวิธีการตั้งชื่อที่สับสน!) และจะเกิดปัญหาคอขวด เราไม่จำเป็นต้องแสดงผลลัพธ์ดังนั้นดูเหมือนว่าการส่งต่อ X11 ไม่จำเป็น แต่ Opengl ต้องการให้ $ DISPLAY ตั้งค่าเป็นสิ่งที่ถูกต้องมิฉะนั้นแอปพลิเคชันของเราจะไม่ทำงาน ฉันแน่ใจว่าฟาร์มมีอยู่จริงที่ทำสิ่งนี้ แต่มันสำเร็จได้อย่างไร ฉันคิดว่านี่อาจเป็นปัญหาการกำหนดค่า X11 ที่เรียบง่าย แต่ฉันไม่คุ้นเคยกับมันมากเกินไปที่จะรู้ว่าจะเริ่มต้นอย่างไร

เรากำลังใช้เซิร์ฟเวอร์ Ubuntu 10.04 โดยไม่มีการติดตั้ง gdm, gnome และอื่น ๆ อย่างไรก็ตามมีการติดตั้งแพ็คเกจ xserver-xorg


ฉันจะลอง <code> x11vnc </code> แต่มันไม่น่าเป็นไปได้ที่จะทำงาน
Hubert Kario

คำตอบ:


6

นานมาแล้วที่ฉันถามคำถามนี้ดังนั้นฉันคิดว่าฉันจะพูดถึงวิธีการแก้ปัญหาที่เราใช้ในท้ายที่สุด

การไฮแจ็คหน้าจอ X แบบโลคัล

ในที่สุดฉันเพิ่งรันโปรแกรม opengl ระยะไกลบนหน้าจอ X ท้องถิ่นของเซิร์ฟเวอร์ เครื่องกำลังใช้งานเซิร์ฟเวอร์ Ubuntu และมันไม่ได้เรียกใช้ xserver เป็นค่าเริ่มต้นดังนั้นฉันจึงต้องตั้งค่า xserver ให้ทำงานเมื่อเริ่มต้น (ฉันเพิ่งติดตั้งแพ็คเกจ Ubuntu ของเดสก์ท็อป Ubuntu ฆ่ายุงด้วยค้อนขนาดใหญ่) จากนั้น ให้ตัวเองเข้าถึงหน้าจอ X โดยใช้คำสั่งเหล่านี้ในฐานะรูท: "export DISPLAY =: 0.0; xhost + local:" จากนั้นฉันก็สามารถ ssh เข้าไปในเครื่องเรียก "ส่งออก DISPLAY =: 0.0" จากนั้นเรียกใช้โปรแกรม OpenGL ของฉันตามปกติ ทุกคนที่นั่งอยู่ที่เครื่องระยะไกลจะเห็นหน้าต่างป็อปอัพและดูโปรแกรมของฉันทำงานอยู่ แต่เราไม่มีจอภาพเชื่อมต่อดังนั้นจึงไม่มีปัญหา

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

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

Virtual Framebuffers

Xvfb เป็นตัวเลือก แต่ไม่ได้ผลสำหรับฉันเพราะ OpenGL ไม่ได้รับประโยชน์จากการเร่งความเร็วฮาร์ดแวร์และไม่รองรับวัตถุ framebuffer ซึ่งจำเป็นสำหรับการใช้งานร่วมกันของ CUDA กับ OpenGL อย่างไรก็ตามนี่อาจเป็นตัวเลือกที่ใช้การได้ซึ่งการไฮแจ็กหน้าจอภายในเครื่องไม่เป็นที่ยอมรับหรือผู้ใช้ไม่สามารถรับสิทธิ์ xhost ได้

VirtualGL

จากเว็บไซต์ VirtualGL:

VirtualGL เป็นแพ็คเกจโอเพ่นซอร์สซึ่งให้ซอฟต์แวร์แสดงผลระยะไกลของ Unix หรือ Linux สามารถเรียกใช้แอปพลิเคชัน OpenGL ด้วยการเร่งความเร็วฮาร์ดแวร์ 3 มิติเต็มรูปแบบ

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


0

คุณสามารถเรียกใช้บัฟเฟอร์เฟรมเสมือน vfb- บนเครื่องมันเหมือนหุ่น X11 เราเคยเรียกใช้แอพที่ HAD เพื่อเปิด Xwindow ที่เราไม่เคยดูและเพิ่งติดตั้ง vfb และส่งออก $ DISPLAY ไปที่นั่น - หน้าจอเหมือนบน Cli HTH


2
ขอบคุณสำหรับทิป! ฉันเริ่มมองหา xvfb และดูเหมือนว่าการเรนเดอร์ไม่ได้ใช้ฮาร์ดแวร์กราฟิก แต่แทนที่จะแสดงในหน่วยความจำเสมือน ใครสามารถยืนยัน / ปฏิเสธสิ่งนี้ หากเป็นกรณีนี้ฉันคิดว่าโซลูชันนี้จะไม่ดีเพราะเรากำลังมองหาการใช้ประโยชน์จากพลังของกราฟิกการ์ดของเรา
redmoskito
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.