スクリーンショットを撮るために Xorg の呼び出しを検出するにはどうすればよいですか?

スクリーンショットを撮るために Xorg の呼び出しを検出するにはどうすればよいですか?

X はデスクトップ全体のスクリーンショットを撮ることができます。サーバー レベルで呼び出しにパッチを当てるのではなく、ebpf や sysdig などを使用して、これらの呼び出しが行われるときにそれを検出したいと思います。どうすればこれができるでしょうか。また、これも実行できるプログラムはありますか。

答え1

[回答というよりはコメントですが、コメントとしては長すぎます]

それを実行するプログラムは、サーバーレベルでX11呼び出しにフックする必要があります(次のようなメカニズムを介して)。XACE、〜ebpf や sysdig がカーネル内の呼び出しで行っているのと同じです。これを実行する既製のものを私は知りませんが、その件についてあまり調査しなかったのです ;-)

X11クライアントによって実行されたリクエストを監視するだけの場合は、RECORD拡張子(xtrussまたは、クライアントにX11プロキシを強制的に経由させるxscopeルート ウィンドウをソースとして使用する、、などの要求 (またはそのクライアントが所有していないウィンドウ/ピクセルマップ)CopyAreaを探します。GetImage

一般的に、X11 アプリケーションが「スクリーンショット」を撮れるかどうかにこだわるのは、まったく意味がありません。X11 サーバーにアクセスできるプログラムは、もっと多くのことができるため、信頼できない場合は、サーバーの近くに置いてはいけません。また、同じユーザーで実行されているローカル プロセスは、互いにアクセスしてptrace(2)、互いのメモリを直接読み取ることができます。

答え2

はい、X11 アプリがスクリーンショットを撮っているかどうかを考えるよりも、他のことに集中したいのですが、とりあえずこの問題を解決してみようと思いました。

これらの x11 フックの書き方に関する資料は Web 上にはないようですが、xtruss について調べてみます。

現在、xtruss を実行しています。xwininfo -root -tree から取得した X ID を使用して、そのリソースを監視するように xtruss を設定しています。ただし、xwd -i -out ファイルを実行しても、xtruss は何も報告しません。テスト方法が間違っているのでしょうか?

関連情報