ConsoleKit
ConsoleKit2 是一个用于定义和跟踪用户、登录会话和席位的框架。其功能是支持多用户设置。它也适用于单用户,但与现有方法相比没有优势。 [3]
安装
安装 consolekitAUR 和 polkit-consolekitAUR 软件包。
配置
ck-launch-session
要使用 ConsoleKit 启动 X 会话,请将以下内容附加到 ~/.xinitrc
中的 exec
语句,例如:
exec ck-launch-session dbus-launch --sh-syntax --exit-with-session openbox-session
这将启动 Openbox,并带有适当的环境变量,以便它及其子进程能够使用 ConsoleKit。
显示管理器,如 GDM、LXDM 和 SLiM,会在每个 X 会话启动时自动启动 ConsoleKit。
- 不要通过从一个 ConsoleKit 会话调用另一个来嵌套会话,否则会破坏 ConsoleKit。
- 特别是,由于 SLiM 读取
~/.xinitrc
,您应确保不在那里运行ck-launch-session
。
无显示管理器
如果您不使用显示管理器,而是通过 startx
命令或从 inittab 启动窗口管理器。
如果 ConsoleKit 未正常工作(ck-list-sessions
命令显示 active = FALSE),您应该使用 bash_profile 方法启动窗口管理器:Xinit#在登录时自动启动 X。
桌面环境
LightDM 可以用作登录管理器。
技巧与诀窍
使用 D-Bus 进行电源操作
关机
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 时会话未激活
为 startx 或 xinit 指定 keeptty
标志 [5],例如
startx -- -keeptty
另请参见 Xorg#会话日志重定向。
使用 systemd-logind 替换 ConsoleKit
从 ~/.xinitrc
中删除对 ck-launch-session
的引用。
请参阅 会话 以检查您的用户会话状态。