Я пытаюсь сделать снимок экрана невидимого окна под X.
Моя первая попытка заключалась в том, чтобы захватить окно с помощью xwd
или import
(из ImageMagick). К сожалению, когда окно находится под некоторыми другими окнами, скрытые части становятся черными. Что еще хуже, когда окно не на текущем рабочем столе, я получаю BadMatch
ошибку.
Следующей мыслью было использовать Xnest, который создаст новый экземпляр X только для этого приложения, и он всегда будет наверху. И натыкаюсь на другую проблему. Xnest не поддерживает OpenGL.
Немного поискав в Google, я нахожу [Xephyr] [1], который поддерживает OpenGL ... но без аппаратного ускорения, поэтому он непригоден, так как убивает мой процессор.
То же самое и с Xvfb, который также использует ЦП для рендеринга 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.