什么是XDG_SESSION_COOKIE环境变量?

时间:2009-03-10 22:21:35

标签: linux bash cron

我最近一直在与crontab战斗,因为在Intrepid中gconftool使用dbus后端,这意味着当从crontab使用它时它不起作用。

为了使其工作,我必须在登录时导出相关的环境变量,以便在cron运行时找到dbus会话地址。

出于好奇,我想知道cron 可以看到什么环境,结果证明我拥有的是HOMELOGNAMEPATH,{{1 {},SHELL和我这个新的CWD。这看起来好奇,几个谷歌搜索引发了一些错误或涉及它的其他功能请求,但没有告诉我它做了什么。

我的直觉是,这个变量可用于查找我必须导出到cron作业运行之前我所源文件的所有内容。

因此,我的问题是a)我可以吗? b)如果是这样,怎么样?和c)它做了什么(或其他)?

全部谢谢

1 个答案:

答案 0 :(得分:6)

这非常有趣。我发现是显示管理器设置了一个cookie。那个可用于注册属于“会话”的进程,这些进程由名为ConsoleKit的守护进程管理。这是为了支持快速用户切换。我的KDE4.2.1系统显然也支持它。

阅读this fedora wiki条目。

因此,此环境变量与DBUS_SESSION_BUS_ADDRESS类似,可以访问某个实体(在XDG_SESSION_COOKIE的情况下,由ConsoleKit管理的登录会话)。例如,如果有适当的环境变量,您可以向经理询问您当前的会话:

$ dbus-send --print-reply --system --type=method_call \
    --dest=org.freedesktop.ConsoleKit \
    /org/freedesktop/ConsoleKit/Manager \
    org.freedesktop.ConsoleKit.Manager.GetCurrentSession

method return sender=:1.1 -> dest=:1.34 reply_serial=2
   object path "/org/freedesktop/ConsoleKit/Session1"
$

Manager还支持查询某个进程所属的会话

$ [...].Manager.GetSessionForUnixProcess uint32:4494

method return sender=:1.1 -> dest=:1.42 reply_serial=2
   object path "/org/freedesktop/ConsoleKit/Session1"

但是,它不会列出或以某种方式包含与某些cron作业相关的变量。但是,dbus-launch的文档说libdbus会自动找到正确的DBUS总线地址。例如,文件存储在/home/js/.dbus/session-bus中,其中包含正确的当前dbus会话地址。