如何在 ConsoleKit 中激活当前会话?

det*_*tly 7 consolekit udisks

我在 USB 驱动器上有一个实时的 Debian Squeeze 系统,其中包含我用来对另一个驱动器进行映像的脚本。此脚本用于udisks按标签安装驱动器,但它不适用于串行控制台。原因是与串行控制台关联的会话似乎不是“活动的”,这意味着udisks失败:

user@my-live-usb:~$ udisks --mount /dev/disk/by-label/image-data --mount-options ro
Mount failed: Not Authorized
Run Code Online (Sandbox Code Playgroud)

更改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
Run Code Online (Sandbox Code Playgroud)

Session7 是在 /dev/ttyS0 上列出的那个。

那么如何让 ConsoleKit 将串行控制台识别为活动会话呢?

(就我而言,udisks 版本是 1.0.1+git20100614-3,consolekit 是 0.4.1-4。)

值得一提的是,Debian 实时系统会自动将实时用户登录到所有 6 个视频控制台和串行控制台上。

max*_*zig 2

目标是设置一个活动的 ConsoleKit 会话。您可以通过以下方式检查:

$ ck-list-sessions | grep active
    active = TRUE
Run Code Online (Sandbox Code Playgroud)

如果有多个 ConsoleKit 会话,则一次最多只能有一个会话处于活动状态。

如果输出类似于

$ ck-list-sessions | grep active
    active = FALSE
    active = FALSE
Run Code Online (Sandbox Code Playgroud)

你有一个问题,因为需要一个活动的 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
Run Code Online (Sandbox Code Playgroud)

要测试 ck-launch-session 是否没有错误,您可以调用

$ ck-launch-session ck-list-sessions
Run Code Online (Sandbox Code Playgroud)

并检查是否有活动会话。

错误: ConsoleKit 系统的更新最近在脆弱(且过度设计?)的 ConsoleKit 生态系统中引入了各种 错误。

例如,在我的 Ubuntu 11.10 系统上,我必须在系统升级后停止工作后nox11从pam_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
Run Code Online (Sandbox Code Playgroud)

现在有了这个更改,我active在通过登录启动窗口管理器时直接获得一个会话WDM。

这意味着窗口管理器现在在活动的 ConsoleKit 会话中运行,并且从窗口管理器进程(例如,从 xterm)作为子进程启动的所有内容也是该会话的一部分,即不再需要额外的ck-launch-sessionfornm-applet调用。