gsettings 和 anacron

gsettings 和 anacron

我编写了一个脚本来更改我的桌面背景。我希望此脚本在 anacron 上运行,因为我经常在晚上关闭计算机。我测试了脚本的部分内容,我认为问题出在这行:

DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-uri '"file://'$wallPath'"'

$wallPath是壁纸路径)

它可以切换壁纸,但 anacron 运行时却不会切换。我认为这是因为 anacron 以 root 身份运行(我还检查了 root 和我的用户的 dconf 以检查这一点)。所以我想出了一种以特定用户身份运行 anacron 的方法。但这种方法行不通。

有人能帮我找出以用户身份运行 gsettings 的方法吗?我试过 su (用户名) -c 'sh run/this/script',但无济于事。我发现了一些关于导出一些 dbus 环境变量的内容,但我很难理解。

答案1

作为 root,简单操作即可。sudo -u <username> <command>

答案2

您可以设置一个单独的 anacron 实例以在用户模式下运行。为此,.anacron在您的主目录中创建一个文件夹,并在其中创建两个子文件夹etcspool

anacrontab然后在新创建的文件夹中创建一个新文件夹,~/.anacron/etc其中包含以下内容:

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

1   10    wallpaperchanger script.sh

其中 script.sh 是脚本的路径(或一行代码,由您选择)。根据需要配置间隔和延迟,并将文件另存为anacrontab

然后将以下行添加到您的~/.profile文件中:

/usr/sbin/anacron -s -t ${HOME}/.anacron/etc/anacrontab -S ${HOME}/.anacron/spool

Anacron 应该在下次登录时启动并运行。

笔记:确保$wallPath文件路径合理,因为您没有考虑脚本中的空格和特殊字符。

答案3

而不是使用:

DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-uri '"file://'$wallPath'"

尝试使用:

PID=$(pgrep gnome-session)  # instead of 'gnome-session' it can be also used 'noutilus' or 'compiz' or the name of a process of a graphical program about that you are sure that is running after you log in the X session
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
gsettings set org.gnome.desktop.background picture-uri '"file://'$wallPath'"

请参阅我的回答中的解释这里

相关内容