如何在 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,consolekit是0.4.1-4。)

另外值得注意的是,Debian 即時系統會自動將即時使用者登入所有 6 個視訊控制台和序列控制台上。

答案1

目標是設定一個活動的 ConsoleKit 會話。您可以透過以下方式檢查:

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

如果有多個 ConsoleKit 會話,則一次最多只能有一個會話處於活動狀態。

如果輸出類似

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

你有一個問題,因為需要一個活動的 ConsoleKit 會話來驗證透過 dbus 發送訊息的東西不起作用(例如 NetworkManager,即nm-appletudisk ...)。

有多種方法可以創建(和啟動)ConsoleKit 會話。顯示管理器可以透過直接與 ConsoleKit 守護程序通訊來設定。或者 pam 模組可以做到這一點。或者登入/X11-session-init 腳本可能會呼叫 ck-launch-session ,它應該會建立一個活動會話(模錯誤)。

通常,目標應該是以這樣的方式設定 ConsoleKit,以便為視窗管理器或登入 shell(不僅僅是單一腳本)獲得活動會話。

要測試 ConsoleKit 系統,您可以嘗試使用它ck-launch-session來建立正確的 consolekit 工作階段。例如,您可以這樣呼叫您的腳本:

$ ck-launch-session ./script

要測試 ck-launch-session 是否沒有錯誤,您可以呼叫

$ ck-launch-session ck-list-sessions

並檢查是否有活動會話。

錯誤:最近推出了 ConsoleKit 系統的更新各種各樣的 進入脆弱的(並且過度設計的?)ConsoleKit 生態系統。

例如,在我的 Ubuntu 11.10 系統上,我必須在系統升級後停止工作後nox11pam_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)作為子進程啟動的所有內容也是該會話的一部分,即不再需要額外的forck-launch-session呼叫nm-applet

答案2

我的會話有問題,在哪裡,is-localactive哪裡FALSE/bin/login用於pam_ck_connector進行適當的會話。然後我用ck-launch-session openboxin執行 xinit ~/.xinitrc。第二次會議被打破。

解決方案不是使用ck-launch-session,而是在同一個虛擬終端上執行 xinit 並保持現有的第一個本地會話處於活動狀態:XINITRC=/path_to_custom/xinitrc xinit -- :1 vt1

相關內容