2009-03-10 18 views
6

He estado peleando con crontab recientemente porque en Intrepid el gconftool usa un backend de dbus, y eso significa que cuando se usa desde crontab no funciona.¿Para qué es la variable de entorno XDG_SESSION_COOKIE?

Para que funcione, he tenido que exportar las variables de entorno relevantes cuando inicio sesión para que encuentre la dirección de la sesión dbus cuando se ejecuta el cron.

Por curiosidad me preguntaron qué entorno del cron podía ver y resulta que todo lo que tengo es HOME, LOGNAME, PATH, SHELL, CWD y esto nuevo para mí, XDG_SESSION_COOKIE. Esto parece curioso y varios juegos en línea han arrojado una serie de errores u otras solicitudes de características que lo involucran, pero nada que me diga lo que hace.

Mi instinto es que esta variable se puede utilizar para encontrar todo lo que he tenido que exportar al archivo que obtengo antes de que se ejecute la tarea cron.

Mis preguntas, por lo tanto, son a) ¿puedo? b) Si es así, ¿cómo? yc) qué (más) hace?

Gracias a todos

Respuesta

6

Esto es muy interesante. Descubrí que es el administrador de pantalla configurando una cookie. Ese se puede usar para registrar procesos para pertenecer a una "sesión" que son gestionados por un daemon llamado ConsoleKit. Eso es para apoyar el cambio rápido de usuario. Mi sistema KDE4.2.1 aparentemente también lo admite.

Leer this fedora entrada de la wiki.

Así que esta variable de entorno es como DBUS_SESSION_BUS_ADDRESS para dar acceso a alguna entidad (en el caso de XDG_SESSION_COOKIE una sesión de inicio de sesión administrada por ConsoleKit). Por ejemplo tener esa variable de entorno en su lugar, se puede pedir al administrador de la sesión actual:

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

El Manager también es compatible con las consultas a la sesión de algún proceso pertenece a

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

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

Sin embargo, no lo hace enumere o de alguna manera contenga variables relacionadas con algún trabajo cron. Sin embargo, la documentación de dbus-launch dice que libdbus buscará automáticamente la dirección de bus DBUS correcta. Por ejemplo, los archivos se almacenan en /home/js/.dbus/session-bus que contienen las direcciones actuales correctas de la sesión dbus.

Cuestiones relacionadas