使用 crontab 运行 gsettings

使用 crontab 运行 gsettings

我做了一个简单的Python脚本来改变我的壁纸(Ubuntu18.04)通过随机拍摄特定文件夹中的图像。我使用设定命令。手动运行它可以正常工作,但我想使用定时任务

我遇到了以下错误,因为 crontab 没有我手动运行脚本时拥有的所有变量:

(process:xxxxx): dconf-WARNING **: 15:07:01.547: failed to commit changes to dconf: Impossible de lancer automatiquement D-Bus sans $DISPLAY X11

所以我找到了一些解决方案,例如:

dbus_session_bus_address = 'PID=$(pgrep gnome-session | head -n1) && export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-) && '

command = dbus_session_bus_address + 'gsettings set org.gnome.desktop.background picture-uri ' + getRandomImage()

对于大多数人来说这似乎有效,但我有一个问题,我的 crontab 没有权限:

grep: /proc/$pid/environ: Permission denied
dconf-WARNING **: 15:19:01.514: failed to commit changes to dconf: The address indicated is empty 

因此我使用 运行脚本sudo crontab -e,但出现以下错误:

dconf-WARNING **: 15:22:01.807: failed to commit changes to dconf: Connection is closed

另外,我更喜欢使用我的用户 crontab。最好的方法是什么?

答案1

感谢steeldriver的评论,我找到了解决方案!

实际上,该pgrep gnome-session命令给了我 2 个 PID。
当我 时ls -l /proc/,我可以看到第一个 pid 目录属于孕期(Gnome 显示管理器),第二个属于我的用户。

因此在我的脚本中,我只需替换PID=$(pgrep gnome-session | head -n1)即可PID=$(pgrep gnome-session | tail -n1)使用与我的用户关联的 PID。

我不知道这个解决方案(使用tail -n1)是否适用于所有人。我认为最好的办法是运行命令pgrep gnome-session,查看 pid 文件夹的所有者,然后选择属于我们用户的文件夹。

希望它会有用!

相关内容