运行bash脚本以通过cron作业更改壁纸

时间:2017-09-18 00:30:29

标签: bash cron

我使用包含所有壁纸图片的Dropbox文件夹中的目录,构建了一个只更改壁纸的bash脚本。它看起来像这样:

#!/bin/bash

# Select & display a random wallpaper from ~/Dropbox/wallpapers

echo "Changing wallpaper..."

# Get number of files (minus 1) in wallpapers
COUNT="$(ls -l ~/Dropbox/wallpapers | grep -v ^d | wc -l )"
ACTUAL_COUNT=$(($COUNT+1))
echo "Wallpaper count: ${ACTUAL_COUNT}"

# Select random number from 0 to COUNT
RAND=$(( ( RANDOM % $COUNT ) ))
RAND_PLUS_ONE=$(($RAND+1))
echo "Selecting wallpaper ${RAND_PLUS_ONE}"

# Get file path of random wallpaper
WALLPAPERS=(~/Dropbox/wallpapers/*)
WP_PATH=${WALLPAPERS[$RAND]}
echo "Wallpaper file path: ${WP_PATH}"

# Set wallpaper
echo "Rendering ${WP_PATH}"
eval "gsettings set org.gnome.desktop.background picture-uri 'file:///${WP_PATH}'"

基本上,我在本地目录~/Dropbox/wallpapers中选择随机图像并使用gsettings呈现它。

我使这个脚本可执行并从控制台运行了几次,这是好的措施。有用。我将此脚本命名为wallpaper_changer.sh并将其添加到~/Dropbox/programming/scripts

现在,我尝试添加一个每隔几个小时执行一次壁纸更换器脚本的cron作业。为了测试它,我决定暂时每分钟运行一次脚本。所以我运行了crontab -e并添加了以下内容:

MAILTO="myemail@example.com"
* * * * * /home/<user>/Dropbox/programming/scripts/wallpaper_changer.sh

不幸的是,这似乎不起作用。我跟踪发送到我的电子邮件的日志,我将其作为输出:

Changing wallpaper...
Wallpaper count: 92
Selecting wallpaper 86
Wallpaper file path: /home/<user>/Dropbox/wallpapers/witcher.png
Rendering /home/<user>/Dropbox/wallpapers/witcher.png

(process:29136): dconf-WARNING **: failed to commit changes to dconf: Cannot autolaunch D-Bus without X11 $DISPLAY 

所以我的脚本正在执行,但壁纸没有被更改。我尝试按照this post中的说明解决dconf-WARNING,但无济于事。

以前有人遇到过这个吗?我在这里做错了吗?任何帮助是极大的赞赏。

解决方案

事实证明,在cron作业的上下文中运行脚本时,DBUS_SESSION_BUS_ADDRESS环境变量未正确设置。我必须从this Ask Ubuntu post实现解决方案才能正确设置变量。有趣的是,当我直接从终端运行命令时, 设置正确。

1 个答案:

答案 0 :(得分:1)

您需要设置DISPLAY环境变量以与X环境进行交互。

要么:

* * * * * DISPLAY=:0 /home/<user>/Dropbox/programming/scripts/wallpaper_changer.sh

或者:

DISPLAY=:0
* * * * * /home/<user>/Dropbox/programming/scripts/wallpaper_changer.sh

如果需要,调整DISPLAY的值。