А теперь предлагаю к рассмотрению утилиту для снятия скриншотов в Linux – scrot, которая консольная (без графического интерфейса) и весьма себе умелая для программы, не обновлявшейся более 10 лет.
Небольшое отступление: в Ubuntu (да и в Xubuntu, и, по всей видимости, во многих других дистрибутивах) имеются средства, позволяющие сохранять скриншоты сразу после установки выбранного дистрибутива. Тут, по сравнению с Windows, где после нажатия [Prt Scrn] никаких уведомлений о появившемся в буфере обмена изображении не появляется, запускается программа, предлагающая выбрать из нескольких вариантов дальнейших действий с изображением:
Графический интерфейс 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'
А теперь мини-бонус дочитавшим до конца.
ОтветитьУдалитьЯ так и не нашёл времени и желания сделать новый пост на эту же тему, поэтому просто добавлю комментарием.
1. Лучше заменить вариант с перемещением готового скриншота командой mv, потому что мне он кажется более логичным и вдобавок быстрым:
Удалитьсначала использовать команду смены текущего каталога (cd) а потом уже там выполнить создание файла-скриншота. Именно такой вариант я использую последние несколько лет, а в статье указать изменения так и не добрался. Для удобства чтения скрипта команду разбиваю на несколько строк. В итоге основные действия укладываются в трёхстрочный файлик
#!/bin/sh
cd 'путь_к_директории' &&
scrot 'Screenshot %Y-%m-%d %H.%M.%S.png' -q 1
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. Ну и опционально после проверки условий (в случае их наличия) и выполнения команды scrot можно воспроизводить звук, о чём я упоминал в основном тексте ещё 7 лет назад:
Удалитьaplay 'путь_к_файлу.wav' -q
(как вариант для других форматов – mpg123 или ffmpeg)
и/или выводить уведомление о выполненном создании скриншота:
notify-send -t 2500 '🖻' 'Скриншот создан'