如何从文本终端(例如 tty1)截取基于 X11 的 GUI 的屏幕截图?

如何从文本终端(例如 tty1)截取基于 X11 的 GUI 的屏幕截图?

我尝试使用DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png"import是 ImageMagick 套件的一部分),但只显示黑屏。

我想这样做是因为我想自动打开一个应用程序并用不同的语言截取它的屏幕截图,而要更改语言,我需要重新启动 lig​​htdm。因此,在 tty 上运行以便您的脚本继续运行......

答案1

除了现有的答案之外,要在终端中以 ASCII 格式显示屏幕截图:

xwd -root -display :0 | convert - jpg:- | jp2a - --colors

x11-apps要求xwdimagemagickconvertjp2a

答案2

以下是使用 的解决方案xwd,它几乎在所有的 Xorg 安装中都可用:

 xwd -root -out screenshot.xwd

screenshot.xwd文件可以用 GIMP 打开:

有关详细信息,请参阅http://www.x.org/wiki/UserDocumentation/GettingStarted/

答案3

以下是对我有用的方法。

chvt 7
DISPLAY=:0 import -window root "$HOME/Pictures/screenshot.png
chvt 1

答案4

坐在同一台计算机上并从与 X 服务器正在运行的不同虚拟终端执行此操作是行不通的。

那里解释道:http://www.karlrunge.com/x11vnc/faq.html#faq-linuxvc。 引用:

问:108:我使用 Linux 虚拟终端 (VT) 来实现用户会话之间的“快速用户切换”(例如,Betty 使用 Ctrl-Alt-F7,Bobby 使用 Ctrl-Alt-F8,而 Sid 使用 Ctrl-Alt-F1:他们使用这些按键在会话之间切换。)为什么连接到 x11vnc 的 VNC 查看器中的视图要么完全是黑色的,要么没有更新,要么像素混乱,除非 x11vnc 所连接的 X 会话处于活动 VT 中?

这似乎与应用程序(在本例中为 X 服务器进程)不在活动 VT(有时称为虚拟控制台的 VC)上时必须如何“正常播放”有关。也就是说,除非它们具有活动 VT,否则它们不应从键盘或鼠标读取数据或管理视频显示。鉴于 XGetImage() 调用似乎最终必须从视频硬件本身检索帧缓冲区数据,因此除非 X 会话对 VT 具有活动控制权,否则 x11vnc 的轮询将无法工作是有道理的。

似乎没有简单的方法可以解决这个问题。即使 xwd(1) 在这种情况下也不起作用(试试看)。需要在较低级别上做一些事情,比如在 XFree86/Xorg X 服务器中。此外,使用影子帧缓冲区(视频帧缓冲区的副本保存在主内存中)似乎无法解决问题(上次检查时间为 2007 年)。

如果没有人坐在工作站,而您只是想远程将 VT 切换到与您的 X 会话关联的 VT(以便 x11vnc 可以正确轮询它),则可以使用 chvt(1) 命令,例如“chvt 7”表示 VT #7。

相关内容