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つのビデオコンソールすべてとシリアルコンソールにライブユーザーを自動的にログインさせることにも注意してください。
目的は、アクティブな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
もう。
is-local
とactive
がFALSE
であるセッションで問題が発生しました。 /bin/login
はpam_ck_connector
を使用して適切なセッションを作成しました。次に、ck-launch-session openbox
で~/.xinitrc
を使用してxinitを実行しました。 2番目のセッションは中断されました。
解決策は、ck-launch-session
を使用しないことですが、同じ仮想端末にとどまり、既存の最初のローカルセッションをアクティブにしたままxinitを実行します:XINITRC=/path_to_custom/xinitrc xinit -- :1 vt1