Webページからランダムな壁紙をダウンロードし、5時間ごとに背景として設定するシェルスクリプトを作成しました。スクリプトは次のとおりです。
#!/bin/bash
countervar=1;
finish=0;
cd /home/guinness/.rwallpaper/
if [ -f counter ]
then
countervar=`cat counter`
fi
for (( i=$countervar; c<=2000000; i++ ))
do
echo $i > "counter"
if [ ! -f wallpaper-$i.jpg ]
then
wget "http://wallpapers.wallbase.cc/rozne/wallpaper-$i.jpg"
if [ -f wallpaper-$i.jpg ]
then
gsettings set org.gnome.desktop.background picture-uri "file:///home/guinness/.rwallpaper/wallpaper-$i.jpg"
exit
fi
fi
done
このスクリプトを実行すると、魅力のように機能します。 cronを使用して、5時間ごとにこれを実行します。問題は、5時間ごとに実行され、次の画像が正常にダウンロードされるが、壁紙として設定されないことです。誰が問題になるのか教えてもらえますか?
これは、cronが使用する環境変数のセットが非常に制限されているためです。これがcronジョブとして設定されている場合、質問からのスクリプトを正しい方法で実行する責任がある唯一の環境変数はDBUS_SESSION_BUS_ADDRESS
です。
そのため、スクリプトのDBUS_SESSION_BUS_ADDRESS
環境変数をエクスポートする必要があります。私の答えの詳細な説明を参照してください こちら 。
最終的に、スクリプトは次のようになります。
#!/bin/bash
PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
countervar=1;
finish=0;
cd /home/guinness/.rwallpaper/
if [ -f counter ]
then
countervar=`cat counter`
fi
for (( i=$countervar; c<=2000000; i++ ))
do
echo $i > "counter"
if [ ! -f wallpaper-$i.jpg ]
then
wget "http://wallpapers.wallbase.cc/rozne/wallpaper-$i.jpg"
if [ -f wallpaper-$i.jpg ]
then
gsettings set org.gnome.desktop.background picture-uri "file:///home/guinness/.rwallpaper/wallpaper-$i.jpg"
exit
fi
fi
done
直面している問題は、スクリプトのバックグラウンド切り替え部分がXセッションの環境変数に依存していることです。 Cronは環境変数を設定しないため、スクリプトのこの部分が破損します。
この問題を回避するには、約5時間のスリープでスクリプトをwhileループに入れてから、/ etc/X11/Xsession.d/my_scriptまたは〜/ .xprofileなどの場所にスクリプトを呼び出します。