如何对另一个 Xorg 显示进行屏幕截图?

如何对另一个 Xorg 显示进行屏幕截图?

我从当前的 X 会话开始了另一个 X 会话,如下所示:

xinit xterm -- :128

X 会话在 display 中启动:128xterm在其中运行,一切都很好。

不过,我切换回屏幕:0(默认),并尝试screencap新的显示:

$ xwd -root -screen -out screencap.xwd -display :128

生成的文件只是一个黑色的大矩形。我也尝试过使用 imagemagick import,但无济于事。出了什么问题?

答案1

好像scrot能够做到这一点,经过测试:

xinit thunar -- :128
DISPLAY=:128 scrot

给了我正确的屏幕截图。

(但不幸的是,scrot已经有一段时间没有维护了)

答案2

事实证明,一旦 tty 失去焦点,x 就会显示空白屏幕并停止重绘,目的是节省 CPU 时间和 RAM。看起来没有办法禁用此功能。

Xvfb,“X Virtual Framebuffer”是一种特殊的实现,它不将此行为作为其设计和目的的一部分。

我没有启动新的“正常”xsession,而是在虚拟帧缓冲区中运行客户端软件:

xvfb-run <client software> --server-args="-screen 0 [width]x[height]x[bitdepth]"

并截屏如下:

xwd -root -d :99 # (the default for xvfb)

请注意,由于该显示未与终端绑定,因此用户可能很难看到该显示。

相关内容