什么是XDG_SESSION_COOKIE环境variables?

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

为了使它工作,我必须在login时导出相关的环境variables,以便在cron运行时finddbus会话地址。

出于好奇,我想知道cron 看到什么环境,结果我所有的是HOMELOGNAMEPATHSHELLCWD和这个新的对我的XDG_SESSION_COOKIE 。 这看起来好奇,一些googlings已经抛出了一些错误或其他function要求,但没有告诉我它是什么。

我的直觉是,这个variables可以用来find所有的东西,我不得不导出到我的源文件,在cron作业运行之前。

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

谢谢大家

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

阅读这个 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会话地址。