Найти тему

Смена фонового изображения при первом входе в систему Astra Linux Special Edition 1.7

Здравствуйте.
Немного не до администрирования в последнее время, поэтому часть задумок все еще лежит в долгом ящике. Но данный пост возник сумбурно.
Работая с астрой долгое время, в основном через терминал, как то мимо меня прошло то, что в составе Астры есть красивые обои, которые как ни странно доступны через домашний каталог, и физический находятся по адресу /usr/share/wallpapers

Стандартные обои в Астре
Стандартные обои в Астре

И у нас есть приветственное окно с логином, которое по стандарту имеет вид:

В статье рассматривается версия Астры 1.7 и тема fly-modern, все настройки применяются именно на эту тему.

Окно приветствия в Астре
Окно приветствия в Астре

Ну и собственно данное изображение меняется в настройках темы по адресу:

/usr/share/fly-dm/themes/fly-modern/settings.yaml

Строка path: отвечает как раз за изображение. Чтобы поставить свое изображение, просто укажите полный путь до файла (например ваше корпоративное изображение) и собственно на этом все.

Именно тут прописывается полный путь до нужного файла
Именно тут прописывается полный путь до нужного файла

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

Я ни в коем разе не считаю что мой код правильный и красивый, наоборот не так часто обращаюсь к скриптам. Поэтому если у вас есть предложения по улучшению или правке кода, с удовольствием почитаю и приму к сведению в комментариях.

Итак создаем папку /opt/wallpaper_al/ создаем внутри файл wallpaper.sh и пишем скрипт:

#!/bin/bash
path=/opt/wallpaper_al
echo 'Script was running';
cat /dev/null > $path/files/listing
. $path/files/settings
find $img_folder -maxdepth 1 \( -iname '*.jpg' -o -iname '*.png' \) >> $path/files/listing

if ! [ -f $path/files/settings_original.yaml ]
then
cp /usr/share/fly-dm/themes/fly-modern/settings.yaml $path/files/settings_original.yaml
fi

line=$(cat $path/files/listing | shuf -n1)
sed -i "s|.*path:.*| path: $line|" "/usr/share/fly-dm/themes/fly-modern/settings.yaml"

-5

Обратите внимание: Не забудьте на файл wallpaper.sh дать права на выполнение.

sudo chmod +x wallpaper.sh

Создаем папку /opt/wallpaper_al/files/ и создаем в ней файл settings

Прописываем туда путь к папке с обоями:

img_folder=/usr/share/wallpapers

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

Что делает скрипт:

  • устанавливает папку по умолчанию для выполнения скрипта /opt/wallpaper_al
  • очищает файл /files/listing
  • подключает файл с переменными из /files/settings
  • ищет в папке с обоями все jpg и png файлы, и записывает их в файл /files/listing (без внутренних дерикторий (параметр maxdepth 1)
  • Если это первый запуск - делает резервную копию стандартного конфиг файла темы
  • выбирает рандомную строчку в файле со списком обоев
  • заменяет строчку с путем к обоям в конфиг файле. Обратите внимание: заменяем строку path и перед ней ставим два пробела, это важно!

Теперь нам осталось только создать службу, которая будет запускаться до старта графической оболочки, смотреть папку с обоями и ставить рандомную картинку в конфиг файл.

Создаем файл wallpaper.service со следующим содержанием:

[Unit]
Description=Change Wallpaper on Logon screen Astra Linux
Before=fly-dm.service

[Service]
ExecStart=/opt/wallpaper_al/wallpaper.sh
Type=oneshot

[Install]
WantedBy=multi-user.target

Обратите внимание: пробелы важны!

-7

После создания файла - копируем его по адресу /lib/systemd/system/wallpaper.service

Ну все, после этого остается лишь включить службу и перезагрузиться.

sudo systemctl enable wallpaper.service

Фоновое изображение должно поменяться.

Пример работы
Пример работы

Готовые файлы

Создал страницу на Gitflic с этими файлами (не нашел как разрешить скачать без авторизации). Порядок действий следующий:

  • папку wallpaper_al скопировать в /opt/wallpaper_al
cd Загрузки/
unzip wallpaper_al.zip
sudo cp -R wallpaper_al /opt
sudo chmod +x /opt/wallpaper_al/wallpaper.sh
  • файл wallpaper.service скопировать по адресу /lib/systemd/system/wallpaper.service и включить
sudo cp /opt/wallpaper_al/wallpaper.service /lib/systemd/system/wallpaper.service
sudo systemctl enable wallpaper.service
  • опционально: в файле /opt/wallpaper_al/files/settings указать необходимую директорию с обоями, если она отличается от стандартной.

Что дальше: В планах конечно пересмотреть и улучшить скрипт, потому что сейчас чувствую что имена с пробелами будут проблемой для скрипта. Их не проверял. Так же при блокировке сеанса, у нас показывает другое изображение. Есть мысли изменить и его. Возможно сделать службу запущенной постоянно, чтобы можно было править конфиг "на лету".

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