Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the XDG_SESSION_COOKIE environment variable for?

Tags:

linux

bash

cron

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

like image 750
Altreus Avatar asked Mar 10 '09 22:03

Altreus


People also ask

What is set environment variable?

The SetEnvironmentVariable(String, String, EnvironmentVariableTarget) method lets you define an environment variable that is available to the current process (the Process value). Environment variables that are unique to the current process environment block persist only until the process ends.

What are Linux environment variables?

Linux environment variables are dynamic variables used by a shell and its child processes. Environment variables define a variety of aspects related to how a Linux system works. For example, a user's default shell is defined in the SHELL variable.

How do I get a list of environment variables in Linux?

Under bash shell: To list all the environment variables, use the command " env " (or " printenv "). You could also use " set " to list all the variables, including all local variables.

What are the commands that list the value of a specific variable?

We can use the env, printenv, declare, or set command to list all variables in the system.


1 Answers

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.

like image 170
Johannes Schaub - litb Avatar answered Sep 22 '22 16:09

Johannes Schaub - litb