Для чего нужна переменная окружения XDG_SESSION_COOKIE? - PullRequest
6 голосов
/ 11 марта 2009

Я недавно боролся с crontab, потому что в Intrepid gconftool использует бэкэнд dbus, а это значит, что при использовании из crontab он не работает.

Чтобы это работало, мне приходилось экспортировать соответствующие переменные окружения при входе в систему, чтобы он находил адрес сеанса dbus при запуске cron.

Из любопытства я задался вопросом, какую среду cron мог бы увидеть, и оказалось, что у меня есть только HOME, LOGNAME, PATH, SHELL, CWD и этот новый один на меня, XDG_SESSION_COOKIE. Это выглядит любопытно, и несколько поисковиков выдавали множество ошибок или других запросов функций, связанных с этим, но ничего, что не говорит мне о том, что он делает.

Мой инстинкт заключается в том, что эту переменную можно использовать для поиска всего, что мне пришлось экспортировать в файл, который я искал до запуска задания cron.

Поэтому мои вопросы: а) могу ли я? б) если да, то как? и в) что (еще) это делает?

Спасибо всем

1 Ответ

6 голосов
/ 11 марта 2009

Это очень интересно. Я узнал, что это менеджер дисплея, устанавливающий куки. Это можно использовать для регистрации процессов, принадлежащих «сеансу», которым управляет демон с именем ConsoleKit. То есть для поддержки быстрого переключения пользователей. Моя система KDE4.2.1, очевидно, тоже поддерживает это.

Чтение этой записи вики Fedora.

Таким образом, эта переменная среды похожа на DBUS_SESSION_BUS_ADDRESS для предоставления доступа к некоторой сущности (в случае XDG_SESSION_COOKIE сеанс входа в систему, управляемый ConsoleKit). Например, имея эту переменную среды, вы можете запросить у менеджера ваш текущий сеанс:

$ 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.GetSessionForUnixProcess uint32:4494

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

Тем не менее, он не перечисляет или каким-либо образом содержит переменные, связанные с какой-либо работой cron. Однако в документации dbus-launch сказано, что libdbus автоматически найдет правильный адрес шины DBUS. Например, файлы хранятся в /home/js/.dbus/session-bus, которые содержат правильные текущие адреса сеанса dbus.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...