Я пытаюсь сделать скриншот невидимого окна под X.
Моей первой попыткой было захватить окно с помощью xwd
или import
(из ImageMagick).
К сожалению, когда окно находится под некоторыми другими окнами, скрытые части черные.
Еще хуже то, что когда окно не на текущем рабочем столе, я получаю ошибку BadMatch
.
Следующей мыслью было использование Xnest, который создал бы новый экземпляр X только для этого одного приложения, и он всегда был бы на вершине. И я сталкиваюсь с другой проблемой. Xnest не поддерживает OpenGL.
Некоторый поиск в Google, и я нахожу [Xephyr] [1], который поддерживает OpenGL ... но не с аппаратным ускорением, так что это не приемлемо, так как убивает мой процессор.
То же самое касается Xvfb, который также использует CPU для рендеринга OpenGL. Ниже приведена часть вывода из glxinfo
:
OpenGL vendor string: Mesa Project OpenGL renderer string: Software Rasterizer OpenGL version string: 2.1 Mesa 7.8.2 OpenGL shading language version string: 1.20
Единственное, что я могу придумать, это каким-то образом использовать Xlib, чтобы заставить мой X-сервер визуализировать окно в pixbuf. К сожалению, я почти ничего не знаю о Xlib.
Итак, мой вопрос, как я могу получить скриншот из невидимого окна приложения, которое использует OpenGL под X?
На данный момент я могу сделать только скриншот, используя [Python-Xlib] [2] и PIL. Также приемлемо любое другое решение, использующее Python или C.