Я пытаюсь сделать скриншот невидимого окна под 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.