Прошло много времени с тех пор, как я задал этот вопрос, поэтому я решил упомянуть решение, которое мы в конечном итоге использовали.
Угон локального экрана X
В конце я просто запустил удаленные программы opengl на локальном экране X сервера. На этой машине работала версия сервера Ubuntu, и на нем не было установленного по умолчанию сервера xserver, поэтому мне пришлось настроить сервер x для запуска при запуске (я только что установил пакет Ubuntu-desktop для Ubuntu, убивая комара кувалдой), а затем дал мне доступ к экрану X, используя эти команды как root: "export DISPLAY =: 0.0; xhost + local:". Затем я могу зайти в машину по ssh, вызвать «export DISPLAY =: 0.0» и запустить мои программы opengl в обычном режиме. Любой, кто сидит за удаленной машиной, увидит всплывающее окно и увидит, как работает моя программа, но у нас нет подключенного монитора, так что это не проблема.
Важно использовать некоторую форму внеэкранного рендеринга, потому что чтение пикселей непосредственно из экранного цветового буфера может привести к получению ненужных данных, если окно будет скрыто другим окном. Поскольку вы не можете видеть экран X, трудно понять, произошло ли это. Внеэкранный рендеринг (например, объекты Framebuffer (fbo) или pbuffers) не имеют этой проблемы.
Взлом локального Xscreen сервера не является идеальным решением, поэтому я нашел несколько альтернативных вариантов:
Виртуальные кадровые буферы
Xvfb - это вариант, но он не работал для меня, потому что OpenGL не извлекал выгоду из аппаратного ускорения, а объекты кадрового буфера не поддерживались, что необходимо для совместимости CUDA с OpenGL. Тем не менее, это может быть работоспособным вариантом, когда захват локального экрана недопустим или когда пользователь не может получить привилегии xhost.
VirtualGL
С сайта VirtualGL:
VirtualGL - это пакет с открытым исходным кодом, который дает любому программному обеспечению для удаленного отображения Unix или Linux возможность запуска приложений OpenGL с полным аппаратным ускорением 3D.
Это именно то, что я хочу, и это выглядит очень многообещающе, но у меня не было времени, чтобы разобраться с новой библиотечной зависимостью, поэтому я не проверял ее. Я предполагаю, что это идеальное решение, когда я смогу его скомпилировать, установить и настроить. Это то, что VirtualBox и некоторые серверы VNC используют для поддержки аппаратного ускорения 3D.