I want to change my wallpaper in Ubuntu 11.10 (with Unity) in a small Python script.
I found the possibility to change it via the gconf-editor
in /desktop/gnome/background/picture_filename
. With python-gconf
, I'm able to change the necessary values.
Apparently, the gconf string is not read out. If I change it (either via a script or via gconf-editor
), the wallpaper remains and in the menu of "Change wallpaper", the old wallpaper is shown.
How am I able to change the wallpaper for Unity via a Python script?
The following code does work.
#!/usr/bin/python
# -*- coding: utf-8 -*-
from gi.repository import Gio
class BackgroundChanger():
SCHEMA = 'org.gnome.desktop.background'
KEY = 'picture-uri'
def change_background(self, filename):
gsettings = Gio.Settings.new(self.SCHEMA)
print(gsettings.get_string(self.KEY))
print(gsettings.set_string(self.KEY, "file://" + filename))
gsettings.apply()
print(gsettings.get_string(self.KEY))
if __name__ == "__main__":
BackgroundChanger().change_background("/home/user/existing.jpg")
Unfortunately, gconf doesn't really clean up after itself very well. That's and old setting. With GNOME3 and Unity in 11.10, the desktop background setting is now stored in dconf. With
dconf-editor
you can find the setting atorg.gnome.desktop.background.picture-uri
Here's a quick example showing how to change the background with python, GTK, and GObject Introspection:
Here are two helpful blog posts on GSettings and Python:
http://www.micahcarrick.com/gsettings-python-gnome-3.html
http://www.lucidelectricdreams.com/2011/06/reading-and-writing-gsettings-from.html
Here you go
Maybe not the best but the easiest solution: