2009-03-10 17 views
6

Recentemente ho litigato con crontab perché in Intrepid il gconftool usa un backend dbus, e questo significa che se usato da crontab non funziona.Per che cosa è la variabile di ambiente XDG_SESSION_COOKIE?

Per farlo funzionare, ho dovuto esportare le variabili di ambiente pertinenti quando effettuo il login in modo che trovi l'indirizzo della sessione dbus quando viene eseguito cron.

Per curiosità mi sono chiesto cosa l'ambiente cron potrebbe vedere e si scopre tutto quello che ho è HOME, LOGNAME, PATH, SHELL, CWD e questo nuovo su di me, XDG_SESSION_COOKIE. Questo sembra curioso e diversi googling hanno sollevato una serie di bug o altre richieste di funzionalità che lo coinvolgono, ma nulla che mi dica cosa faccia.

Il mio istinto è che questa variabile può essere utilizzata per trovare tutte le cose che ho dovuto esportare nel file che io fonte prima dell'esecuzione del cron job.

Le mie domande, quindi, sono a) posso? b) se sì, come? e c) che (altro) fa?

Grazie a tutti

risposta

6

Questo è molto interessante. Ho scoperto che è il display manager che imposta un cookie. Quella può essere utilizzata per registrare i processi in modo che appartengano a una "sessione" gestita da un demone chiamato ConsoleKit. Questo è per supportare la commutazione rapida degli utenti. Anche il mio sistema KDE4.2.1 lo supporta.

Leggi this voce wiki fedora.

Quindi questa variabile di ambiente è come DBUS_SESSION_BUS_ADDRESS per consentire l'accesso ad alcune entità (nel caso di XDG_SESSION_COOKIE una sessione di accesso gestita da ConsoleKit). Per esempio avere quella variabile ambientale in atto, si può chiedere al gestore per la sessione corrente:

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

Il Manager supporta anche l'esecuzione di query per la sessione di qualche processo appartiene al

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

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

Tuttavia, non è così elencare o in qualche modo contenere variabili correlate ad alcuni lavori cron. Tuttavia, la documentazione di dbus-launch dice che libdbus troverà automaticamente l'indirizzo del bus DBUS corretto. Ad esempio, i file vengono archiviati in /home/js/.dbus/session-bus che contengono gli indirizzi di sessione dbus correnti corretti.

Problemi correlati