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

セッション7は、/dev/ttyS0にあるとリストされているものです。

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

(私の場合、udisks のバージョンは 1.0.1+git20100614-3、consolekit は 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-module がそれを行うこともできます。または、login/X11-session-init スクリプトが ck-launch-session を呼び出して、アクティブ セッションを作成することもできます (バグを除く)。

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

ConsoleKit システムをテストするには、ck-launch-session適切な consolekit セッションを作成して使用してみてください。たとえば、次のようにスクリプトを呼び出すことができます。

$ 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

この変更により、ログインactive経由でウィンドウ マネージャーを起動するときに、直接セッションを取得できるようになりましたWDM

つまり、ウィンドウ マネージャーはアクティブな ConsoleKit セッション内で実行され、ウィンドウ マネージャー プロセス (xterm など) から子として開始されるものはすべてそのセッションの一部になります。つまり、たとえばck-launch-sessionなどの追加の呼び出しは不要になりnm-appletます。

答え2

セッションで問題が発生しました。 とis-localが使用されactiveていましたFALSE。 適切なセッションを作成するために/bin/login使用されました。次に、でxinit を実行しました。2 番目のセッションが壊れました。pam_ck_connectorck-launch-session openbox~/.xinitrc

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

関連情報