我使用包含所有壁纸图片的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实现解决方案才能正确设置变量。有趣的是,当我直接从终端运行命令时, 设置正确。
答案 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的值。