X11 การส่งต่อแอปพลิเคชัน OpenGL จากเครื่องที่ใช้การ์ด NVIDIA ไปยังเครื่องที่ใช้การ์ด AMD


15

ฉันสนใจที่จะส่งต่อเซสชัน X11 ผ่าน SSH เพื่อเริ่มกระบวนการระยะไกลที่ใช้ OpenGL (โดยเฉพาะศาลาสำหรับคนที่คุ้นเคย)

ปัญหาที่ฉันดูเหมือนว่าจะพบคือศาลานั้นล่มเนื่องจากการไม่ตรงกันในกราฟิกการ์ด; ไม่พบส่วนขยาย "NV-GLX" ผลลัพธ์ข้อผิดพลาดที่แน่นอน:

Xlib:  extension "NV-GLX" missing on display "localhost:10.0".
Xlib:  extension "NV-GLX" missing on display "localhost:10.0".
X Error of failed request:  GLXUnsupportedPrivateRequest
  Major opcode of failed request:  149 (GLX)
  Minor opcode of failed request:  16 (X_GLXVendorPrivate)
  Serial number of failed request:  24
  Current serial number in output stream:  25

เครื่องระยะไกลทำงานด้วยการ์ด NVIDIA และเครื่องท้องถิ่นของฉันใช้การ์ด AMD

ฉันได้ทดสอบการส่งต่อของศาลา X11 ระหว่างสองเครื่องด้วยการ์ด NVIDIA มันใช้งานได้ดี

ใกล้ที่สุดเท่าที่ฉันจะบอกได้ดูเหมือนว่าหนึ่งในสามสิ่งที่เกิดขึ้น:

  1. ฉันทำอะไรผิด
  2. สิ่งที่ฉันอยากทำเป็นไปไม่ได้
  3. Gazebo ไม่ได้สร้างในลักษณะที่ไม่เชื่อเรื่องพระเจ้าด้วยการแยก codepaths สำหรับฮาร์ดแวร์ที่แตกต่างกัน สิ่งที่ระบบของคุณดูเหมือนเมื่อสร้างเป็นสิ่งที่คุณได้รับ

เครื่องระยะไกลกำลังใช้งาน Ubuntu และเครื่องในพื้นที่ของฉันคือ Mac ที่ใช้งาน 10.8.2 ฉันรู้แล้วว่าฉันมีการตั้งค่าการส่งต่อ x11 อย่างถูกต้องสำหรับการใช้งานปกติเพราะฉันสามารถรับสิ่งต่าง ๆ เช่น xclock เพื่อเปิดขึ้นใน XQuartz ได้ดี วิธีแก้ปัญหา (ถ้ามี) จะทำงานได้ดีกว่าสำหรับระบบปฏิบัติการอื่นรวมถึง Windows บน WinSCP

คำตอบ:


9

หมายเหตุเล็กน้อยจากบทความ GLX Wikipedia :

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

และ

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

ฉันเชื่อว่าจุดกำปั้นตอบคำถามของคุณเกี่ยวกับว่าเป็นไปได้หรือไม่: มันควรจะเป็นไปได้อย่างแน่นอน ข้อที่สองอาจให้คำอธิบายว่าทำไมโปรแกรมไคลเอนต์ของคุณยืนยันในการใช้คุณสมบัติของเซิร์ฟเวอร์ X ภายในเครื่อง (ไดรเวอร์ NV GLX) - บางทีมันคิดว่าlocalhost:10.0เป็นคอมพิวเตอร์เครื่องเดียวกันและพยายามเชื่อมต่อทิศทาง

สิ่งที่ต้องลอง:

  1. แทนที่จะพยายามgazeboglxdemo
  2. ถ้าเป็นไปได้ให้นำคอมพิวเตอร์ทั้งสองเครื่องในเครือข่ายเดียวกันและนำ ssh ออกจากภาพ
  3. ปืนใหญ่: การร้องขอstraceของคุณgazeboและหาสาเหตุว่าทำไมจึงโหลด nv-glx

โชคดี!


คอมพิวเตอร์อยู่ในเครือข่ายเดียวกันอยู่แล้ว แต่เราต้องการย้ายเครื่องศาลาทั้งหมดของเราไปยังตู้เซิร์ฟเวอร์ในบางจุด แต่ยังคงมีภาพซอฟต์แวร์ให้เราซึ่งเป็นสาเหตุที่ฉันกำลังมองหาช่อง SSH นอกจากว่าคุณกำลังบอกว่าการมีพวกมันอยู่ในเครือข่ายเดียวกันนั้นทำให้การกำหนดค่าที่แตกต่างทำให้ SSH ไม่จำเป็น (ฉันเดาว่าเซ็ตอัพ xhost / client ที่บ้าคลั่งฉันไม่รู้เรื่อง X11)
Doug Stephen

ไม่จำเป็นต้องใช้ ssh - หากนี่คือเครือข่ายส่วนตัวทั้งหมดของคุณในระบบที่เชื่อถือได้ลองxhost +ใช้เครื่องของคุณและตั้งค่า DISPLAY ของคุณในระบบระยะไกลเป็น 'ip หรือชื่อของท้องถิ่น:
0`

1
ฉันไม่สามารถgazeboทำงานได้ แต่ฉันทำเครื่องหมายว่านี่เป็นคำตอบที่ยอมรับได้เพราะคำแนะนำของคุณถูกต้องทางเทคนิค ฉันสามารถขุดอุโมงค์glxdemoโดยใช้คำแนะนำทั้งหมดที่คุณทำ (ssh และ xserver / xclient ผ่านเครือข่าย) แต่ Gazebo เองก็ดูเหมือนว่าจะไม่สร้างเส้นทางรหัสการแยกสาขาและสันนิษฐานว่ามันไม่ได้ทำงานในการกำหนดค่าแปลก ๆ นี้ ขอบคุณ !.
Doug Stephen

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