ConsoleKitで現在のセッションを有効にする方法は?

ConsoleKitで現在のセッションを有効にする方法は?

他のドライブをミラーリングするためのスクリプトを含むUSBドライブにライブDebian Squeezeシステムがあります。このスクリプトはラベルごとにドライブをマウントするために使用されますが、udisksシリアルコンソールでは実行されません。その理由は、シリアルコンソールに関連付けられたセッションが「アクティブ」と表示されないためです。これは、次のudisksように失敗することを意味します。

user@my-live-usb:~$ udisks --mount /dev/disk/by-label/image-data --mount-options ro
Mount failed: Not Authorized

allow_anyキーを変更して/usr/share/polkit-1/actions/org.freedesktop.udisks.policyも役に立たないので、ConsoleKitにシリアルコンソールが「アクティブ」であることを知らせる方法が気になります。 DBUSインターフェースを介してこれを実行しようとしましたが失敗しました。

user@my-live-usb:~$ dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Session7 org.freedesktop.ConsoleKit.Session.Activate
Error org.freedesktop.DBus.GLib.UnmappedError.CkSeatError.Code0: Unable to activate session

Session7 は /dev/ttyS0 にリストされたセッションです。

それでは、ConsoleKitにシリアルコンソールをアクティブセッションとして認識させるにはどうすればよいですか?

(私の場合、udisksのバージョンは1.0.1 + git20100614-3で、コンソールキットは0.4.1-4です。)

Debianライブシステムが自動的にライブユーザーを6つのビデオコンソールとシリアルコンソールの両方にログインすることも注目に値します。

答え1

目標は、アクティブなConsoleKitセッションを確立することです。以下で確認できます。

$ ck-list-sessions | grep active
    active = TRUE

ConsoleKitセッションが複数ある場合、一度に1つ以上のセッションをアクティブにすることはできません。

出力が次のような場合

$ ck-list-sessions | grep active
    active = FALSE
    active = FALSE

dbusを介してメッセージ転送を認証するためにアクティブなConsoleKitセッションが必要なものが機能しないため、問題があります(NetworkManager、つまりnm-appletudisk ...)。

ConsoleKitセッションを作成(およびアクティブ化)する方法はいくつかあります。ディスプレイマネージャは、ConsoleKitデーモンと直接通信して設定できます。あるいは、pamモジュールはこれを行うことができます。あるいは、login / X11-session-initスクリプトがck-launch-sessionを呼び出してアクティブセッションを作成することもできます(モジュロエラー)。

通常、目標は、単一のスクリプトではなく、ウィンドウマネージャまたはログインシェルのアクティブセッションを取得するようにConsoleKitを設定することです。

ck-launch-sessionConsoleKitシステムをテストするには、それを使用して正しいコンソールキットセッションを作成してみることができます。たとえば、次のようにスクリプトを呼び出すことができます。

$ ck-launch-session ./script

ck-launch-sessionにエラーがないかテストするには、次のように呼び出します。

$ ck-launch-session ck-list-sessions

アクティブなセッションがあることを確認します。

間違い:ConsoleKit システムの最近リリースされたアップデート様々な種類 昆虫壊れやすい(そして過度にエンジニアリングされた?)ConsoleKitエコシステムを始めましょう。

たとえば、Ubuntu 11.10システムでは、アップグレード後にシステムの動作が停止した後にそのラインnox11から削除する必要がありました。pam_ck_connector.so/etc/pam.d/common-sessionck-launch-session

--- a/pam.d/common-session      Fri May 25 10:26:53 2012 +0200
+++ b/pam.d/common-session      Fri May 25 10:39:41 2012 +0200
@@ -29,5 +29,5 @@
 session        required        pam_unix.so 
 session        optional                        pam_winbind.so 
 session        optional        pam_ecryptfs.so unwrap
-session        optional                        pam_ck_connector.so nox11
+session        optional                        pam_ck_connector.so
 # end of pam-auth-update config

この変更により、activeloginを介してウィンドウマネージャを起動するとセッションが直接作成されますWDM

これは、ウィンドウマネージャがアクティブなConsoleKitセッション内で実行され、ウィンドウマネージャプロセス(xtermなど)で子プロセスとして開始されたすべてのエントリもそのセッションの一部であることを意味します。つまり、これ以上の呼び出しはck-launch-session必要ありませんnm-applet

答え2

私のセッションに問題があります。どこにis-localありますか?正しい会話のために。次にinを使ってxinitを実行します。 2回目の会議は中止されました。activeFALSE/bin/loginpam_ck_connectorck-launch-session openbox~/.xinitrc

解決策はを使用するのではなく、ck-launch-session同じ仮想端末でxinitを実行し、既存の最初のローカルセッションをアクティブに保つことです。XINITRC=/path_to_custom/xinitrc xinit -- :1 vt1

関連情報