【问题标题】:Running a bash script to change wallpapers via a cron job运行 bash 脚本以通过 cron 作业更改壁纸
【发布时间】: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 实施解决方案才能正确设置变量。有趣的是,当我直接从终端运行命令时,它 设置正确。

【问题讨论】:

    标签: bash cron


    【解决方案1】:

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

    做任何一个:

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

    或者:

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

    根据需要调整 DISPLAY 的值。

    【讨论】:

    • 嗨@xhienne,感谢您的回复。不幸的是,该解决方案似乎不起作用。 dconf-WARNING 错误消息被抑制,但壁纸仍然没有改变。是否有其他可能的值可以设置为 DISPLAY 以使其工作?
    • 这可能取决于您的授权。您的程序,作为一个 cron 作业,不绑定到您的 X 会话。一件强制性的事情是声明您的 DISPLAY(检查它是否与 echo $DISPLAY 相同),但另一件是拥有干扰您的显示的凭证。 cron 工作更难。我在 Mint 18 上测试了我的解决方案,但是在 YMMV 上。如果这不起作用,您可能更容易创建一个启动脚本。
    • 嗯 - 看起来我正在将 DISPLAY 设置为正确的值。有趣的是,当我从命令行运行脚本时,它会改变我的壁纸,但是当我在它前面加上sudo 时,它仍然会吐出上面的日志信息但不会改变壁纸......你可能是对的因为它与凭据有关。我会继续调查的。谢谢。
    • sudo 无济于事,重要的是正确访问您的 X 显示器。您可以在命令末尾附加&gt;&gt; /tmp/cron.log 2&gt;&amp;1,然后检查/tmp/cron.log,看看出了什么问题。
    猜你喜欢
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    相关资源
    最近更新 更多