我做了一个简单的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 文件夹的所有者,然后选择属于我们用户的文件夹。
希望它会有用!