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

Теги

В этой заметке мы поговорим об очень легком и универсальном приложении командной строки, maim (make image), и посмотрим, какие опции можно использовать для изменения его поведения.

В Linux существует множество утилит, которые мы можем использовать для создания скриншотов. Каждая полноценная среда рабочего стола, такая как GNOME, KDE или XFCE, имеет встроенное приложение, специально разработанное для этой задачи, но существует и множество других небольших программ, не зависящих от рабочего стола.  

Утилита была разработана как улучшенная версия другой утилиты командной строки, используемой для создания скриншотов в Linux: scrot. Приложение является бесплатным и открытым программным обеспечением, а исходный код доступен на github. Программа доступна в репозиториях по умолчанию всех наиболее используемых дистрибутивов Linux, поэтому мы можем легко установить его на Fedora, Archlinux, Debian и его производные. На дистрибутиве сообщества, спонсируемом Red Had, мы можем использовать менеджер пакетов dnf для выполнения этой задачи. Запускаем:

$ sudo dnf install maim

Пакет также доступен в репозитории Archlinux "Community". Чтобы установить его, мы можем использовать pacman:

$ sudo pacman -Sy maim

Наконец, на Debian и его производных мы можем синхронизировать наши репозитории и установить утилиту с помощью apt-get:

$ sudo apt-get update && sudo apt-get install maim

После установки приложения в нашей системе мы можем использовать его для создания скриншотов из командной строки.

Утилита maim очень проста в использовании. Для начала рассмотрим ее базовое использование. Допустим, мы хотим сделать скриншот всего экрана и сохранить его в файл "screenshot.png". Все, что нам нужно сделать, это вызвать maim и передать путь к файлу в качестве аргумента. Мы запускаем:

$ maim ~/screenshot.png

По умолчанию приложение будет пытаться понять формат сохранения изображения из имени файла, поэтому, например, при выполнении приведенной выше команды изображение будет сохранено в формате png. Однако существует опция, с помощью которой можно явно передать формат, который мы хотим использовать: -f (сокращение от --format). Чтобы явно сохранить изображение в формате jpg, выполните команду:

$ maim -f jpg ~/screenshot

Как мы уже говорили, поддерживаются только форматы png и jpg, первый из которых используется по умолчанию. У нас также есть возможность выбрать качество получаемого изображения с помощью опции -m и выразить степень сжатия целым числом от 1 до 10: это будет иметь различные эффекты в зависимости от выбранного формата изображения.

При выполнении команд, которые мы использовали в предыдущих примерах, все содержимое экрана будет включено в снимок экрана автоматически, без участия пользователя. В некоторых случаях, однако, мы можем захотеть выбрать области экрана для более точного захвата. Чтобы решить эту задачу, мы можем запустить приложение с опцией -s (--select); это позволит запустить maim в "интерактивном режиме":

$ maim -s ~/screenshot

Когда мы выполним приведенную выше команду, форма курсора изменится на знак "плюс", и мы сможем выбрать область для захвата. Как только мы отпустим левую кнопку мыши, снимок экрана будет сохранен по указанному пути.

Другой вариант, который мы можем использовать для захвата конкретного окна, не обращая внимания на все остальные, - это запустить maim с опцией -i (--window), передав в качестве аргумента id окна, которое мы хотим захватить. В этот момент наверняка возникнет вопрос: "Как мы можем получить id окна?". При использовании сервера Xorg мы можем использовать утилиту xdotool для решения этой задачи. Для этого достаточно вызвать приложение командой selectwindow, а затем, когда форма курсора изменится, щелкнуть на окне, идентификатор которого мы хотим узнать. Его идентификатор будет отображен в терминале:

$  xdotool selectwindow

37748743

Узнав id окна, мы можем передать его maim следующим образом:

$ maim -i 37748743 ~/screenshot

Мы можем использовать тот же принцип для захвата только активного окна. На этот раз все, что нам нужно сделать, это запустить xdotool с командой getactivewindow, которая возвращает id текущего активного окна. Используя функцию подстановки команд оболочки, мы можем сделать все в одной строке:

$ maim -i "$(xdotool getactivewindow)" ~/screenshot

Maim поставляется с очень интересной функциональностью: он может использовать задержку, выраженную в секундах, перед тем как сделать снимок экрана. Опция, которая позволяет нам сделать это, -d (это сокращение от --delay). Как вы можете себе представить, все, что нам нужно сделать, это передать float в качестве аргумента опции. Чтобы подождать 5 секунд перед тем, как сделать снимок экрана, мы можем выполнить следующую команду:

$ maim -d 5 ~/screenshot

После запуска команды на экране появится обратный отсчет. По его истечении снимок экрана будет сохранен в указанном месте.

В предыдущих примерах мы указали путь к файлу, который должен быть использован для сохранения скриншота, сделанного с помощью maim. Однако этот аргумент можно опустить, если maim используется в конвейере, так как команда по умолчанию выводит закодированные данные изображения на стандартный вывод. Эта возможность позволяет нам делать что-то с изображением, полученным с помощью maim, "на лету". Рассмотрим пример. Предположим, мы хотим сделать снимок экрана и автоматически скопировать его в буфер обмена; при использовании Xorg мы можем написать:

$ maim | xclip -selection clipboard

В приведенном выше примере вывод maim, который представляет собой закодированные данные изображения, используется в качестве стандартного ввода приложения xclip, которое является интерфейсом командной строки для выбора X-сервера. В данном случае мы запускаем его с опцией -selection, которая позволяет нам указать, какой X-сервер использовать.

Закодированные данные изображения будут сохранены в буфере обмена, готовые к вставке в наш любимый редактор изображений или любое другое приложение, поддерживающее изображения. Таким же образом мы изменяем полученное изображение, передавая его на стандартный вход приложений командной строки, таких как ImageMagick.


Обычно снимок экрана создаётся по команде пользователя, с помощью встроенной функции операционной системы, или специальной программой. 

 

Последние материалы