显示管理器
显示管理器,或登录管理器,通常是在启动过程结束时,代替默认 shell 显示的图形用户界面。显示管理器有多种实现,就像有多种类型的窗口管理器和桌面环境一样。通常每个显示管理器都有一定程度的自定义和主题化选项。
显示管理器列表
控制台
- CDM — 使用 Bash 编写的登录管理器。
- Console TDM — 用纯 Bash 编写的 xinit 扩展。
- nodm — 用于自动登录的显示管理器。自 2017 年起已停止维护。
- Ly — 用于 Linux 和 BSD 的 TUI (类似 ncurses) 显示管理器。支持 X 和 Wayland 会话。
- tbsm — Bash 会话或应用程序启动器。支持 X 和 Wayland 会话。
- emptty — TTY 上支持 X 和 Wayland 的简单 CLI 显示管理器。
- loginx — getty/login/xinit 组合,带有友好的 curses 用户界面。
- Lemurs — 用 Rust 编写的 Linux TUI 显示管理器。支持 X、Wayland 和 TTY shell 会话。
图形界面
- Entrance — Enlightenment 显示管理器。高度实验性,并且没有适当的 systemd 支持。不再开发。
- LightDM — 跨桌面显示管理器,可以使用任何工具包编写的各种前端。
- SLiM — 轻量且优雅的图形登录解决方案。自 2013 年起已停止维护,与 systemd 不完全兼容。
- XDM — X 显示管理器,支持 XDMCP、主机选择器。
登录守护进程
- greetd — 登录守护进程,同时支持控制台和图形化 greeter。
加载显示管理器
要启用图形登录,启用相应的 systemd 服务。例如,对于 SDDM,启用 sddm.service
。
这应该可以立即生效。如果不行,您可能需要重置自定义的 default.target
符号链接,使其指向默认的 graphical.target
。请参阅 systemd#更改默认启动目标。
启用 SDDM 后,应该在 /etc/systemd/system/
中设置一个符号链接 display-manager.service
。您可能需要使用 --force
来覆盖旧的符号链接。
$ file /etc/systemd/system/display-manager.service
/etc/systemd/system/display-manager.service: symbolic link to /usr/lib/systemd/system/sddm.service
使用 systemd-logind
为了检查用户会话的状态,您可以使用 loginctl。所有 polkit 操作(如挂起系统或挂载外部驱动器)都应该可以立即工作。
$ loginctl show-session $XDG_SESSION_ID
会话配置
许多显示管理器从 /usr/share/xsessions/
目录读取可用的会话。它包含每个桌面环境或窗口管理器的标准 desktop entry 文件。一些显示管理器使用单独的 /usr/share/wayland-sessions/
来列出特定于 Wayland 的会话。
要向显示管理器的会话列表添加/删除条目,请在 /usr/share/xsessions/
中创建/删除 .desktop 文件。一个典型的 .desktop 文件看起来像这样
[Desktop Entry] Name=Openbox Comment=Log in using the Openbox window manager (without a session manager) Exec=/usr/bin/openbox-session TryExec=/usr/bin/openbox-session Icon=openbox.png Type=Application
以会话形式运行 ~/.xinitrc
安装 xinit-xsessionAUR 将提供一个选项,以将会话运行为您的 xinitrc。只需在显示管理器的设置中将 xinitrc
设置为会话,并确保 ~/.xinitrc
文件是可执行的。
在没有窗口管理器的情况下启动应用程序
您还可以启动一个没有任何装饰、桌面或窗口管理的应用程序。例如,要启动 google-chromeAUR,请在 /usr/share/xsessions/
中创建一个 web-browser.desktop
文件,如下所示
[Desktop Entry] Name=Web Browser Comment=Use a web browser as your session Exec=/usr/bin/google-chrome --auto-launch-at-startup TryExec=/usr/bin/google-chrome --auto-launch-at-startup Icon=google-chrome Type=Application
在这种情况下,一旦您登录,使用 Exec
设置的应用程序将立即启动。当您关闭应用程序时,您将被带回到登录管理器(与从正常的桌面环境或窗口管理器注销相同)。
重要的是要记住,大多数图形应用程序并非旨在以这种方式启动,您可能需要进行手动调整或忍受一些限制(没有窗口管理器,因此不要期望能够移动或调整任何窗口的大小,包括对话框;尽管如此,您或许可以在应用程序的配置文件中设置窗口几何属性)。
另请参阅 xinitrc#在没有窗口管理器的情况下启动应用程序。
技巧与提示
自动启动
大多数显示管理器会读取 /etc/xprofile
、~/.xprofile
和 /etc/X11/xinit/xinitrc.d/
。有关更多详细信息,请参阅 xprofile。
为用户会话设置语言
对于使用 AccountsService 的显示管理器,可以通过编辑以下内容来设置用户会话的区域设置
/var/lib/AccountsService/users/$USER
[User] Language=your_locale
其中 your_locale 是一个值,例如 en_GB.UTF-8
。
或者,您可以使用 D-Bus 实现此目的:busctl call org.freedesktop.Accounts /org/freedesktop/Accounts/User$UID org.freedesktop.Accounts.User SetLanguage s your_locale
注销然后重新登录以使更改生效。
在使用 LUKS 自动登录时自动解锁 Gnome Keyring / KDE KWallet
自 systemd 版本 255 起,如果用户密码与系统的 LUKS 密码匹配,则可以使用 pam_systemd_loadkey 来解锁 GNOME/Kwallet 密钥环。为了使此功能生效,您需要在显示管理器中启用自动登录。
参见
- 登录管理器:简介 - 讨论登录管理器的实现