web-dev-qa-db-ja.com

ConsoleKitで現在のセッションをアクティブ化するにはどうすればよいですか?

USBドライブにライブのDebianSqueezeシステムがあり、別のドライブのイメージを作成するために使用するスクリプトが含まれています。このスクリプトは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、consolekitは0.4.1-4です。)

また、Debianライブシステムが6つのビデオコンソールすべてとシリアルコンソールにライブユーザーを自動的にログインさせることにも注意してください。

7
detly

目的は、アクティブなConsoleKitセッションをセットアップすることです。これは次の方法で確認できます。

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

ConsoleKitセッションが複数ある場合、一度にアクティブにできるのは最大で1つのセッションのみです。

出力が次のようなものである場合

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

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

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

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

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

$ 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-session行からck-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
maxschlepzig

is-localactiveFALSEであるセッションで問題が発生しました。 /bin/loginpam_ck_connectorを使用して適切なセッションを作成しました。次に、ck-launch-session openbox~/.xinitrcを使用してxinitを実行しました。 2番目のセッションは中断されました。

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

0
rewlad