Xで特定のディスプレイのスクリーンショットを自動的に撮影します。

Xで特定のディスプレイのスクリーンショットを自動的に撮影します。

2つの画面(実際には2つの「モニター」に1つの「画面」)を持つ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

ImageMagickはimportXorgルートディレクトリのスクリーンショットを自動的に撮影し、-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

これが私が知っている唯一の方法です。オーバーヘッドが少ない方法があることを願っています。

おすすめ記事