นานมาแล้วที่ฉันถามคำถามนี้ดังนั้นฉันคิดว่าฉันจะพูดถึงวิธีการแก้ปัญหาที่เราใช้ในท้ายที่สุด
การไฮแจ็คหน้าจอ 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 มิติ