2009-03-10 10 views
6

Ostatnio walczyłem z crontabem, ponieważ w Intrepid gconftool używa backendu dbus, a to oznacza, że ​​gdy jest używany z crontab, to nie działa.Do czego służy zmienna środowiskowa XDG_SESSION_COOKIE?

Aby to działało, musiałem wyeksportować odpowiednie zmienne środowiskowe po zalogowaniu, aby znaleźć adres sesji dbus po uruchomieniu crona.

Z ciekawości Zastanawiałam się, co środowisko cron mógłby zobaczyć i okazuje się, mam tylko HOME, LOGNAME, PATH, SHELL, CWD i ten nowy jeden na mnie, XDG_SESSION_COOKIE. Wygląda to ciekawie, a kilka "googlingów" wygenerowało wiele błędów lub innych żądań dotyczących funkcji, ale nie mówi mi nic, co robi.

Mój instynkt polega na tym, że tej zmiennej można użyć do znalezienia wszystkich rzeczy, które musiałem wyeksportować do pliku, który pozyskuję przed uruchomieniem zadania cron.

Moje pytania to: a) czy mogę? b) jeśli tak, to w jaki sposób? i c) co (jeszcze) robi?

Dzięki wszystkim

Odpowiedz

6

To jest bardzo interesujące. Dowiedziałem się, że to menedżer wyświetlania ustawia plik cookie. Tego można użyć do zarejestrowania procesów należących do "sesji" zarządzanej przez demona o nazwie ConsoleKit. To ma na celu wsparcie szybkiego przełączania użytkowników. Mój system KDE4.2.1 najwyraźniej też to wspiera.

Przeczytaj this wpis wiki fedory.

Ta zmienna środowiskowa jest podobna do DBUS_SESSION_BUS_ADDRESS, aby dać dostęp do jakiejś encji (w przypadku XDG_SESSION_COOKIE sesji logowania zarządzanej przez ConsoleKit). Na przykład mającego tę zmienną środowiskową w miejscu, można zwrócić się do kierownika dla bieżącej sesji:

$ 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 obsługuje również zapytań do sesji jakiś proces należy do

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

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

Jednak nie robi lista lub w jakiś sposób zawiera zmienne, które są powiązane z pewną pozycją cron. Jednak dokumentacja dbus-launch mówi, że libdbus automatycznie znajdzie właściwy adres magistrali DBUS. Na przykład pliki są przechowywane w /home/js/.dbus/session-bus, które zawierają poprawne adresy bieżących sesji dbus.