Я написал сценарий оболочки, который загружает случайные обои с веб-страницы и устанавливает их в качестве фона каждые 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 не устанавливает никаких переменных окружения, поэтому это нарушит эту часть скрипта.
Чтобы обойти эту проблему, вы можете поместить скрипт в цикл while со сном около пяти часов, а затем позвонить и поместить скрипт в такое место, как /etc/X11/Xsession.d/my_script или ~ / .xprofile.