qub*_*dup 3 xorg screenshot multi-monitor
要在运行 X 且带有两个屏幕的系统上创建延时(实际上它是两个“显示器”上的一个“屏幕”),我该如何截取其中一个屏幕的屏幕截图?
xrandr 输出是(缩写):
屏幕 0:最小 320 x 200,当前 3840 x 1080,最大 16384 x 16384 DFP1 断开连接(正常左转右 x 轴 y 轴) DFP2 断开连接(正常左转右 x 轴 y 轴) DFP3 断开连接(正常左转右 x 轴 y 轴) DFP4 断开连接(正常左转右 x 轴 y 轴) DFP5 连接 1920x1080+0+0(正常左倒右 x 轴 y 轴) 598mm x 336mm 1920x1080 60.00*+ 50.00 59.94 50.00 60.00 59.94 [...] DFP6 断开连接(正常左转右 x 轴 y 轴) DFP7连接1920x1080+1920+0(正常左倒右x轴y轴)598mm x 336mm 1920x1080 60.00*+ 50.00 59.94 50.00 60.00 59.94 [...] CRT1断线(正常左倒右x轴y轴)
要求:
1、2 和 3 表示该工具最好在命令行中运行。
ImageMagickimport可以自动截取 Xorg 的根目录,并且-crop只使用需要的部分。xrandr为 提供参数crop。
为了最大限度地减少开销,您应该构造import命令一次,而不是每次截屏时都使用显示名称进行查询:
mapfile -t displays < <(xrandr | grep ' connected')
get_date='`date +"%Y%m%d-%H%M%S"`'
for (( i=0; i<${#displays[@]}; i++)); do
name=`echo ${displays[i]} | cut -d " " -f 1`
crop=`echo ${displays[i]} | cut -d " " -f 3`
echo import -silent -window root -crop ${crop} \"${name}-${get_date}.png\"
done
Run Code Online (Sandbox Code Playgroud)
mapfile 和 for 循环的说明可以在这个问题中找到。
这将为您提供如下命令:
import -silent -window root -crop 1920x1080+0+0 "DFP5-`date +"%Y%m%d-%H%M%S"`.png"
import -silent -window root -crop 1920x1080+1920+0 "DFP7-`date +"%Y%m%d-%H%M%S"`.png"
Run Code Online (Sandbox Code Playgroud)
您现在可以在 while 循环中使用它来进行游戏中时光倒流(以 停止ctrl+c)。
while [ 1 ]; do
import ...
sleep 1 # for 1 second delay between screenshots
done
Run Code Online (Sandbox Code Playgroud)
这是我知道的唯一方法。希望有一些方法可以减少开销。