在Linux上进行屏幕截图的最快方法

这个问题与此相似

最快的屏幕捕获方法

但对于Linux / X11。

更具体地说,我需要一种方法来捕捉在X11显示屏上运行的一个窗口的像素图像(窗口中alt-print屏幕的程序化等价物)。

注释和要求:

1)即使一个新的窗口被放置在被捕捉的窗口的顶部,像素图像仍然应该指向原始的应用程序窗口而没有任何遮挡

2)用户不需要看到应用程序窗口,我只需将像素缓冲区/图像存储为视频目的

我探索的其他选择是:

1)xvfb - 它可以工作,但是它确实能够渲染CPU,这对于一个好的GPU来说是缓慢而浪费的

2)x11在许多lxc内部 - 理论上可以工作,但是对于设置来说很复杂,我不确定它会在很多窗口被捕获时很好地扩展

建议和想法是受欢迎的


这可以在具有硬件加速的服务器中使用VirtualGL。 基本上只需配置服务器,然后在同一台机器上或同一网络中的一台机器上运行

export DISPLAY=<your xvfb display>
vglrun <your_app>

这将具有以下优点:

1)你的应用程序将使用virtualGL进行渲染,这将使用硬件

2)VirtualGL将在Xfvb显示内显示你的3D上下文,它只会渲染CPU中的2D小部件

3)配置Xvfb渲染到帧缓冲区

4)利润!


这对于纯X11是不可能的。

你可以得到你想要的合成,但只能在支持它的服务器上(大多数现代的服务器)。 这实际上与窗口管理员无关。 WM只是另一个客户,虽然有一些特殊的能力,但这些与合成无关。 您可以使用相同的合成API。

man xcomposite应该让你开始。


您可以使用xwd(1)转储X11窗口(和xwud(1)以显示它)。 ImageMagick和Netpbm工具知道如何处理XWD格式。 但这些并不是特别快。 而且他们不会透露窗口的隐藏部分。

链接地址: http://www.djcxy.com/p/81005.html

上一篇: Fastest method for screen capturing on Linux

下一篇: Writing an AI: screen capture and input