25 September 2015

Собираем gnome-screenshot из исходников, чтобы изменить формат имени файла скриншота

Configuring Linux*nix
Sandbox
Исходные данные. Некоторое время назад я столкнулся с тем, что программа gnome-screenshot (она же «Снимок экрана») сохраняет скриншоты при использовании горячих клавиш (PrtScr, Alt + PrtScr) с именем вида «Снимок экрана от 2022-02-02 10:11:59.png». Я же привык использовать имя вида «2022-02-02_101159.png». К тому же двоеточия в имени файла ставят в тупик Windows. Тогда я так и не смог найти, как настроить имя файла при снимке горячими клавишами и написал небольшой bash-скрипт, который обеспечивал мне нужный результат.

Во время поисков решения я натолкнулся на описание проблемы на сайте askubuntu.com. Среди ответов привлек мое внимание следующий: «истинный linux way — собери свой собственный gnome-screenshot из исходников!». В тот момент я подумал, что это слишком сложно. А на днях решил попробовать. Дальше я опишу порядок своих действий. В материале вряд ли будет что-то новое для опытных пользователей. Поэтому я считаю, что он может быть интересен:

1) тем, кто как и я хочет исправить проблему с форматом имени файла,
2) тем, кто пока ещё ничего из исходников не собирал.

Итак, переходим к созданию своей сборки gnome-screenshot.

UPD: Дальше я пошел к цели очень сложным путем. О чем мне указали в комментариях практически сразу после публикации. Как оказалось, я столько всего делал «не так», что проще описать правильную последовательность действий, чем вносить правки в уже написанное. Итак, в терминале:
1) скачиваем исходные коды:
apt-get source gnome-screenshot

2) поверяем наличие в системе всех пакетов, необходимых для сборки:
sudo apt-get build-dep gnome-screenshot

3) переходим в папку с исходными кодами:
cd gnome-screenshot-3.10.1/

4) редактируем файл, отвечающий за формат даты — подробности ниже, под спойлером:
gedit src/screenshot-filename-builder.c

5) создаем пакет:
dpkg-buildpackage -b

6) устанавливаем пакет:
sudo dpkg -i ../gnome-screenshot_3.10.1-0ubuntu1_i386.deb

а вот мой первоначальный запутанный путь с картинками
1) Скачиваем исходники с репозитория Git. Для примера я консервативно выбрал версию 3.10.1, которая и стояла у меня в Ubuntu 14.04 до сих пор. Думаю, любители новинок могут выбрать самую свежую версию (сейчас это 3.16.2).

2) Распаковываем архив. Открываем файл src/screenshot-filename-builder.c. Находим строку 135 и меняем формат даты в имени файла, т.е. строчку origin = g_date_time_format (d, "%Y-%m-%d %H:%M:%S") меняем на origin = g_date_time_format (d, "%Y-%m-%d_%H%M%S").



В этом же файле, строки 145 и 152, я удалил текст «Screenshot from» при создании переменной file_name. Обратите внимание, данный текст изменяется в зависимости от локализации системы. Поэтому если вы хотите отредактировать его, а не удалить полностью, см. файл po/ru.po. Закрываем и сохраняем файл.

3) Запускаем терминал, переходим в папку, куда распакованы исходники. Делаем файл autogen.sh исполняемым и запускаем его:


cd /home/user/Загрузки/gnome-screenshot-3.10.1
sudo chmod +x autogen.sh
./autogen.sh

После запуска файла система, скорее всего, сообщит о нехватке каких-нибудь пакетов. Устанавливаем пакет, запускаем ещё раз, узнаем, что не хватает чего-то ещё. И так несколько раз. У меня при сборке ничего не потребовалось, т.к. ранее я пробовал собрать 3.16.2 и поставил все пакеты, которые были нужны. Может быть для 3.10.1 что-то здесь избыточно, но на всякий случай коротко какие пакеты просила система и какими командами я их ставил:

>> You must have glib-gettext >= 2.2.0 installed
sudo apt-get install libglib2.0-dev

>> No package 'xext' found
>> No package 'x11' found
sudo apt-get install libxext-dev
sudo apt-get install libxdamage-dev

>> No package 'gtk+-3.0' found
>> No package 'libcanberra-gtk3' found
sudo apt-get install libgtk-3-dev
sudo apt-get install libcanberra-gtk3-dev

4) После этого система сообщила мне, что все хорошо, и я могу использовать make:



Выполняем данную команду. Сообщений об ошибках нет, значит все готово к установке:



5) Дальше, в соответствии вот с этим мануалом рекомендуют ни в коем случае не использовать sudo make install (где-то в сети, напротив, рекомендуют его), а собрать deb-пакет одним из возможных способов.

Я выбрал тот вариант, который использует программу checkinstall. Установка:


sudo apt-get install checkinstall

Далее выполняем:


sudo checkinstall -D --install=no

Что значат ключи:
-D — создание deb-пакета,
--install=no — без инсталляции.

Появляется приглашение заполнить описание создаваемого пакета. Я написал просто «gnome-screenshot-3.10.1-fixname». Описание может состоять из нескольких строк, поэтому для завершения дважды нажимаем Enter.

Появляется полное описание, которое можно отредактировать или перейти к следующему шагу:



Проверяем данные, нажимаем Enter. Получаем сообщение о том, что пакет сформирован, и мы можем установить его в систему с помощью команды:


sudo dpkg -i gnome-screenshot_3.10.1-1_i386.deb



6) Устанавливаем пакет.

Делаем скриншот с помощью горячих клавиш. Заходим в папку «Изображения» и смотрим на имя файла:


Задача решена!

P.S. Уже когда дописывал текст, наткнулся на статью, в которой подробно рассказано почему не стоит использовать make install.
Tags:linuxubuntugnome-screenshotcheckinstallmakeapt-getdpkg
Hubs: Configuring Linux *nix
+2
7.8k 18
Comments 15
Popular right now
Системный администратор Linux
from 100,000 ₽Kintech LabМосква
Программист (C, Linux)
from 120,000 to 200,000 ₽АМИКОНМоскваRemote job
Data Scientist/Senior Data Scientist (AI Lab)
from 150,000 to 250,000 ₽СберМосква
Системный администратор Linux DevOps
from 100,000 to 150,000 ₽X-KeeperКрасногорскRemote job
Top of the last 24 hours