XDG_SESSION_COOKIE环境变量是用来做什么的?

6
最近我一直在与crontab打交道,因为在Intrepid中,gconftool使用的是dbus后端,这意味着当从crontab使用时它不起作用。
为了使其工作,我必须在登录时导出相关环境变量,以便当cron运行时找到dbus会话地址。
出于好奇心,我想知道cron能看到哪些环境变量,结果发现只有HOME、LOGNAME、PATH、SHELL、CWD和这个新的XDG_SESSION_COOKIE。这看起来很奇怪,多次谷歌搜索发现有许多关于它的错误或其他功能请求,但没有告诉我它做了什么的内容。
我的直觉是这个变量可以用来找到我必须在cron任务运行之前导出到文件中的所有东西。
因此,我的问题是:a)我能吗?b)如果可以,如何实现?c)它还能做什么?
谢谢大家。
1个回答

6
这非常有趣。我发现它是显示管理器设置一个cookie。可以使用该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.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会话地址。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接