Skip to content


Автоматическое создание скриншотов в Linux

Как-то посетила меня мысль, что было бы неплохо где-то хранить историю открытых терминалов, чтобы в случае неожиданной перезагрузки рабочего компа вспомнить на каких же именно серверах я сидел SSH-ем и при необходимости доделать начатое. Непродолжительное гугление вкупе с "yum search screenshot" вывело меня на 2 следующих программки: shutter и scrot. Обе нашлись в стандартных репозиториях Fedora. Первая за собой потянула кучу Perl-модулей и не сильно мне понравилась тем, что, во-первых, отрабатывает довольно долго (секунды 3-4), а во-вторых, не умеет работать молча (на экране хоть и ненадолго, но появляется раздражающее окошко). Вызывал я её из крона следующим образом:

1 * * * * DISPLAY=:0 /usr/bin/shutter -f --disable_systray --min_at_startup -e > /dev/null 2>&1

Параметр -e означает, что нужно сразу завершить работу без лишних вопросов, а -f означает, что нужно сделать скриншот всего экрана целиком. Если нужно заскриншотить только определённую область экрана, то вызывать нужно так:

/usr/bin/shutter --select=100,100,300,300

Первые два числа - координаты (X,Y) верхнего левого угла прямоугольной области, вторые два числа - размеры области в пикселях по горизонтали и вертикали соответственно. При наличии ключика --select результат своей работы сохраняет в домашний каталог в виде файлов c именами "Выделение_001.png", "Выделение_002.png" и т.д. или, если установлена английская локаль, то "Selection_001.png", "Selection_002.png" и т.д. При наличии ключика -f имена файлов будут такие: "Рабочий стол 1_001.png", "Рабочий стол 2_001.png" и т.д.

Вторая софтинка (scrot) работает заметно быстрее и молча (что и определило мой выбор в её пользу). На её основе был написан следующий скриптец:

#!/bin/bash
 
WD=/home/sysadmin/screens
export DISPLAY=:0
[ ! -d $WD ] && mkdir -p $WD
/usr/bin/scrot $WD/sc-$(date '+%Y-%m-%d_%H:%M').png >> /tmp/scrot.log 2>&1
 
if [ `date '+%H'` -eq 19 ]; then
  # removing old screenshots
  cd /tmp
  find $WD -mtime +30 | xargs -r rm
fi

В результате в каталоге /home/sysadmin/screens будут создаваться файлы с именами, соответствующими текущей дате и времени. Скриптец был повешен в крон выполняться раз в час. Блок if задуман для того, чтобы раз в сутки находить и удалять скриншоты старше 30 дней от роду. Scrot, в отличие от shutter-а, не умеет выцеплять область экрана, а только может сохранять весь экран целиком.

Если кто знает способ делать скриншот только определённого рабочего стола, а не текущего, прошу отписаться в комментариях. Просто у меня в KDE рабочих столов 6 штук, и терминалы с SSH-ем группируются обычно только на одном из них.

Posted in *nix, Howto.

Tagged with .


One Response

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. ng358ex says

    Scrot умеет сохранять определённую область крана. Ключ -s. Правда не знаю чем это поможет в скрипте, так как выделять надо мышкой.

You must be logged in to post a comment.