Народ, возникла следующая проблема:
у меня есть необходимость запускать X приложения на машинах, на которых нет запущенного X сервера. Т.е. эта та пресловутая сетевая прозрачность X протокола. Это часть работает хорошо и полностью устраивает, но иногда этим приложением нужно отрисовать что-то используя openGL. Это не игры, а инженерная графика, и в принципе производительность устраивала, даже учитывая что все это отрисовывалось программно, без 3д ускорения.
Т.е. схема такая:
узел, где запускается приложение (node) ----> сервер с Xorg (server)
и сервер и узел - это линукс машины x86_64. на сервере вообще нет видео карты, Xserver там использует драйвер xorgxrdp, далее картинка уходит в xrdp и клиенту на винде по rdp протоколу.
эта схема работала хорошо до версии (включая) Xorg 1.19.3, т.е. X клиенты могли отображать 3д через openGL на X сервере используя протокол GLX. Кроме того эта схема работает, если в качестве сервера используем windows машину с запущенным X сервером например стареньким Xming - причем в этом случае мы можем даже ускорять openGL через драйвер wgl и видеокарту хоста.
но потом система на сервере обновилась (драму можно прочитать тут CentOS 7 - недоступность промежуточных подрелизов) и отвалилась openGL графика.
Это выражается в том, что любое приложение которое хочет вывести графику через openGL - выводит в это место черный квадрат.
Эта проблема присутствует на следующих системах которые я протестировал: CentOS 7.6, fedora - 27,28,29, ubuntu 18.4,18.10, debian 9, на всех этих системах Xorg новее чем 1.19.3.
Cистемы на которых все работает: CentOS до 7.4 включительно (7.5 не проверял), openSuse 42.3 и на wnindows/Xming и другие x серверы для виндовс.
Как эту проблему смоделировать, без дополнительных ПК или виртуальных машин:
- убедиться, что IndirectGLX разрешен, в последних версиях Xorg его по умолчанию выключили. Т.е. если glxinfo -i выводит ошибку - то IGLX выключен. Что-бы включить - либо в командную строку Xorg добавляем +iglx, либо бросаем drop-in файл в /etc/X11/xorg.con.d/
с произвольным именем, например 10-iglx.conf с содержанием:
Section "ServerFlags" Option "IndirectGLX" "on" EndSection
- запускаем любое приложение использующее openGL, например glx gears, следующим образом:
в итоге видим черный квадрат на проблемных системах.
$ LIBGL_ALWAYS_INDIRECT=1 LIBGL_ALWAYS_SOFTWARE=1 glxgears
естественно речь не идет о системах с пропиетарным драйвером nVidia, там libGL другой и вся система по другому работает
так же на проблемных системах команда
$ xdpyinfo
ну и glxinfo -i на проблемных системах выводит пустые строки на против OpenGL, ниже часть вывода:
$ glxinfo - i
<...>
OpenGL vendor string:
OpenGL renderer string:
OpenGL version string:
OpenGL extentions:
[тут всего 4 расширения]
<...>
Соответственно вопрос - знает ли кто как это поправить? Куда писать про проблему - в багтрекер Xorg, mesa, coentos?