7

I used gsettings set org.gnome.desktop.background picture-uri 'file://PathToImage' to set an image as a wallpaper as suggested in this answer. This does not do the job properly. For today's bing image, script here changes my background like this

Image of my desktop

This happens at random and sometimes it sets the wallpaper properly. Using GUI, setting the image as wallpaper by right-clicking on it works properly every time. Any possible causes of this problem?

Edit1: The download is perfectly fine. As I have mentioned, I can set the photo as wallpaper by right clicking the photo and chosing 'set as wallpaper' from the menu.

nitishch
  • 705

3 Answers3

5

You mentioned

The download is perfectly fine. As I have mentioned, I can set the photo as wallpaper by right clicking the photo and chosing 'set as wallpaper' from the menu.

As you can manually set the wallpaper the problem may be on the cache, which is generated before the downloader completely write the data on the file. So regenerating the cache in this kind of case is necessary.

So delete wallpaper cache rm /home/$USER/.cache/wallpaper/* . Add this code to end of the script after some sleep.

Let's do a test

  1. Find and open the image cache of current wallpaper from /home/$USER/.cache/wallpaper/
  2. Edit the image ( such as rotate clockwise. You can do it with the default imageg viwer (GNOME image viewer) using Ctrl+R (Or from edit -> rotate))
  3. Logout and login ubuntu (or restart)

That's it now you can see the changes on the desktop wallpaper (If you rotated the image, then the wallpaper will also get rotated)

totti
  • 6,818
  • 4
  • 39
  • 48
2

The following command is correct and should work in any circumstance:

gsettings set org.gnome.desktop.background picture-uri 'file://PathToImage'

So, I assume that the main reason why this thing is happen is because, as @d3vid noted in his comment: the download is failing (only downloading a partial file) or the background is being displayed before the download is complete.

To solve your problem be sure that you have a better internet connection when you run the script from your question or try to use curl instead of wget as in the script from my answer here.

Radu Rădeanu
  • 169,590
  • 1
    I don't think the problem is with the download, because, the photo is perfectly fine. – nitishch Jan 06 '14 at 16:17
  • 1
    @nitish If the photo is perfectly fine, then run again gsettings set org.gnome.desktop.background picture-uri 'file://PathToImage'. I'm sure that this time it will looks good on your desktop. The problem is that when you run that script, gsettings will probably start before wget to finish completely. And for this I suggested you to use curl instead of wget. Or add a line like sleep 5 after wget line which will make the script to wait 5 seconds before to run gsettings. – Radu Rădeanu Jan 06 '14 at 16:38
  • ..or combine wget and gsettings commands with && operator in the script like this: wget [wget_command_parameters] && gsettings [gsettings_command_parameters] – rusty Jan 06 '14 at 17:19
  • @RaduRădeanu, I tried that before. I put sleep 5 after wget.In fact, the image that I put on this question is produced by the script even with sleep 5 – nitishch Jan 07 '14 at 09:11
  • @nitish Then your internet connection is even worse; try with more: sleep 20, sleep 30, etc. – Radu Rădeanu Jan 09 '14 at 10:02
0

Maybe in the script, you should first download the new picture in a temporary file like:

wget --no-proxy --output-document=dwallpaper.temp (...)

And only after the wget command is done, do:

cp dwallpaper.temp dwallpaper

This way, gsettings is always pointing to a file 100% downloaded which may fix the issue you observed.

kos
  • 35,891
oscar
  • 1