Skip to content


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

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

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

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

  1. /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) работает заметно быстрее и молча (что и определило мой выбор в её пользу). На её основе был написан следующий скриптец:

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

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

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

Размещено в категории *nix, Howto. Теги: .

Комментариев: 1

Чтобы быть всегда в курсе здесь происходящего, Вы можете подписаться на RSS feed для комментариев на эту заметку.

  1. ng358ex said

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

Some HTML is OK

(required)

(required, but never shared)

, или ответить через trackback.

Страница 1 из 11