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


11

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

我要执行此操作,因为我想自动打开一个应用程序并用不同的语言对其进行截图,并且要更改语言,我需要重新启动lightdm。因此,请在tty上运行,以便脚本继续运行...

Answers:


10

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

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

(需要x11-appsxwdimagemagickconvertjp2a)。


不完全相关,但很酷。
Yatharth Agarwal 2014年

1
xwd -root -display :0 | convert - jpg:- > screenshot.jpg
gregn3

2
现代ImageMagick版本通常无法xwd从幻数推断出格式,因此最好明确指定输入格式: xwd -root -display :0 | convert xwd:- jpg:- | jp2a - --colors
Bass

对我来说:xwd -name "$win_name" | convert xwd:- /tmp/"$win_name".png哪里win_name=$(xwininfo -tree -root | grep 'The Window Name Im Looking For' | awk -F\" '{print $2}')
-Avio,



5

尝试使用快门

DISPLAY=:0 shutter -f -e -n -o "$HOME/Pictures/screenshot.png"

导入将不起作用,因为未使用根窗口。组合“绕过”它(每个窗口都在其自己的缓冲区中呈现,然后多路复用到显示器上,而不是旧的方式,它们都在“根”窗口上呈现)。

另外,在截屏之前,您需要确保VTY处于活动状态。例如

#!/bin/bash  
X :1 &  
export DISPLAY=:1  
sleep 10 # give time for X to start  
gedit &  
sleep 10 # give time for app to do something  
chvt 8  # ensure the X display is active  
shutter -f -e -n -o "$HOME/Pictures/screenshot.png" # screenshot  
killall xorg # terminate X

不,仍然给黑屏:(
Yatharth Agarwal

执行此操作时您是否处于X会话中(在监视器上)。我只是尝试了,并且效果很好。您将需要登录,并使X会话处于活动的VTY中。
coteyr 2012年

我希望在tty中启动的脚本能够执行此操作。
Yatharth Agarwal

是的,但是在截屏之前您是否切换到X会话。X :0 & sleep 50 && sudo chvt 6 && program & sleep 5 && screenshot(注意完全是假脚本)。
coteyr 2012年

另外,还要确保要说的是您想要的VT0(或类似内容),而不是文本控制台的屏幕截图。因此,您从TTY运行脚本,尝试截屏X(VTY)。那是对的吗?
coteyr 2012年

0

坐在同一台计算机上,并从与X服务器正在运行的虚拟终端不同的虚拟终端上进行操作不起作用。

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

Q-108:我使用Linux虚拟终端(VT)在用户会话之间实现“快速用户切换”(例如Betty在Ctrl-Alt-F7上,Bobby在Ctrl-Alt-F8上,而Sid在Ctrl-Alt上-F1:他们使用这些击键在会话之间切换。主动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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.