【发布时间】:2017-09-19 22:15:20
【问题描述】:
我构建了一个 bash 脚本,它使用 Dropbox 文件夹中包含所有壁纸图像的目录来简单地更改我的壁纸。它看起来像这样:
#!/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 实施解决方案才能正确设置变量。有趣的是,当我直接从终端运行命令时,它 设置正确。
【问题讨论】: