为了在运行 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 意味着该工具最好在命令行中运行。
答案1
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
映射文件和 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"
您现在可以在 while 循环中使用它来进行游戏中时光倒流(以 停止ctrl+c
)。
while [ 1 ]; do
import ...
sleep 1 # for 1 second delay between screenshots
done
这是我所知道的唯一方法。希望有一些开销更少的方法。