2009-03-10 2 views
6

私は最近crontabと戦ってきました。なぜならIntrepidではgconftoolがdbusバックエンドを使用しています。これはcrontabから使用すると動作しないことを意味します。環境変数XDG_SESSION_COOKIEとは何ですか?

これを動作させるには、ログインするときに関連する環境変数をエクスポートして、cronの実行時にdbusセッションアドレスが見つかるようにしなければなりませんでした。

は好奇心から、私はcronの見ることができるどのような環境疑問に思い、それは私が持っているすべてはHOMELOGNAMEPATHSHELLCWDで、私にこの新しいもの、XDG_SESSION_COOKIE判明します。これは好奇心が強いように見え、いくつかのグーグルがバグやその他の機能リクエストを投げかけてきましたが、それが何をしているのかはわかりません。

私の本能は、この変数を使用して、私がcronジョブが実行される前にソースファイルにエクスポートしなければならなかったすべてのものを見つけることができるということです。

私の質問は、どうしてですか? b)そうなら、どうですか? c)それは何をするのですか?

ありがとうございました

答えて

6

これは非常に興味深いものです。私はそれがディスプレイマネージャーがクッキーを設定していることを知りました。これは、 "セッション"に属するプロセスを登録するために使用することができ、ConsoleKitというデーモンによって管理されます。これは、高速なユーザー切り替えをサポートするためです。私のKDE4.2.1システムも明らかにそれをサポートしています。

Read this fedora wikiのエントリ。

この環境変数は、XDG_SESSION_COOKIEの場合、ConsoleKitによって管理されるログインセッションの一部のエンティティにアクセスするためのDBUS_SESSION_BUS_ADDRESSのようなものです。代わりにその環境変数を持つたとえば、あなたはあなたの現在のセッションの管理を依頼することができます。

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

に属しているセッションをクエリをサポート何らかの形でジョブに関連する変数が含まれています。しかし、​​のドキュメントでは、libdbusが自動的に正しいDBUSバスアドレスを見つけると言います。たとえば、ファイルは正しい現在のdbusセッションアドレスを含む/home/js/.dbus/session-busに格納されます。

関連する問題