воскресенье, 10 ноября 2013 г.

Скриншоты в Linux с помощью Scrot

КДПВ. ASCII-графика: Пин из Смешариков

А теперь предлагаю к рассмотрению утилиту для снятия скриншотов в Linux – scrot, которая консольная (без графического интерфейса) и весьма себе умелая для программы, не обновлявшейся более 10 лет.

Небольшое отступление: в Ubuntu (да и в Xubuntu, и, по всей видимости, во многих других дистрибутивах) имеются средства, позволяющие сохранять скриншоты сразу после установки выбранного дистрибутива. Тут, по сравнению с Windows, где после нажатия [Prt Scrn] никаких уведомлений о появившемся в буфере обмена изображении не появляется, запускается программа, предлагающая выбрать из нескольких вариантов дальнейших действий с изображением: 

xfce4-screenshoter
Графический интерфейс xfce4-screenshooter

Кроме того, с xfce4-screenshooter можно работать и через консоль. Но при всех достоинствах один недостаток перебивает всё: программа не предусматривает создание шаблона для имени (нельзя принудительно именовать файлы датой в формате год-месяц-день, там "вшито" день.месяц.год), а штамп времени содержит в качестве разделителя ":", в результате чего полученный файл без переименования не скопировать, например, на раздел с NTFS.

Вот, собственно, из-за чего выбор и пал на Scrot: шаблон для имени, параметры качества/сжатия, папку назначения задавать можно. Счастье совсем рядом!

И даже мнимый недостаток – использование только через CLI (Command Line Interface, интерфейс командной строки) – стоит рассматривать как преимущество: благодаря возможности назначить комбинацию клавиш для выполнения той или иной команды мы можем создать несколько отличающихся параметрами команд и использовать определённую в зависимости от нужд.

Примеры использования нескольких команд:
1. Одна для сохранения скриншота в .png, другая – в .jpg;
2. Одна для .jpg с качеством 95%, вторая – для качества 75%;
3. Одна для сохранения в одну папку, другая – во вторую;
4. Одна для скриншота, другая – для скриншота и миниатюры.

И это варианты только с двумя командами, а их может быть и больше.

Итак, от слов к делу:
Ставим Scrot
sudo apt-get install scrot
вместе с ним должен поставиться ещё один необходимый пакет – giblib1.
Если планируется "накапливать" скриншоты где-то в конкретном месте, а не в /home/<пользователь>, стоит заблаговременно создать папку, чтобы затем использовать путь к ней к командной строке. Я для примера буду использовать ~/Pictures/Screenshots/Scrot/.

В таком случае создавать скриншоты можно запуская из терминала или комбинацией клавиш команду
scrot 'Screenshot %Y-%m-%d %H.%M.%S.png' -e 'mv "$f" ~/Pictures/Screenshots/Scrot/'
Подробнее:
scrot 'Screenshot %Y-%m-%d %H.%M.%S.png'
запускает Scrot для сохранения скриншота в формате .png с именем вида "Screenshot год-месяц-день час.минута.секунда";
-e
параметр Scrot, позволяющий выполнять дополнительную команду;
'mv "$f" ~/Pictures/Screenshots/Scrot/'
собственно дополнительная команда, перемещающая созданный скриншот в указанное расположение (напомню, папка должна быть создана заранее), а $f может обойтись без кавычек, если в имени файла будут отсутствовать пробелы.

Для изменения качества и/или размера файлов можно использовать параметр -q с обязательным указанием значения в пределах 1–100. Если этот параметр не указывать, он считается равным 75.

Таким образом, для улучшения качества .jpg стоит увеличить это значение, а для уменьшения размера файла .png значительно уменьшить (в отличие от качества .jpg, для .png всего 10 степеней сжатия изображения). Я устанавливал значение равным единице для получения минимального объёма.

Кроме этого, неплохо бы дополнить команду обратной связью: я использовал файл .wav длительностью менее секунды и имеющееся в Xubuntu "из коробки" средство воспроизведения файлов такого типа – aplay.

Для файла Shot.wav, лежащего в /home/<пользователь>, команда воспроизведения с параметром -q для сайлент-режима (режима принудительного невыведения информации о выполняемых действиях) получается такой:
aplay ~/Shot.wav -q
Ну и завершающим аккордом вся команда для снятия скриншота полного экрана в формате .png минимального размера с воспроизведением звукового файла при выполнении операции:
scrot 'Screenshot %Y-%m-%d %H.%M.%S.png' -q 1 -e 'mv "$f" ~/Pictures/Screenshots/Scrot/ && aplay ~/Shot.wav -q'

4 комментария:

  1. А теперь мини-бонус дочитавшим до конца.
    Я так и не нашёл времени и желания сделать новый пост на эту же тему, поэтому просто добавлю комментарием.

    ОтветитьУдалить
    Ответы
    1. 1. Лучше заменить вариант с перемещением готового скриншота командой mv, потому что мне он кажется более логичным и вдобавок быстрым:
      сначала использовать команду смены текущего каталога (cd) а потом уже там выполнить создание файла-скриншота. Именно такой вариант я использую последние несколько лет, а в статье указать изменения так и не добрался. Для удобства чтения скрипта команду разбиваю на несколько строк. В итоге основные действия укладываются в трёхстрочный файлик

      #!/bin/sh
      cd 'путь_к_директории' &&
      scrot 'Screenshot %Y-%m-%d %H.%M.%S.png' -q 1

      Удалить
    2. 2. В некоторых случаях можно ещё больше оптимизировать. Например, одним и тем же скриптом создавать скриншоты в разных директориях с разными натройками (формат/качество).
      У себя на текущий момент я использую для этого проверку наличия запущенного процесса командой pgrep. Для разных игр – чтобы в названиии скриншота было указано название игры и чтобы они создавались в разных директориях в JPG. При отсутствии запущенных игр создаётся скриншот в третьей директории в PNG.
      Для этого основной алгоритм скрипта примерно такой:

      #!/bin/sh
      if pgrep 'WoW.exe' > 1; then
      cd 'директория_скриншотов_WoW' &&
      scrot 'WoW-Screenshot %Y-%m-%d %H.%M.%S.jpg' -q 98
      elif pgrep 'Hearthstone.exe' > 1; then
      cd 'директория_скриншотов_Hearthstone' &&
      scrot 'Hearthstone-Screenshot %Y-%m-%d %H.%M.%S.jpg' -q 98
      else
      cd 'директория_скриншотов_не-игр' &&
      scrot 'Screenshot %Y-%m-%d %H.%M.%S.png' -q 1
      fi

      Удалить
    3. 3. Ну и опционально после проверки условий (в случае их наличия) и выполнения команды scrot можно воспроизводить звук, о чём я упоминал в основном тексте ещё 7 лет назад:
      aplay 'путь_к_файлу.wav' -q
      (как вариант для других форматов – mpg123 или ffmpeg)
      и/или выводить уведомление о выполненном создании скриншота:
      notify-send -t 2500 '🖻' 'Скриншот создан'

      Удалить

Если у вас есть что сказать и/или вы не согласны с изложенным в посте – оставьте комментарий. Регистрации не требуется.

If you think I'm wrong and/or you have to say something – fill free to write comment. No sign up required.