Captura de tela automática da exibição específica em X

2

Para criar um lapso de tempo em um sistema executando o X com duas telas (na verdade, é uma "tela" em dois "displays"), como faço para tirar uma foto de uma das telas?

xrandr output é (abreviado):

Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 16384 x 16384
DFP1 disconnected (normal left inverted right x axis y axis)
DFP2 disconnected (normal left inverted right x axis y axis)
DFP3 disconnected (normal left inverted right x axis y axis)
DFP4 disconnected (normal left inverted right x axis y axis)
DFP5 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 598mm x 336mm
   1920x1080     60.00*+  50.00    59.94    50.00    60.00    59.94  
   [...]
DFP6 disconnected (normal left inverted right x axis y axis)
DFP7 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 598mm x 336mm
   1920x1080     60.00*+  50.00    59.94    50.00    60.00    59.94  
   [...]
CRT1 disconnected (normal left inverted right x axis y axis)

Requisitos:

  1. Sobrecarga mínima
  2. Ambiente de desktop agnóstico
  3. Automático
  4. Tela selecionada por nome

1, 2 e 3 significa que a ferramenta seria idealmente executada na linha de comando.

    
por qubodup 07.12.2015 / 16:12

1 resposta

3

O import do ImageMagick pode tirar uma captura de tela da raiz do Xorg automaticamente e com -crop somente a parte desejada será usada. xrandr fornece o parâmetro para crop .

Para minimizar a sobrecarga, você deve construir o comando import uma vez em vez de consultar usando o nome de exibição sempre que fizer uma captura de tela:

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

A explicação do mapfile e do loop pode ser encontrada em esta questão .

Isso lhe dará comandos como os seguintes:

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"

que agora você pode usar em um loop while para o timelapse (pare com ctrl+c ).

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

Este é o único método que conheço. Espero que existam formas com menos sobrecarga.

    
por 07.12.2015 / 16:12