[Python Wpg] Gnome background switcher!!!
sbalneav at legalaid.mb.ca
Mon Jun 5 17:06:57 CEST 2006
So, if you're like me (and heaven help you if you are) you've probably
managed to acquire a huge number of background wallpapers in your life
online. However, one of gnome's minor deficiencies is that the
wallpaper switcher doesn't have a feature where it cycles through a list
of wallpapers. What to do, what to do...
One could write a python program!!!
This is an amalgam of about 3 different programs I found on the
interweb. The problem with two of them was that they didn't actually
exit after your gnome session quit (they'd happily continue on in the
background. For most people, it wouldn't be a problem, since when they
log out, they probably shut down. On LTSP servers, however, this isn't
the case), and the other progam wasn't a background swither at all, but
it DID have the gnome/gtk framework for calling gtk.main, and a timeout
So, slapping all 3 together, and a bit of glue, and voila!
Go to preferences->sessions, and in the "Startup Programs" tab, you'll
want something like:
/path/to/background.py -f /path/to/backgrounds
If you want to adjust the interval (currently, it switches the wallpaper
every 10 minutes), you can add a "-i interval_seconds" to the command
line as well.
The program automatically scans a directory tree, so if you have your
wallpapers organized into folders, thats no problem.
And now, for your viewing pleasure, background.py:
from optparse import OptionParser
class GtkBackgroundSwitcher (threading.Thread):
A gnome-aware background switcher. Properly exits when your gnome
session goes away. Sets your picture filename in the gconf database
def __init__(self, filelist, interval):
self.index = 0
self.filelist = filelist
self.filelistlen = len(self.filelist)
self.interval = interval * 1000 # Gnome intervals are in ms
self.ready = threading.Condition()
self.client = gconf.client_get_default()
Change the gconf background key to the next image file in the list.
if self.index < (self.filelistlen - 1):
self.index += 1
self.index = 0
# Signal handler
def signal_handler (*args):
print "SIGNAL:", args
# walk_tree builds a list of files recursively in a directory structure.
def walk_tree(pathvar, d):
for name in os.listdir(d):
path = os.path.join(d, name)
pathvar.append(d + os.sep + name)
if __name__ == "__main__":
parser = OptionParser()
parser.add_option("-f", "--folder", dest="folder",
help="use wallpapers from FOLDER", metavar="FOLDER")
parser.add_option("-i", "--interval", type="int",
help="time interval in seconds", metavar="INTERVAL")
(options, args) = parser.parse_args()
if options.folder is None:
raise ValueError, "No valid folder specified"
if not os.path.isdir(options.folder):
raise ValueError, "The folder specified is not valid"
filelist = 
if not filelist:
raise ValueError, "Folder does not contain any image files"
background = GtkBackgroundSwitcher(filelist, options.interval)
Scott L. Balneaves | "Looking beyond the embers of bridges glowing behind us
Systems Department | To a glimpse of how green it was on the other side..."
Legal Aid Manitoba | -- Pink Floyd "High Hopes"
More information about the Winnipeg