X11 пересылает приложение OpenGL с компьютера с картой NVIDIA на компьютер с картой AMD

15

Я заинтересован в пересылке сеанса X11 через SSH, чтобы запустить удаленный процесс, использующий OpenGL (в частности, gazebo для всех, кто знаком).

Проблема, с которой я, похоже, сталкиваюсь, заключается в том, что беседка падает из-за несоответствия видеокарт; он не может найти расширения "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 не строит агностически с разветвленными путями кода для различного оборудования; как бы ваша система ни выглядела при сборке, это то, что вы получаете.

Удаленный компьютер работает под управлением Ubuntu, а мой локальный компьютер - Mac под управлением 10.8.2; Я уже знаю, что у меня правильно настроена переадресация x11 для обычного использования, так как я могу заставить вещи xclock открываться в XQuartz просто отлично. Решение (если оно существует) также предпочтительно будет работать для других ОС, включая Windows поверх WinSCP.

Даг Стивен
источник

Ответы:

9

Несколько заметок из статьи GLX Wikipedia :

GLX [is] Расширение протокола X, которое позволяет клиенту (приложение OpenGL) отправлять команды 3D-рендеринга на X-сервер (программное обеспечение, отвечающее за отображение). Программное обеспечение клиента и сервера может работать на разных компьютерах.

и

Если клиент и сервер работают на одном компьютере и доступна ускоренная 3D-видеокарта с использованием подходящего драйвера, первые два компонента могут быть обойдены DRI. В этом случае клиентскому приложению будет разрешен прямой доступ к видеооборудованию через несколько уровней API.

Я считаю, что первая точка отвечает на ваш вопрос о том, возможно ли это или нет: это, безусловно, должно быть возможно. Второй может дать объяснение того, почему ваша клиентская программа настаивает на использовании функций своего локального X-сервера (драйвер NV GLX) - возможно, она думает, что localhost:10.0это тот же компьютер, и поэтому пыталась установить соединение.

Вещи, чтобы попробовать:

  1. Вместо того gazebo, чтобы попробовать glxdemo.
  2. Если возможно, подключите два компьютера к одной сети и отключите ssh.
  3. Большой пистолет: straceваш gazeboвызов и выясните, почему он загружается nv-glx

Удачи!

ckhan
источник
Компьютеры уже находятся в одной сети, но мы хотели бы в какой-то момент перенести все наши машины-беседки в серверный шкаф, но при этом нам по-прежнему доступны визуальные эффекты программного обеспечения, поэтому я обращаю внимание на туннелирование SSH. Если вы не говорите, что наличие их в одной сети допускает другую конфигурацию, которая делает SSH ненужным (я предполагаю, что настраивал некоторые сумасшедшие настройки xhost / client, я мало что знаю о X11).
Даг Стивен
Нет необходимости в ssh - если это все ваши частные сети доверенных систем, попробуйте xhost +на локальном компьютере и установите для вашего DISPLAY на удаленной системе значение «ip-or-name-of-local: 0`»
ckhan
1
Мне не удалось добраться gazeboдо работы, но я отмечаю это как принятый ответ, потому что ваши предложения были технически правильными. Я могу туннелировать, glxdemoиспользуя все ваши предложения (ssh и xserver / xclient по сети), но само Gazebo, похоже, просто не создает пути к ветвящему коду и предполагает, что оно не будет работать в этой странной конфигурации. Благодарность!.
Даг Стивен
Существует gazebo web, и это действительно удивительно, вы можете запустить gazebo server на удаленной машине (даже WAN), проложить туннель с помощью ssh и открыть свой браузер, чтобы увидеть gazebo там. Лучшее решение когда-либо.
Мехди