使用 cron 中的 gsettings 时背景没有改变

使用 cron 中的 gsettings 时背景没有改变

我正在尝试使用 Indrajith Indraprastham 建议的脚本将我的壁纸更改为随机图像: 如何在 Unity 中从命令行更改桌面背景?

当我从终端窗口运行脚本时,bg 变化很好,但是当它从 cron 运行时,我收到此错误:

(进程:21901):dconf-警告**:无法将更改提交到 dconf:生成命令行“dbus-launch --autolaunch=00216c114dcf433c9bb9009985d607d6 --binary-syntax --close-stderr”时出错:子进程退出,代码为 1

我将非常感激您的任何建议。

答案1

从 cron 编辑 gsettings;缺少环境变量

如果您从自己的环境(例如从终端窗口或从启动应用程序)运行脚本,则会设置许多环境变量。cron但是,使用一组有限的环境变量运行脚本。

gsettings要从 成功编辑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-)

DIR="/home/indra/Pictures/wallpapers"
PIC=$(ls $DIR/* | shuf -n1)
gsettings set org.gnome.desktop.background picture-uri "file://$PIC"

有关的:每 5 分钟运行一次 .sh

答案2

答案来自@jacob-vlijm$(id --real --user)由于一些 shell 脚本问题(该命令返回多行,并且该grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-命令有一个空字节错误),它对我来说不起作用。

这是一个可以正常工作的方法(至少对我来说):

#!/bin/bash

REAL_UID=$(id --real --user)
PID=$(pgrep --euid $REAL_UID gnome-session | head -n 1)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2- | sed -e "s/\x0//g")

DIR="/home/indra/Pictures/wallpapers"
PIC=$(ls $DIR/* | shuf -n1)
gsettings set org.gnome.desktop.background picture-uri "file://$PIC"

相关内容