Was ist das Problem mit diesem Skript zum Ändern des Hintergrundbilds?

Was ist das Problem mit diesem Skript zum Ändern des Hintergrundbilds?

Ich bin ein völliger Neuling in der Linux-Welt und möchte daher um Verzeihung für alle dummen oder zu einfachen Dinge bitten, die ich jetzt frage.

Ich habe Elementary OS erst gestern von deren Website installiert. Ich wollte mein Hintergrundbild automatisch mit dem Hintergrundbild von Bing ändern, also habe ich bei Google ein Skript gefunden, das das Bild von den Servern von Bing herunterlädt ... Das ist gut, es funktioniert (ich sehe die heruntergeladenen Bilder im Ordner).

Das Problem ist, dass das Hintergrundbild nicht immer geändert wird. Manchmal ja, manchmal nicht. Ich verstehe nicht wirklich, wann und warum. Es scheint, dass es passiert, wenn das heruntergeladene Bild nicht neu ist. Entschuldigen Sie mein schlechtes Englisch, was ich meine, ist, dass ich dieses Skript beim Booten mit dem mit Elementary OS mitgelieferten Tool starte und wenn ich meinen PC >1 Mal pro Tag einschalte (und Bings Bild einmal pro Tag wechselt), bekomme ich die anderen Male einfach alles schwarz als Hintergrundbild. Hier ist der Teil des Codes, der das Hintergrundbild ändert, vielleicht liegt dort das Problem:

#!/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

Antwort1

Anstatt damit herumzuspielen, dconfkönnen Sie feh --bg-maxdas Hintergrundbild ziemlich einfach mithilfe von einstellen.

$ feh --bg-max <image>

Ich verwende diese Art von Skript, um das Hintergrundbild beispielsweise alle 15 Minuten zu wechseln:

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

Das Obige nutzt auch den wenig genutzten, aber praktischen shufBefehl zum zufälligen Anordnen einer Dateiliste.

verwandte Informationen