壁紙を変更するこのスクリプトの問題点は何ですか?

壁紙を変更するこのスクリプトの問題点は何ですか?

私は Linux の世界に非常に不慣れなので、これから尋ねるすべての愚かなことや単純すぎることについてはお許しください。

昨日、Elementary OS を Web サイトからインストールしました。壁紙を Bing の壁紙に自動的に変更したかったので、Google で Bing のサーバーから画像をダウンロードするスクリプトを見つけました... うまくいきました。(フォルダー内にダウンロードされた画像が表示されます)。

問題は、壁紙が常に変更されるわけではないことです。変更されるときもあれば、変更されないときもあります。いつ、なぜ変更されるのか、よくわかりません。ダウンロードした画像が新しくない場合に発生するようです。下手な英語で申し訳ありませんが、私が言いたいのは、Elementary OS に付属のツールを使用して、このスクリプトを起動時に開始するように設定し、1 日に 1 回以上 PC をオンにすると (Bing の画像は 1 日に 1 回変更されます)、他のときは壁紙がすべて黒になります。壁紙を変更するコードの部分を以下に示します。おそらく、ここに問題があるのでしょう。

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

答え1

面倒な作業を行うのではなく、背景画像をかなり簡単に設定dconfできます。feh --bg-max

$ feh --bg-max <image>

背景画像を 15 分ごとに回転させるには、次のタイプのスクリプトを使用します。たとえば、次のようになります。

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

上記では、shufファイルのリストをランダム化するために、あまり使用されていないが便利なコマンドも使用しています。

関連情報