使用cron的gsettings不会更改背景


11

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

当我从终端窗口运行脚本时,bg改变得很好,但是当它从cron运行时,我收到了以下错误消息:

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

我将不胜感激任何建议。


1
@Merri除了那里的答案不能解决OP的问题(顺便说一句不会成为骗子)之外,这会是一个骗子吗???相同的错误并不意味着它是相同的问题。
Jacob Vlijm '16

Answers:


16

从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


@Shaun不客气!很高兴:)
雅各布·弗利姆

1
我正在薄荷肉桂棒上尝试这种做法。当我直接从cli运行此命令时,出现“ dconf-WARNING *:无法将更改提交给dconf:给定的地址为空”。它曾经在cli之前工作,没有PID和DBUS_SESSION_。(但不是来自cron)
donquixote

1
@donquixote尝试PID=$(pgrep -f 'gnome-session' | head -n1)
贾尼斯·埃默里斯(JānisElmeris)'11

您可以替换DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ)因为grep也会获取变量名称。来源
wjandrea

1
pgrep gnome-session如果有多个用户登录到系统(每个用户都运行gnome-session),则可能返回多个pid。也许EUID=$(id --real --user)并且PID=$(pgrep --euid $EUID gnome-session)将是仅获取与当前用户的gnome会话关联的PID的一种方式。
unutbu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.