在后台静默截取屏幕截图以供存档

在后台静默截取屏幕截图以供存档

在工作中,我经常尝试不同复杂程度的工具并开发使用和集成场景。

我使用 Ubuntu 18.04 LTS。

有时,如果事情变得非常复杂,我并不总是确定我是如何得到解决方案的,出于文档和知识共享的目的,我会花费额外的时间来更好地了解一种简洁明了的方式。较少的胡闹,截图等等。

然后我想,如果有一个屏幕捕捉工具,每 30 秒拍一张照片,那就太好了默默地在后台这样我就可以:

  • 轻松回顾我的步骤和陷阱
  • 如果我幸运的话,就直接使用此图像档案中的屏幕截图作为文档。

例如,我以为我会为 shutter 配置一个 cronjob,但当我正在使用它时,出现错误“您已经在运行 shutter 实例”。我现在将尝试使用 scrot。

还有其他更好的想法吗?

更新:对于 Cron 管理的执行,由于此工具无法解析小于一分钟的时间间隔,因此这里解决方案(该主题中评分较低的答案之一)每 30 秒一次。

* * * * * /bin/bash -l -c "/path/to/executable; sleep 30 ; /path/to/executable"

答案1

我刚刚开始学习Ubuntu。
我不知道这种方法是否合适。
我可以通过以下方式实现它。

我在文件夹 /usr/local/bin 中创建了一个名为 ScreenShot.sh 的脚本

#!/bin/bash

# NAME: ScreenShot.sh
# PATH: /usr/local/bin
# DESC: Take Screenshots at every specified intervals with "watch -n 10 ScreenShot.sh" Command
# DATE: Oct 12th 2018

sudo gnome-screenshot -d 0

sudo chmod a+x /usr/local/bin/ScreenShot.sh

当我启动系统并想每 10 秒启动一次屏幕截图时,

我运行这个命令

sudo watch -n 10 ScreenShot.sh

我已经使用 dconf 编辑器部分配置了我的默认文件夹和要保存的图像类型gnome-screenshot

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

通过 dconf 中的声音设置来停止声音

在此处输入图片描述

答案2

我也做了同样的事情。这是我写的脚本,名为screenlog-capture

#! /bin/bash
window_name() {
  xwininfo -id "$1" | \
    grep "^xwininfo: Window id" | \
    LC_CTYPE=C LC_COLLATE=C sed  's/^[^"]*"\(.*\)"$/\1/' | \
    sanitize-filename
}

window_class() {
  xprop -id "$1" | grep "^WM_CLASS(STRING)" | cut -d '"' -f 4
  # Or we could use _NET_WM_PID(CARDINAL) -> process name
}

if [ ! -d "$RAMTMP" ]
then
  echo "RAMTMP needs to be set."
  exit 1
fi
if [ ! -e /usr/bin/puzzle-diff ]
then
    echo 'Error: puzzle-diff not installed!'
    exit 1
fi

rootdir="$HOME/screenlog"
if [ ! -w "$rootdir" ]
then
  echo 'Error: screenlog dir not writable'
  exit 1
fi
if [[ $(qdbus org.cinnamon.ScreenSaver /org/cinnamon/ScreenSaver org.cinnamon.ScreenSaver.GetActive) == true ]]
then
  exit
fi
du=$(df -Plh "$rootdir" | sed -n -e '2s/.* \([0-9]\+\)% .*/\1/' -e '2p')
if [ "$du" -ge 98 ]
then
  exit
fi
win_id=$(xprop -root | grep "^_NET_ACTIVE_WINDOW(WINDOW)" | cut -d ' ' -f 5)
win_name=$(window_name "$win_id")
parent_id=$(xprop -id "$win_id" | grep "^WM_TRANSIENT_FOR(WINDOW)" | cut -d ' ' -f 5)
if [ "$parent_id" ]
then
  win_class=$(window_class "$parent_id")
else
  win_class=$(window_class "$win_id")
fi
case "$win_class" in
  # Firefox-bin is full-screen YouTube video (for example)
  Gq|Geeqie|GQview|Firefox-bin|Plugin-container|Gimp|mplayer2)
    exit
    ;;
esac
case "$win_name" in
  *'Internet Bank'*|*'YouTube'*|MPlayer|Netflix*|Prime\ Video*)
    exit
    ;;
esac

tmpfilename="$RAMTMP/screenlog-capture.png"
scrot -buq 0 "$tmpfilename"
if [ ! -s "$tmpfilename" ]
then
  exit
fi
if [ $(stat -c %s "$tmpfilename") -lt 500000 ]
then
  mogrify -depth 3 "$tmpfilename"
else
  mogrify -type Grayscale -depth 3 "$tmpfilename"
fi
latest="$rootdir/latest.png"
puzzle-diff -c -e -E 0.1 "$latest" "$tmpfilename" &>/dev/null
if [ $? -eq 10 ]
then
  # No relevant changes, don't keep screenshot
  rm "$tmpfilename"
else
  win_name="$(printf %.30s $win_class) - $(printf %.60s $win_name)"
  date=$(date '+%Y-%m/%Y-%m-%d')
  dirname="$rootdir/$date"
  mkdir -p "$dirname"
  filename="$dirname/$(date '+%H.%M.%S') $win_name.png"
  mv "$tmpfilename" "$filename"
  rm -f "$latest"
  ln -s "$filename" "$latest"
fi

一些有趣的特点:

  • 它用于scrot截取屏幕截图。
  • 它在文件名中包含当前窗口的名称,使查找更容易。
  • 如果屏幕保护程序正在运行,它就不会运行(这是 Cinnamon 特有的,其他桌面需要不同的命令来检查屏幕保护程序状态)。
  • 它过滤掉一些我不想截屏的应用程序,这个列表可以轻松扩展。
  • 如果磁盘使用率超过 98%,它会停止截屏。
  • puzzle-diff如果屏幕截图与前一张屏幕截图相同(具有一定的容忍度),则跳过保存屏幕截图。
  • 它从根本上降低了屏幕截图的颜色深度(或者甚至根据大小使其成为灰度)以节省磁盘空间。
  • 我使用 RAM 磁盘作为中间存储(在决定是否保留图像之前),但您也可以使用常规 /tmp 位置。

我使用另一个 shell 脚本screenlog来定期调用这个脚本:

#! /bin/bash
while true
do
  sleep 5
  screenlog-capture
done

答案3

我想出了

#! /usr/bin/env bash

sleep_period=30s

while true; do

scrot $HOME/Pictures/"$(date +%Y%m%d%H%M%S)".png

sleep ${sleep_period}
done

我已经~/bin将这个脚本保存在那里并continuous-scrot.sh使其可执行。要运行它,我打开一个终端窗口并输入脚本的名称,然后按Enter。我让这个终端窗口保持活动状态,并且每 30 秒就会在您的文件夹中捕获一次全屏截图~/Pictures。要停止,只需返回此终端窗口并按Ctrl+ C

答案4

我首先想到的是打开一个终端,并在一段时间内用它在睡眠状态下发出 scrot。像这样:

while sleep 30; do scrot <whatever>; done

对我来说,这其中有一个问题。如果你在 30 秒的间隔内做了一些重要的事情怎么办?你考虑过使用屏幕录像机吗?简易屏幕录像机在 Ubuntu 发行版上有一个。我记得的另一个名字是伊斯坦布尔

相关内容