自动截取X中特定显示的屏幕截图

自动截取X中特定显示的屏幕截图

为了在运行 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. 自动的
  4. 按名称选择屏幕

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

这是我所知道的唯一方法。希望有一些开销更少的方法。

相关内容