Xorg

自動截取 X 中特定顯示的螢幕截圖

  • September 12, 2017

為了在執行 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 表示該工具理想地在命令行中執行。

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

可以在這個問題中找到 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"

您現在可以在 while 循環中使用它來進行遊戲中時光倒流(以 停止ctrl+c)。

while [ 1 ]; do
 import ...
 sleep 1 # for 1 second delay between screenshots
done

這是我知道的唯一方法。希望有更少成本的方法。

引用自:https://unix.stackexchange.com/questions/247935