среда, 25 августа 2021 г.

Аналог Gnome Photo Frame (или попытка его замены) в 2021 году

Привет, народ!

Вот и у меня наступил момент, когда возникла потребность почаще смотреть на что-то прекрасное. Обои на рабочем столе видно редко из-за постоянно развёрнутых приложений, поэтому я решил возродить идею использования программной фото-рамки, в которой в режиме слайд-шоу друг за другом отображались бы симпатичные картинки/фотографии из заданной директории. Не торопясь делать свой велосипед, я поискал готовые и наткнулся на программулину, название которой вынесено в заголовок – Gnome Photo Frame. К сожалению, заставить её работать у меня не вышло; статьи по этой утилите, которые я находил, датируются 2012-м годом. Возможно, это как-то взаимосвязано.

Поэтому ниже я опишу что было сделано для создания похожей по функциональности схемы: каталог с картинками (локально), циклическое слайд-шоу из которых отображается в окошке заданного размера на рабочем столе или поверх других приложений.

Photo Frame (gpicview + wmctrl)

TL;DR: GPicView + wmctrl

Итак, готовая схема для меня выглядит как использование двух приложений: GPicView для слайдшоу в окошке со скрытой панелью для минимализации интерфейса и wmctrl для управления размером, расположением и другими параметрами первого.

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

Установка необходимых компонентов в Ubuntu не потребовала подключения никаких других репозиториев и выполнилась одной командой
sudo apt install gpicview wmctrl
После этого я запустил GPicView (в русской локализации приложение называется Просмотр изображений) и после клика ПКМ (правой клавишей мыши) в окне программы выбрал пункт Показать/Скрыть панель, что также можно сделать нажатием [T]. Дополнительно в настройках программы ([P]) я указал для слайд-шоу интервал 4 сек. (по умолчанию – 5 сек.) и в качестве фона задал стандартный цвет рабочей области приложений у меня в системе (#CECECE).
Кроме того, изменить настройки программы можно непосредственно отредактировав файл ~/.config/gpicview/gpicview.conf.

Для обычного просмотра изображений в системе я использую другое приложение, поэтому устанавливать GPicView дефолтным для системы я не стал.
Вдобавок, это может помешать на следующем этапе, когда мы будем управлять окном с запущенным слайд-шоу, если в системе на тот момент будет запущен дополнительный процесс GPicView (например, как раз обычный просмотр изображения).

А вот и этап управления параметрами окна с помощью wmctrl. Про обращение к конкретно окну с воспроизводящим слайд-ноу GPicView я напишу буквально несколькими строчками ниже, а сейчас перечислю пару ключей с параметрами, которые использую у себя:
-e 0,1000,200,250,250
    здесь размеры окна и размещение, а конкретнее – 
        0 – задаёт использование системной настройки "прилипания" окошек;
        1000,200 – отступ в пикселях от левого и верхнего края экрана соответственно
        250,250 – размер области для слайд-шоу (ширина и высота в пикселях)
-b "add,above,skip_taskbar"
    а это установка окна "поверх всех" (above) и скрытие кнопки приложения с панели задач (skip_taskbar); "add" – указание на добавление следующих за ним параметров. 

А теперь про обращение к конкретному окну. Когда окно программы GPicView пустое, в заголовке отображается "Просмотр изображений", но когда там воспроизводится слайд-шоу, в заголовке этот текст меняется на путь к отображающемуся в текущий момент файлу, поэтому тут приходится делать немного хитрее – обращаться к программе по идентификатору (который может изменять своё значение, поэтому мы будем выцеплять его из списка доступных в текущий момент окон на лету) и в результате оперировать с помощью конструкции:

wmctrl -i -a `wmctrl -lx | grep -i "gpicview"`

После этой конструкции и добавляем описанные ранее ключи -e и -b, учитывая, что для каждого из них надо отдельно прописать указание на окно, т.е., фактически дважды прописать вышеозначенную строчку – сначала с одним ключом и его параметрами, потом со вторым и его.

Осталось совсем немного – запускать слайд-шоу из командной строки и можно будет собрать все куски для нашего скрипта воедино.

Для файлов, "участвующих" в слайд-шоу я создал отдельную директорию. Плюсом за такой вариант сюда можно отнести то, что если вместо файлов здесь размещать символические ссылки на них, это с одной стороны избавит вас от необходимости копирования и, соответственно дублирования информации только для слайд-шоу, а с другой – снимет ограничение на использование какой-то одной директории, ведь симлинков вы можете накидать сюда на файлы из разных мест.
Конечно же, можно сделать даже отдельные, уменьшенные файлы, которые будут открываться в окошке заданного вами размера без масштабирования, но у меня файлы не настолько огромные, чтобы GPicView тратил заметное время, изменяя их размер для уменьшенного отображения на лету. Хотя, разумеется, в некоторых случаях предпочтительным может оказаться такой вариант.

Ну и, наконец, итоговый скрипт для bash (sh), который делает всё, что описано выше:

#!/bin/sh
cd '<Путь-к-директории-с-контентом-для-слайд-шоу>'
gpicview . --slideshow & sleep 1 &&
wmctrl -i -a `wmctrl -lx | grep -i "gpicview"` -e 0,1000,200,250,250 &&
wmctrl -i -a `wmctrl -lx | grep -i "gpicview"` -b "add,above,skip_taskbar"


где:
1. Стандартное баше-скриптовое указание;
2. Смена рабочей директории (замените путь внутри < > на свой);
3. Запуск слайд-шоу в GPicView из текущей (п. 2) директории и приостановка на 1 сек.;
4. Изменение размеров и положения окна GPicView с помощью wmctrl;
5. Отображение этого окна поверх других и скрытие кнопки с панели задач.

Готовый скрипт из пяти строк (пусть будет MyPhotoFrame.sh) не обязательно делать исполняемым; его можно запускать командой:
sh "<путь-к-скрипту>/MyPhotoFrame.sh"

P.S. Возможность перемещения окна, изменения его размеров и принадлежности конкретному виртуальному рабочему столу (или всем сразу) остаётся.

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

Отправить комментарий

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

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