我编写了一个脚本来更改我的桌面背景。我希望此脚本在 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
在您的主目录中创建一个文件夹,并在其中创建两个子文件夹etc
和spool
。
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'"
请参阅我的回答中的解释这里。