The previous wallpaper changer that I wrote in Python served me well for the last 2 years, but sometimes it would get stuck with some wallpapers: of the 200 pictures I have in my wallpapers folder (mostly taken from the paper wall), some were definitely being shown more often than others. Has the script developed a taste? Probably! 🙂
So this time I decided to put together something very quick, but that does a better job at never showing the same picture twice before all pictures in the folder have been set as desktop background.
It comes as a single bash script, there’s no configuration file to set, it picks pictures from a single folder (whereas the Python version could use several), and it moves files to a folder called shown
when setting them as desktop background. Not very elegant, but it gets the job done!
Here it is; you can set your wallpapers folder and the refresh interval at the highlighted lines.
#!/bin/bash # # WallpaperChanger.sh # Copyright 2014 Michele Bonazza michele@michelebonazza.com # # A simple script to automatically change your wallpaper in Gnome. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. WALLPAPERS_FOLDER=/home/path/to/your/wallpapers REFRESH_INTERVAL=$((5 * 60)) # change every 5 minutes MODE="zoom" # one between none, centered, wallpaper, scaled, stretched, zoom, spanned # Changes the desktop background, and moves it to the "shown" folder so that it's # not shown again before all wallpapers in the folder have been used. # arg1 the file name of the file to be set as new background; must be in the # current folder function change_wallpaper() { mv $1 shown gsettings set org.gnome.desktop.background picture-uri file://$WALLPAPERS_FOLDER/shown/$1 gsettings set org.gnome.desktop.background picture-options $MODE } # Echoes the next wallpaper to be set, picked at random among images in the # configured folder function get_next_wallpaper() { find . -maxdepth 1 -type f -name "*.png" -o -name "*.jpg" -o -name "*.gif" -o -name "*.jpeg"| shuf -n 1 } mkdir -p $WALLPAPERS_FOLDER/shown cd $WALLPAPERS_FOLDER while true; do NEXT_WP=$(get_next_wallpaper) # have we used all wallpapers? if [[ "$NEXT_WP" == "" ]]; then # yes, chdir to shown, and move them all back to the parent folder cd shown # move them to parent folder find . -maxdepth 1 -type f -name "*.png" -o -name "*.jpg" -o -name "*.gif" -o -name "*.jpeg" | xargs mv -t .. cd .. # check again NEXT_WP=$(get_next_wallpaper) if [[ "$NEXT_WP" == "" ]]; then echo "no wallpapers found in $WALLPAPERS_FOLDER, will check again in $REFRESH_INTERVAL seconds..." sleep $REFRESH_INTERVAL continue fi fi echo "changing background to $NEXT_WP" change_wallpaper $NEXT_WP sleep $REFRESH_INTERVAL done
As always, I’ve also added this to my pastebin.
Save it as wallpaper_changer.sh
, make it executable
chmod +x wallpaper_changer.sh
and add it to your “Startup applications” list, which can be found in Ubuntu’s main menu (the one you use to log out/shut down the computer), or can be brought up from a terminal using
gnome-session-properties
Click “Add”, use whatever name you want and browse to the wallpaper_changer.sh
script (wherever you’ve saved it).
Sometimes I found that “Startup applications” doesn’t work: make sure that after having added your script and closed the window you can see an entry called wallpaper_changer.sh.desktop
in the output of
ls -l ~/.config/autostart
If it’s not there, remove the entry and try again (I know, I know. The alternative is to fiddle with Upstart or init.d so if you want a GUI, that’s better than nothing!)
You can also change the effect to apply to your wallpapers at line 23 in the script.
Enjoy your new desktops! 🙂
[…] [Edit – April 2014]: I noticed my python script here didn’t do a very good job at not showing the same wallpaper twice before all wallpapers in a folder were shown. Hence, I created another simpler version of the script in bash that does a better job at that. You can find it here […]
LikeLike
People complained that the iTunes shuffle feature wasn’t random enough.
Apple removed it’s randomness by keeping track of the music it played so that it didn’t repeat those tracks too soon.
iTunes customers were very happy, it “felt” much more random.
LikeLike
hehe, fair enough!
Sometimes you want your random to… not be that random after all 🙂
LikeLike
Ah SNAP!!!! I meant to post about the script here…You’ll find my post there—Again THANKS!!!
LikeLiked by 1 person