Внимание: этот скрипт не работает в GNOME 3 и Ubuntu 11.10; для этих систем нужно использовать новую версию скрипта.
Этот bash-скрипт выбирает случайный файл изображения (.jpg, .jpeg или .png) из заданного каталога и устанавливает его в качестве обоев рабочего стола.
В данной задаче есть небольшая хитрость. Когда скрипт запускается из cron, переменная DBUS_SESSION_BUS_ADDRESS
, необходимая gconftool-2
, не установлена. Для её инициализации добавлен специальный фрагмент кода.
Код протестирован во всех версиях Ubuntu вплоть до 11.04 Natty Narwhal. Он работает как с Gnome, так и с Unity.
Всё, что нужно настроить в нижеприведённом скрипте, это путь к каталогу с изображениями dir_wallpapers
.
#!/bin/bash
#================================================================================
# Description
# Script to set a random wallpaper in Gnome/Unity
# Synopsis
# rotate-wallpaper
# Author
# Dmitry Kann, http://yktoo.com/
# License
# Public domain
#================================================================================
# Setup vars
dir_wallpapers="$HOME/Pictures/" # Path to wallpaper directory
# Exports DBUS variable which is not set when called from cron session
export_variables() {
user=$(whoami)
pid=$(pgrep -u $user gnome-panel)
for dbusenv in $pid; do
DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//')
data="DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS"
eval "export $data"
done
}
# Fill array with picture files (replace spaces with colons to fool the array)
files=( $(find "$dir_wallpapers" -type f \( -iname '*.jpeg' -o -iname '*.jpg' -o -iname '*.png' \) | sed s/' '/':'/g) )
# Get number of members in the array
N=${#files[@]}
# Randomize N
((N=RANDOM%N))
# Get the normal file name (change colons back to spaces)
file=${files[$N]//:/ }
# Change desktop wallpaper
export_variables
gconftool-2 --type string --set /desktop/gnome/background/picture_filename "$file"
Комментарии