Main menu

Возможность делать скриншоты в автоматическом и фоновом режиме в WIndows существует давно, в виде платного и бесплатного софта, но мне было необходимо делать тоже самое на рабочих станциях, работающих под Ubuntu. Подойдет любая версия, имеющая поддержку в виде репозиториев, на момент написания статьи - это 12.04, 14.04, 16.04 и т.д.. Задача не просто в тупую делать скриншоты, но раскидывать их по датам в разные папки. А там уже можно скидывать их на сервер или хранить на самой станции - на ваше усмотрение. Что ж - приступим!

Для того, чтобы делать скриншоты в фоновом режиме автоматически мы будем использовать только scrot, cron и несколько строк на bash. К сожалению, стандартная программа снятия скриншотов нам не подойдет, да к тому же scrot куда более гибкий. Итак, устанавливаем все необходимое:

sudo apt install scrot

Cron у нас, конечно же уже имеется. Далее идем в домашнюю папку и создаем исполняемый файл, можно сделать это через интерфейс, а можно командой:

touch /home/username/.screen.sh
 
chmod +x /home/username/.screen.sh

Обратите внимание, что Я делаю файл скрытым, но можно оставлять его и видимым. Создаем так же папку для хранения скриншотов:

mkdir /home/username/screenshots

Теперь открываем файл скрипта, который мы создали /home/username/.screen.sh и добавляем в него следующие строки:

#!/bin/bash
 
MONTH=`date +"%m"`
DAY=`date +"%d"`
PATHTO=/home/username/screenshots
 
if [[ -d $PATHTO/$MONTH/$DAY ]]; then
        scrot '%Y-%m-%d-%H.%M.%S.jpg' -e "mv \$f $PATHTO/$MONTH/$DAY/"
else
        mkdir -p $PATHTO/$MONTH/$DAY
        scrot '%Y-%m-%d-%H.%M.%S.jpg' -e "mv \$f $PATHTO/$MONTH/$DAY/"
fi

Здесь мы указываем как именно будут создаваться папки, в данном случае со следующей иерархией: месяц/дата/скрин. А так же указываем имя файлов скриншотов по дате и времени. Так же, с помощью scrot можно указывать качество скриншотов и многое другое. Можем выполнить этот скрипт и проверить его работоспособность.

Теперь самое простое - добавляем наш скрипт в cron, для исполнения по расписанию. Редактируем расписание:

crontab -e

Если запускаете первый раз - будет предложено выбрать редактор, выбирайте наиболее удобный для вас. Переходим в самый низ и добавляем туда следующие строки:

SHELL=/bin/bash
MAILTO=username
DISPLAY=:0.0
*/2 * * * * /home/username/.screen.sh # JOB_ID_2

Устанавливая тем самым правило на выполнение нашего скрипта каждые две минуты. Вы можете изменять интервал как вам угодно. Собственно на этом, пожалуй, все. Так же можно написать небольшой скрипт для удаления старых файлов, чтобы они не забивали место. К примеру:

find /home/username/screenshots -type d -mtime +90 -exec rm -rf {} \;
find /dir/ -type d -mtime +N | xargs rm -f
find /somewhere -type d -mtime +7 -print0 | xargs -0 rm -f