我在 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-applet
udisk ...)。
有多種方法可以創建(和啟動)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 系統上,我必須在系統升級後停止工作後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)作為子進程啟動的所有內容也是該會話的一部分,即不再需要額外的forck-launch-session
呼叫nm-applet
答案2
我的會話有問題,在哪裡,is-local
在active
哪裡FALSE
。
/bin/login
用於pam_ck_connector
進行適當的會話。然後我用ck-launch-session openbox
in執行 xinit ~/.xinitrc
。第二次會議被打破。
解決方案不是使用ck-launch-session
,而是在同一個虛擬終端上執行 xinit 並保持現有的第一個本地會話處於活動狀態:XINITRC=/path_to_custom/xinitrc xinit -- :1 vt1