2

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

0