ConsoleKit

出自 ArchWiki
警告: Arch Linux 仅官方支持 logind [1]systemd。当使用 ConsoleKit 时,请在支持请求中提及。
注意: 虽然 Consolekit 上游已不再维护,但其分支 ConsoleKit2 正在开发中。 [2]

ConsoleKit2 是一个用于定义和跟踪用户、登录会话和席位的框架。其功能是支持多用户设置。它也适用于单用户,但与现有方法相比没有优势。 [3]

安装

安装 consolekitAURpolkit-consolekitAUR 软件包。

配置

ck-launch-session

要使用 ConsoleKit 启动 X 会话,请将以下内容附加到 ~/.xinitrc 中的 exec 语句,例如:

exec ck-launch-session dbus-launch --sh-syntax --exit-with-session openbox-session

这将启动 Openbox,并带有适当的环境变量,以便它及其子进程能够使用 ConsoleKit。

显示管理器,如 GDMLXDMSLiM,会在每个 X 会话启动时自动启动 ConsoleKit。

注意
  • 不要通过从一个 ConsoleKit 会话调用另一个来嵌套会话,否则会破坏 ConsoleKit。
  • 特别是,由于 SLiM 读取 ~/.xinitrc,您应确保在那里运行 ck-launch-session

无显示管理器

如果您不使用显示管理器,而是通过 startx 命令或从 inittab 启动窗口管理器。

如果 ConsoleKit 未正常工作(ck-list-sessions 命令显示 active = FALSE),您应该使用 bash_profile 方法启动窗口管理器:Xinit#在登录时自动启动 X

桌面环境

LightDM 可以用作登录管理器。

技巧与诀窍

使用 D-Bus 进行电源操作

本文或本节的事实准确性存在争议。

原因: 内容必须针对 ConsoleKit2 和其他发展进行修订(在 Talk:ConsoleKit 中讨论)
注意: 使用 ConsoleKit2 的 D-Bus 方法进行挂起、休眠和混合睡眠需要 pm-utilsAUR

关机

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

重启

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

挂起

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Suspend  boolean:true

休眠(挂起到磁盘)

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Hibernate  boolean:true

混合睡眠(挂起 + 休眠)

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.HybridSleep  boolean:true

此方法假定您被授予通过 PolicyKit 关闭系统的权限。默认组是 wheel。要更改此设置,请以 root 身份编辑 /etc/polkit-1/localauthority.conf.d/50-localauthority.conf

故障排除

从 ~/.xinitrc 运行多个应用程序

如果要从 ~/.xinitrc 执行多个应用程序,并非所有应用程序都会设置 ConsoleKit 环境变量。在以下示例中,只有 Compiz 的子进程才能正确使用 ConsoleKit,而 xterm 的子进程则不能。

~/.xinitrc
xterm &
exec ck-launch-session compiz ccp

通常,当例如使用独立的 Compiz 和其他一些应用程序启动器(gnome-do、kupfer、gmrun、xbindkeys 等)时,这可能成为一个问题,因为应用程序启动器的子进程将无法使用 ConsoleKit。一个不太优雅的解决方法是让整个会话由第二个脚本启动,例如 ~/.xstart。不要忘记 dbus-launch,您可能也需要它

~/.xinitrc
exec ck-launch-session dbus-launch ~/.xstart
~/.xstart
xterm &
thunar &
compiz ccp

不要忘记使 ~/.xstart 成为可执行文件

要查看是否一切都已正确启动

$ ck-list-sessions

它应显示至少一个如下所示的会话

Session18:
       unix-user = '1000'
       realname = 'Your Name'
       seat = 'Seat1'
       session-type = 
       active = TRUE
       x11-display = ':0'
       x11-display-device = '/dev/tty2'
       display-device = '/dev/tty1'
       remote-host-name = 
       is-local = TRUE
       on-since = '2011-11-16T12:01:50.104764Z'
       login-session-id = '7'

Consolekit 阻止活动的 TTY

配置 init 以在未使用的 TTY 上启动 ConsoleKit,例如

/usr/bin/openvt -c 63 -f -- /usr/sbin/console-kit-daemon --no-daemon &

有关详细信息,请参见 [4]

在同一 TTY 上启动 X 时会话未激活

startxxinit 指定 keeptty 标志 [5],例如

startx -- -keeptty

另请参见 Xorg#会话日志重定向

使用 systemd-logind 替换 ConsoleKit

注意: systemd-logind 需要使用 systemd 启动才能正常工作。

~/.xinitrc 中删除对 ck-launch-session 的引用。

请参阅 会话 以检查您的用户会话状态。

参见