当从 cron 调用时,如何让 gvfs-info 输出文件元数据?

当从 cron 调用时,如何让 gvfs-info 输出文件元数据?

我遇到了一个奇怪的问题,希望有人能给我一些见解。有点不知所措。

在 Linux Mint 上使用 Nemo 时,它有时会崩溃,并产生令人讨厌的副作用,即移动一堆桌面图标。我想我只需编写一个快速脚本,每天将所有图标的位置转储到文本文件中一次,然后再编写另一个脚本将它们重新定位到它们应该在的位置。

当我手动运行它时,它运行完美,但通过 cron 运行时则不行。

我发现问题出在 gvfs-info 上。基本上,我使用以下命令:

gvfs-info -a 'metadata::nemo-icon-position' /path/to/file

其结果为:

metadata::nemo-icon-position: 220,682

在输出中。

但是,gvfs-info 需要与 dbus-daemon 通信以获取元数据,因为它实际上存储在 ~/.local/share/gvfs-metadata/ 中。当它从 cron(或 sudo 或 ssh)生成时,它无法访问 dbus-daemon — 我发现了一个事实这里这里提出了一个可能的解决方案。

按照该解决方案,我可以从终端成功执行:

dbus-launch --exit-with-session /path/to/myscript.sh

并且它按预期工作。但是,它仍然会产生相同的输出,即使没有元数据。我尝试了很多次调用 dbus-launch 的排列组合,并与“su user”组合以确保它确实以我的用户身份运行,但我想我只是不太明白这里发生了什么。

有人有什么想法吗?

答案1

@steeldriver 的评论正是我需要的(谢谢!)。

我从如何通过远程 shell 更改 Gsettings这正是我所需要的!

PID=$(pidof -s nemo)
QUERY_ENVIRON="$(tr '\0' '\n' < /proc/${PID}/environ | grep "DBUS_SESSION_BUS_ADDRESS" | cut -d "=" -f 2-)"
export DBUS_SESSION_BUS_ADDRESS="${QUERY_ENVIRON}"

我使用“nemo”,因为我知道它会在我的桌面环境中运行。

相关内容