我的当前系统启动到控制台,我不想使用显示管理器。
更新到 之后Ubuntu 13.10
,我意识到ConsoleKit
不再用于管理用户登录,而是systemd-logind
使用 服务。
我.xinitrc
的 Ubuntu 13.04 配置如下:
exec ck-launch-session startxfce4
它ck-launch-session
使我能够安装磁盘或关闭/重启/挂起电脑。
我可以找到有关如何启用这些功能的唯一文档是在Arch Linux 文档:
用户应首先设置 systemd-logind 来管理其会话。如果 systemd 作为系统 init 守护程序运行,则此操作已发生。
接下来,用户必须通过将以下内容放入其中来启动 systemd
~/.xinitrc
:/usr/lib/systemd/systemd --user
用户应该从他们的 中删除任何
ck-launch-session
或实例,因为这些命令是不需要的。dbus-launch
~/.xinitrc
但是,由于 Ubuntu 使用的是upstart
而不是systemd
,因此我无法在我的配置上执行此操作。
我尝试做类似的事情,因此我将其放入我的.xinitrc
:
export DESKTOP_SESSION=xfce
init --user
xfce 会话启动了,但我仍然无法挂载硬盘或重新启动、关闭和挂起我的电脑。这实际上与startxfce4
直接调用相同。
如果我使用参数启动 X 服务器vt01
,其中01
是当前 的 ID tty
,则一切正常,但CTRL+C
如果出现挂起情况,我无法使用诸如 之类的东西来终止服务器。是的,有诸如调用 之类的解决方法killall xinit
,但这并不能解决问题。
我认为如果我在新的 tty 中启动 X 服务器,则不允许关闭,因为logind
没有创建新会话。阅读登录文档,我意识到我可能需要在启动 X 服务器时创建一个新会话,并且当我在 X 服务器中时该会话应该被标记为活动状态。可以使用以下命令检查这一点:
loginctl show-session $XDG_SESSION_ID | grep Active
logind 文档中的以下一行令我感到困惑:
创建会话()和释放会话()可用于打开或关闭登录会话。这些调用绝不应由客户端直接调用。创建/关闭会话完全由 PAM 及其 pam_systemd 模块负责。
所以我的问题是如何让 PAM 在启动 X 服务器时创建一个新的登录会话?
答案1
我花了一整晚的时间研究我的 Ubuntu 控制台启动 + Openbox 设置,我和你的情况一样。systemd 在 Ubuntu 13.10 中没有得到充分使用,但它确实取代了 ConsoleKit,正如你所说。我已经到了 loginctl 并想扯掉我的头发,然后我发现http://blog.falconindy.com/articles/back-to-basics-with-x-and-systemd.html非常有效。
我的 .xinitrc 如下 -
exec dbus-launch --sh-syntax --exit-with-session openbox-session
我使用了上面链接中的帮助程序脚本,并将 startx 别名为“exec path/to/the/helper/script”。效果很好,nm-applet 也运行正常。
PS 如果上面的链接消失,这里是替代startx的帮助脚本。
#!/bin/bash
TTY=${TTY:-$(tty)}
TTY=${TTY#/dev/}
if [[ $TTY != tty* ]]; then
printf '==> ERROR: invalid TTY\n' >&2
exit 1
fi
printf -v vt 'vt%02d' "${TTY#tty}"
xinit -- "$vt" "$@"