X の下に表示されていないウィンドウのスクリーンショットを作成しようとしています。
私の最初の試みは、xwd
またはimport
(ImageMagickから)を使用してウィンドウをキャプチャすることでした。残念ながら、ウィンドウが他のウィンドウの下にある場合、隠れた部分は黒くなります。さらに悪いことに、ウィンドウが現在のデスクトップにない場合、BadMatch
エラーが発生します。
次に考えたのは、この 1 つのアプリケーションのためだけに新しい X インスタンスを作成し、常に最上位にある Xnest を使用することでした。そして、私は他の問題に出くわします。Xnest は OpenGL をサポートしていません。
Google で検索すると、OpenGL をサポートしている [Xephyr][1] が見つかりました...ただし、ハードウェア アクセラレーションはサポートされていないため、CPU を消費するため、受け入れられません。
同じことが、CPU を使用して OpenGL をレンダリングする Xvfb にも当てはまります。以下は、 からの出力の一部ですglxinfo
。
OpenGL ベンダー文字列: Mesa Project OpenGL レンダラー文字列: ソフトウェア ラスタライザー OpenGL バージョン文字列: 2.1 Mesa 7.8.2 OpenGL シェーディング言語のバージョン文字列: 1.20
私が考えることができる唯一のことは、何らかの方法で Xlib を使用して、X サーバーにウィンドウを pixbuf にレンダリングさせることです。残念ながら、私は Xlib についてほとんど知識がありません。
私の質問は、X で OpenGL を使用するアプリケーションの非表示ウィンドウからスクリーンショットを取得するにはどうすればよいですか?
今のところ、[Python-Xlib][2] とPILを使用してスクリーンショットを作成することしかできません。また、Python または C を使用したその他のソリューションも受け入れられます。