显示管理器
一个 显示管理器,或者叫登录管理器,通常是在启动过程结束时取代默认 shell 显示的一个图形用户界面。就像有各种类型的 窗口管理器 和 桌面环境 一样,显示管理器也有各种实现。每个显示管理器通常都有一定程度的自定义和主题化选项。
显示管理器列表
控制台
- CDM — 用 Bash 编写的登录管理器。
- Console TDM — 用纯 Bash 编写的 xinit 扩展。
- emptty — 用 Go 编写的简单 CLI 显示管理器,支持 TTY、X 和 Wayland。
- Lemurs — 用 Rust 编写的 Linux TUI 显示管理器。支持 X、Wayland 和 TTY shell 会话。
- lidm — 用 C 编写的完全可自定义的彩色 TUI 显示管理器。
- loginx — 一个结合了 getty/login/xinit 并带有友好 curses 界面的程序。
- Ly — Linux 和 BSD 的 TUI (类似 ncurses) 显示管理器。支持 X 和 Wayland 会话。
- nodm — 用于自动登录的显示管理器。自 2017 年起已停止维护。
- tbsm — 一个 Bash 会话或应用程序启动器。支持 X 和 Wayland 会话。
图形界面
- Entrance — Enlightenment 显示管理器。高度实验性,且没有proper systemd支持。已停止开发。
- LightDM — 跨桌面显示管理器,可以使用用任何工具包编写的各种前端。
- SLiM — 轻量级优雅的图形登录解决方案。于 2022 年复活,与 systemd 不完全兼容。
- XDM — 支持 XDMCP、主机选择器的 X 显示管理器。
登录守护进程
- greetd — 支持控制台和图形界面的登录守护进程。
加载显示管理器
要启用图形登录,请 启用 相应的 systemd 服务。例如,对于 SDDM,启用 sddm.service。
这应该能开箱即用。如果不行,你可能需要重置自定义的 default.target 符号链接,使其指向默认的 graphical.target。参见 systemd#Change default target to boot into。
启用显示管理器服务后,应在 /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/ 目录读取可用的会话。它包含每个桌面环境或窗口管理器的标准 桌面条目文件。一些显示管理器使用单独的 /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#Starting applications without a window manager。
技巧与提示
自动启动
大多数显示管理器会加载 /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
GNOME 和 KDE 用户也可以在 GNOME 或 KDE 设置中设置语言。
注销然后再重新登录,更改才能生效。
在 LUKS 自动登录时自动解锁 Gnome Keyring / KDE KWallet
从 systemd 版本 255 开始,pam_systemd_loadkey 可以用来解锁 GNOME/KWallet 密钥环,如果用户密码与系统的 LUKS 密码短语匹配。要实现此功能,您需要在显示管理器中启用自动登录。
参见
- 登录管理器:简介 - 讨论了登录管理器的实现