tags:

views:

817

answers:

1

Hi all.

I've been fighting with crontab recently because in Intrepid the gconftool uses a dbus backend, and that means that when used from crontab it doesn't work.

To make it work I have had to export the relevant environment variables when I log in so that it finds the dbus session address when the cron comes to run.

Out of curiosity I wondered what environment the cron could see and it turns out all I have is HOME, LOGNAME, PATH, SHELL, CWD and this new one on me, XDG_SESSION_COOKIE. This looks curious and several googlings have thrown up a number of bugs or other feature requests involving it but nothing that tells me what it does.

My instinct is that this variable can be used to find all the stuff that I've had to export to the file that I source before the cron job runs.

My questions, therefore, are a) can I? b) if so, how? and c) what (else) does it do?

Thanks all

+1  A: 

This is very interesting. I found out it is the display manager setting a cookie. That one can be used to register processes to belong to a "session" which are managed by a daemon called ConsoleKit. That is to support fast user switching. My KDE4.2.1 system apparently supports it too.

Read this fedora wiki entry.

So this environment variable is like DBUS_SESSION_BUS_ADDRESS to give access to some entity (in the case of XDG_SESSION_COOKIE a login-session managed by ConsoleKit). For example having that environment variable in place, you can ask the manager for your current session:

$ 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"
$

The Manager also supports querying for the session some process belongs to

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

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

However, it does not list or somehow contain variables that is related to some cron job. However, documentation of dbus-launch says that libdbus will automatically find the right DBUS bus address. For example, files are stored in /home/js/.dbus/session-bus that contain the correct current dbus session addresses.

Johannes Schaub - litb