¿Cuál es el problema con este script para cambiar el fondo de pantalla?

¿Cuál es el problema con este script para cambiar el fondo de pantalla?

Soy muy nuevo en el mundo de Linux, así que pediría perdón por cada cosa estúpida o demasiado simple que pregunte ahora.

Instalé Elementary OS desde su sitio web ayer. Quería cambiar mi fondo de pantalla automáticamente con el fondo de pantalla de Bing, así que encontré en Google un script que descarga la imagen desde los servidores de Bing... Eso es bueno, funciona (veo las imágenes descargadas dentro de la carpeta).

El problema es que no siempre cambia el fondo de pantalla. A veces sí, a veces no. Realmente no entiendo cuándo y por qué. Parece que sucede cuando la imagen descargada no es nueva. Perdón por mi mal inglés, lo que quiero decir es que puse este script al arrancar con la herramienta proporcionada con Elementary OS, y si enciendo mi PC >1 veces al día (y la imagen de Bing cambia una vez al día) otras veces me sale todo negro como fondo de pantalla. Aquí está la parte del código que cambia el fondo de pantalla, tal vez esté ahí el problema:

#!/bin/bash

# $bing is needed to form the fully qualified URL for
# the Bing pic of the day
bing="www.bing.com"

# $xmlURL is needed to get the xml data from which
# the relative URL for the Bing pic of the day is extracted
#
# The mkt parameter determines which Bing market you would like to
# obtain your images from.
# Valid values are: en-US, zh-CN, ja-JP, en-AU, en-UK, de-DE, en-NZ, en-CA.
#
# The idx parameter determines where to start from. 0 is the current day,
# 1 the previous day, etc.
xmlURL="http://www.bing.com/HPImageArchive.aspx?format=xml&idx=1&n=1&mkt=en-US"

# $saveDir is used to set the location where Bing pics of the day
# are stored.  $HOME holds the path of the current user's home directory
saveDir=$HOME'/Pictures/BingDesktopImages/'

# Create saveDir if it does not already exist
mkdir -p $saveDir

# Set picture options
# Valid options are: none,wallpaper,centered,scaled,stretched,zoom,spanned
picOpts="zoom"

# The desired Bing picture resolution to download
# Valid options: "_1024x768" "_1280x720" "_1366x768" "_1920x1200"
desiredPicRes="_1366x768"

# The file extension for the Bing pic
picExt=".jpg"

# Extract the relative URL of the Bing pic of the day from
# the XML data retrieved from xmlURL, form the fully qualified
# URL for the pic of the day, and store it in $picURL

# Form the URL for the desired pic resolution
desiredPicURL=$bing$(echo $(curl -s $xmlURL) | grep -oP "<urlBase>(.*)</urlBase>" | cut -d ">" -f 2 | cut -d "<" -f 1)$desiredPicRes$picExt

# Form the URL for the default pic resolution
defaultPicURL=$bing$(echo $(curl -s $xmlURL) | grep -oP "<url>(.*)</url>" | cut -d ">" -f 2 | cut -d "<" -f 1)

# $picName contains the filename of the Bing pic of the day

# Attempt to download the desired image resolution. If it doesn't
# exist then download the default image resolution
if wget --quiet --spider "$desiredPicURL"
then

    # Set picName to the desired picName
    picName=${desiredPicURL##*/}
    # Download the Bing pic of the day at desired resolution
    curl -s -o $saveDir$picName $desiredPicURL
else
    # Set picName to the default picName
    picName=${defaultPicURL##*/}
    # Download the Bing pic of the day at default resolution
    curl -s -o $saveDir$picName $defaultPicURL
fi

# Set the GNOME3 wallpaper
DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-uri '"file://'$saveDir$picName'"'

# Set the GNOME 3 wallpaper picture options
DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-options $picOpts

 # Remove pictures older than 30 days
find $saveDir -atime 30 -delete

# Exit the script
exit

Respuesta1

En lugar de molestarte, dconfpuedes usar feh --bg-maxpara configurar la imagen de fondo con bastante facilidad.

$ feh --bg-max <image>

Utilizo este tipo de script para rotar la imagen de fondo cada 15 minutos, por ejemplo:

while true; do
  find ~/.wallpaper -type f \( -name '*.jpg' -o -name '*.png' \) -print0 |
    shuf -n1 -z | xargs -0 feh --bg-max
    sleep 15m
done

Lo anterior también hace uso del shufcomando poco utilizado pero útil para aleatorizar una lista de archivos.

información relacionada