Здравствуйте.
Немного не до администрирования в последнее время, поэтому часть задумок все еще лежит в долгом ящике. Но данный пост возник сумбурно.
Работая с астрой долгое время, в основном через терминал, как то мимо меня прошло то, что в составе Астры есть красивые обои, которые как ни странно доступны через домашний каталог, и физический находятся по адресу /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"
Обратите внимание: Не забудьте на файл wallpaper.sh дать права на выполнение.
sudo chmod +x wallpaper.sh
Создаем папку /opt/wallpaper_al/files/ и создаем в ней файл settings
Прописываем туда путь к папке с обоями:
img_folder=/usr/share/wallpapers
Для одного параметра создан целый файл для того, чтобы в будущем при доработке, сразу был отдельный файл с переменными, вы вполне можете написать эту переменную в основном 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
Обратите внимание: пробелы важны!
После создания файла - копируем его по адресу /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 указать необходимую директорию с обоями, если она отличается от стандартной.
Что дальше: В планах конечно пересмотреть и улучшить скрипт, потому что сейчас чувствую что имена с пробелами будут проблемой для скрипта. Их не проверял. Так же при блокировке сеанса, у нас показывает другое изображение. Есть мысли изменить и его. Возможно сделать службу запущенной постоянно, чтобы можно было править конфиг "на лету".
Во всяком случае эта статья написано ради изменения одной строчки в конфиг файле. А как это производить дело уже за вами. Если у вас есть чем поделиться, еще раз, жду в комментариях. Потому что, говорю снова, не считаю себя специалистом по написанию скриптов, и с радостью выслушаю ваши предложения.