Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #Csandriel
- #08.03.2018
- #wallshow
- #Скрипт предназначен для автоматической смены обоев. Использует пакеты feh и демон atd
- #Требует наличия файла ~/.Xresources (если отсутствует, создать пустой)
- #There will be a temporary copy of wallpaper for immediate using
- #Здесь должно быть задано имя временного фала, в который будет копироваться обоина,
- #для промежуточного храненения:
- #----Must-be-set-----
- TEMP_WF=/home/user/wallpaper.img
- #Это рудимент
- #the directory where wallpapers are stored:
- #директорий где хранятся подлежащие ротации обои. Обрабатывается рекурсивно, тоесть с подпапками
- #----Must-be-set-----
- WS_DIR=/data0/graph/wallpaper
- #list of graphic files found in WS_DIR:
- #в этом файле будет храниться список файлов, найденных в WS_DIR, поименно, с путями,
- #----Must-be-set-----
- WS_FILE=/home/bin/.wallshow.lst
- #Generating/Updating of the list
- #may be done with '-u' key
- #Генерация данного списка выполняется с ключем -u
- #НЕ ЗАБЫВАЕМ wallshow -u когда запускаем впервые, иначе получим cp cannot stat ''
- #don't forget to execute -u (update .wallshow.lst) key at the first invocation.
- #Примеры использования:
- #use examples:
- #wallshow -p 5min
- #wallshow -p 2hours
- #wallshow -p 5days
- #задает интервал, в расписании смены обоев
- #sets the interval of wallpaper changing
- #Called without any key, the script just does randomly wallpaper change,
- #Вызванный без каких либо ключей скрипт просто случайно выбирает новую обою
- #not affecting chedule if it is set.
- #при чем не меняя расписания, если таковое уже задано.
- #Every new invocation of -p key erases the chedule previosly set
- #Каждый вызов с ключем -p очищает ранее заданное расписание
- #Key -s stops wallshow, leaving current wallpaper remained, and removing chedule.
- # -s останавливает слайдшоу, оставляя текущую обоину и удаляя расписание дальнейших смен
- #Key -d deletes the source file of current wallpaper
- # -d удаляет текущий файл, заданный в качестве обоины (полезно для очистки от мусора оптовых партий обоев)
- #Key -u refreshes the images-list of script
- # -u обновляет список файлов, подлежащих ротации, вновь перечитывая директорий обоев.
- #Remember QUOTES here:
- #Еще один рудимент
- PERFORM="setwallpaper "
- setwallpaper(){
- cp -f "$1" "$TEMP_WF"
- feh --bg-fill "$TEMP_WF"
- }
- #logged in username here:
- #----Must-be-set-----
- #if launched as root then drop root and restart script as $USER
- USER=user
- if [ $UID -eq 0 ] ; then echo "DROP ROOT & recurse"; STRING="$@"; su $USER -c "$0 $STRING"; exit; fi
- #count of lines in wallpapers-list:
- WS_FILE_LINES=$(echo $(wc -l $WS_FILE)|sed 's_\([^ ]*\).*_\1_')
- #id of the display wich wallshow must be performed for:
- DISPLAY_NUM=:0
- #gets a random number from a given range
- gfromrange(){
- Max_RAND=32762
- MIN=$1
- MAX=$2
- RANGE=$(($MAX-$MIN))
- r=$(bc -l <<<"($RANGE/$Max_RAND)*$RANDOM+$MIN")
- x=$(echo $r|sed 's_^.*[\.]\(.\).*_\1_')
- r=$(echo $r|sed -e 's/[\.].*//')
- if [ $x -gt 4 ] ; then ((r++)) ; fi
- echo $r
- }
- #enumerates graphical files in $WS_DIR, stores the list in $WS_FILE
- getlist(){
- echo "image list have been updating..........."
- find "$WS_DIR" \
- -iname "*png" -o \
- -iname "*jpg" -o \
- -iname "*gif" -o \
- -iname "*bmp" -o \
- -iname "*jpeg" -o \
- -iname "*tiff" -o \
- -iname "*tif" \
- >"$WS_FILE"
- echo "done."
- echo "$(wc -l $WS_FILE|sed 's_\([0-9]*\).*_\1_')" files was added
- }
- selectfile(){
- num=`gfromrange 1 $WS_FILE_LINES`
- echo $(sed -n "$num"p $WS_FILE)
- }
- settime(){
- #a tricky passage: list at-jobs related to the script
- #and removing it in the same time by pricessing 'at -l' report
- #directly to removing command
- at -qw -l|sed 's_\([0-9]*\).*_atrm \1_'|sh
- #set new shedule
- at <<EOF -qw now+ "$PAUSE"
- DISPLAY="$DISPLAY_NUM" "$0" -p "$PAUSE"
- EOF
- }
- usage(){
- echo "RTFM in the script itself"
- }
- #main()
- while getopts usdp: OPTION
- do case "$OPTION" in
- u) getlist; exit 0;;
- p) PAUSE="$OPTARG"
- settime
- echo "the interval has been set to $PAUSE";;
- s) at -qw -l|sed 's_\([0-9]*\).*_atrm \1_'|sh; exit 0;;
- d)#now we have became severe enough
- #to store our variables in system files:
- WSW=$(sed -n 's/WS_WALLPAPER:\(.*\)/\1/p' ~/.Xresources)
- rm "$WSW"
- echo -e " $WSW\n was deleted";
- exit 0;;
- ?) usage; exit 1;;
- esac
- done
- WS_WALLPAPER=$(selectfile)
- sed -i '/WS_WALLPAPER/d' ~/.Xresources
- echo "WS_WALLPAPER:$WS_WALLPAPER" >> ~/.Xresources
- DISPLAY=$DISPLAY_NUM $($PERFORM "$WS_WALLPAPER")
- echo -e " WS_WALLPAPER="$WS_WALLPAPER"\n was set"
Advertisement
Add Comment
Please, Sign In to add comment