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-applet
udisk など) が動作しないため、問題が発生します。
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-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
セッションで問題が発生しました。 とis-local
が使用されactive
ていましたFALSE
。 適切なセッションを作成するために/bin/login
使用されました。次に、でxinit を実行しました。2 番目のセッションが壊れました。pam_ck_connector
ck-launch-session openbox
~/.xinitrc
解決策は、 を使用せずck-launch-session
、同じ仮想端末に留まり、既存の最初のローカル セッションをアクティブにしたまま xinit を実行することです。XINITRC=/path_to_custom/xinitrc xinit -- :1 vt1