Во время моей работы я часто испытываю инструменты другой сложности и разрабатываю сценарии интеграции и использование.
Я использую Ubuntu 18.04 LTS.
Иногда, если вещи являются действительно сложными, я не всегда уверен, как точно я добрался до решения, и для документации и целей обмена знаниями, я провожу дополнительное время, чтобы стать больше знающим об аккуратном и очевидном способе с менее бездельничанием, сделать снимки экрана и так далее.
Затем я думал, что будет замечательно иметь экранный инструмент получения, чтобы сделать снимок, говорят каждые 30 секунд тихо в фоне так, чтобы я мог:
Я думал, что, например, настрою cronjob для затвора, но в то время как я уже использую его, существует ошибка, "у Вас уже есть выполнение экземпляра затвора". Я попробую теперь scrot.
Какие-либо лучшие идеи?
ОБНОВЛЕНИЕ: Для управляемого выполнения Крона, поскольку этот инструмент не может разрешить временные интервалы меньше чем одна минута, здесь решение (на менее расчетных ответов в потоке) в течение каждых 30 секунд.
* * * * * /bin/bash -l -c "/path/to/executable; sleep 30 ; /path/to/executable"
Я только что начал изучать Ubuntu.
Я не знаю, что этот метод правилен или нет.
Я Мог достигнуть его в ниже пути.
Я создал сценарий как названный ScreenShot.sh в папке,/usr/local/bin
#!/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
когда я запускаю систему и требуемый для запуска снимка экрана в каждом 10secs,
я выполняю эту команду
sudo watch -n 10 ScreenShot.sh
я настроил свою папку по умолчанию, тип изображения, который будет сохранен с dconf редактором в gnome-screenshot
раздел.
В звуки заходят dconf настройки под звуковым разделом
Я делаю то же самое. Это - сценарий, который я записал, названный 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
сделать снимки экрана.puzzle-diff
пропускать сохранение снимка экрана, если это совпало бы с предыдущим (с некоторым допуском).Я использую другой сценарий оболочки, screenlog
, называть этого периодически:
#! /bin/bash
while true
do
sleep 5
screenlog-capture
done
Я придумал
#! /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.
Так как у меня есть много дистрибутивов Linux, где мне нужны снимки экрана, и они используют различные менеджеры окон, я использую, вероятно, самую старую из утилит снимка экрана xwd. Это - часть распределения XServer, таким образом, я могу быть уверен, что это установлено каждый раз. Я не уверен, распределяется ли это и если это работает с Уэйлендом. Команда
xwd -display :0.0 -root -out screenshot.xwd
должен сделать снимок экрана корневого окна дисплея:0.0. Выходной файл является специальным отформатированным файлом дампа. ImageMagick может преобразовать тот файл в некоторый более распространенный формат. Для получения дополнительной информации: https://linux.die.net/man/1/xwd.
Можно найти много идей, как выполнить такую утилиту на равных интервалах в других ответах. Для создания вывода в другой файл каждым разом, Вы могли сделать:
xwd -display :0.0 -root -out "$(date).xwd"
Я использовал бы recordmydesktop
, возможно с низким уровнем кадр/с и никаким аудио для сокращения зарегистрированного объема данных.
В то время как это не точно снимки экрана, но полное видео, преимущество состоит в том, что Вы получаете хорошее сжатие как, только различия между последовательными изображениями должны быть сохранены, у Вас есть опция также записи Вашего микрофона, таким образом, можно сделать заметки путем разговора, и можно дополнительно добавить, запускаются/кнопки остановки к системной области уведомлений.
Первая вещь, о которой я могу думать, состоит в том, чтобы открыть терминал и использовать его для издания scrot в некоторое время со сном. Что-то вроде этого:
while sleep 30; do scrot <whatever>; done
Мне существует выгода в этом. Что, если Вы делаете что-то значительным между 30 secs интервалами? Вы рассмотрели устройство записи экрана (SimpleScreenRecorder является одним доступным на распределении человечности. другим именем, которое я вспоминаю, является Стамбул),
Как я решил это для меня:
Во-первых, установите следующий cronjob:
* * * * * DISPLAY=:0 /usr/bin/sudo -i -u <USER> bash -c '/home/<USER>/bin/create-screenshot.sh; sleep 30; /home/<USER>/bin/create-screenshot.sh;'
Заметьте DISPLAY=:0
оператор, чтобы позволить крону получать доступ к X-серверу.
Затем создайте ~/bin/create-screenshot.sh
со следующим содержанием:
#!/bin/bash
user="<USER>"
folder="$(date +%Y%m%d)"
y="$(date +%Y)"
m="$(date +%m)"
mkdir -p "/home/$user/screenshots/$y/$m/$folder"
file="$(date +%Y%m%d%H%M%S)".png
path="/home/$user/screenshots/$y/$m/$folder/$file"
scrot $path