GDM
摘自 GDM - GNOME 显示管理器:“GNOME 显示管理器 (GDM) 是一个管理图形显示服务器并处理图形用户登录的程序。”
显示管理器 为 X Window System 和 Wayland 用户提供图形化登录提示。
安装
GDM 可以通过 gdm 软件包安装,它也是 gnome 软件包组的一部分。
按照 显示管理器#加载显示管理器 的说明在开机时启动 GDM。
配置
登录界面背景图片
- 从 GNOME 3.16 开始,GNOME Shell 主题以二进制文件 (gresource) 形式存储。
- 此更改在后续更新 gnome-shell 时会被覆盖。
首先,你需要将现有的 GNOME Shell 主题提取到你的家目录中。可以使用以下脚本完成此操作
extractgst.sh
#!/bin/sh
gst=/usr/share/gnome-shell/gnome-shell-theme.gresource
workdir=${HOME}/shell-theme
for r in `gresource list $gst`; do
r=${r#\/org\/gnome\/shell/}
if [ ! -d $workdir/${r%/*} ]; then
mkdir -p $workdir/${r%/*}
fi
done
for r in `gresource list $gst`; do
gresource extract $gst $r >$workdir/${r#\/org\/gnome\/shell/}
done
导航到创建的目录。你应该会发现主题文件已提取到其中(在 theme 子文件夹下)。现在将你喜欢的背景图片复制到此目录。
接下来,你需要在 theme 目录下创建一个文件,内容如下(下方的列表适用于 Gnome 47,请务必确认 theme 子文件夹的内容与此列表匹配,包括背景图片)
gnome-shell-theme.gresource.xml
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/shell/theme">
<file>calendar-today.svg</file>
<file>calendar-today-light.svg</file>
<file>gnome-shell-dark.css</file>
<file>gnome-shell-light.css</file>
<file>gnome-shell-high-contrast.css</file>
<file>gnome-shell-start.svg</file>
<file>pad-osd.css</file>
<file>process-working-dark.svg</file>
<file>process-working-light.svg</file>
<file>workspace-placeholder.svg</file>
<file>filename</file>
</gresource>
</gresources>
将 filename 替换为你背景图片的文件名,或者删除该行以使用十六进制颜色值代替。
现在,打开 gnome-shell-light.css 和 gnome-shell-dark.css 文件,并将 #lockDialogGroup 定义修改如下
#lockDialogGroup {
background: url("filename");
background-size: widthpx heightpx;
background-repeat: no-repeat;
}
将 background-size 设置为 GDM 使用的分辨率;这不一定是图片的实际分辨率。有关显示器分辨率列表,请参阅 显示分辨率。
再次强调,将 filename 设置为背景图片的文件名,filename 应包含在 CSS 的引号中。如果你希望图片缩放填充,也可以将 background-size 设置为 auto。
如果使用多显示器,图片最终会跨越所有显示器显示,因此背景使用 SVG 文件可能效果更好。
如果你只想更改背景颜色,请调整 #lockDialogGroup 定义如下
#lockDialogGroup {
background-color: #color;
}
其中 color 是新的十六进制编码背景颜色。
接下来,使用以下命令编译主题
$ glib-compile-resources gnome-shell-theme.gresource.xml
然后,将生成的 gnome-shell-theme.gresource 文件复制到 /usr/share/gnome-shell 目录(请保留原文件的备份)。
# cp /usr/share/gnome-shell/gnome-shell-theme.gresource /usr/share/gnome-shell/gnome-shell-theme-original.gresource # cp ./gnome-shell-theme.gresource /usr/share/gnome-shell
最后,注销,你应该会发现 GDM 使用了你预期的背景图片(如果更改没有立即生效,可能需要重启 GDM)。
如果后续更新重置了 gnome-shell-theme.gresource 文件,只需重复上述步骤,并验证 XML 内容是否与提取的文件列表匹配。
有关更多信息,请参阅以下 论坛帖子。自动化上述步骤的 Shell 脚本可以在 DimaZirix 的 GitHub 仓库 中找到。
dconf 配置
一些 GDM 设置存储在 dconf 数据库中。可以通过向 /etc/dconf/db/gdm.d 目录添加 keyfiles,然后以 root 身份运行 dconf update 重新编译 GDM 数据库来配置它们,或者通过登录到系统上的 GDM 用户并直接使用 gsettings 命令行工具更改设置。请注意,对于前一种方法,需要一个 GDM 配置文件——这必须手动创建,因为它不再随上游发行,见下文
/etc/dconf/profile/gdm
user-db:user system-db:gdm file-db:/usr/share/gdm/greeter-dconf-defaults
对于后一种方法,你可以使用以下命令登录到 GDM 用户
# machinectl shell gdm@ /bin/bash
登录界面 Logo
创建以下 keyfile
/etc/dconf/db/gdm.d/02-logo
[org/gnome/login-screen] logo='/path/to/logo.png'
然后重新编译 GDM 数据库。
或者,以 GDM 用户身份执行以下操作来更改 Logo
[gdm]$ dbus-launch gsettings set org.gnome.login-screen logo '/path/to/logo.png'
要禁用 Logo,可以将该值设置为空字符串
[gdm]$ dbus-launch gsettings set org.gnome.login-screen logo ''
更改光标主题
GDM 会忽略 GNOME 的光标主题设置,也会忽略根据 XDG 规范 设置的光标主题。要更改 GDM 中使用的光标主题,请创建以下 keyfile
/etc/dconf/db/gdm.d/10-cursor-settings
[org/gnome/desktop/interface] cursor-theme='theme-name'
然后重新编译 GDM 数据库。或者,以 GDM 用户身份暂时执行以下操作并更改光标主题
[gdm]$ dbus-launch gsettings set org.gnome.desktop.interface cursor-theme 'theme-name'
更改图标主题
同样的方法也可以用于更改图标主题。创建以下 keyfile
/etc/dconf/db/gdm.d/11-icon-settings
[org/gnome/desktop/interface] icon-theme='theme-name'
然后,重新编译 GDM 数据库。或者,以 GDM 用户身份暂时执行以下操作并更改图标主题
[gdm]$ dbus-launch gsettings set org.gnome.desktop.interface icon-theme 'theme-name'
登录界面大字体
点击屏幕右上角的辅助功能图标(中间有个人影的白色圆圈),并勾选 大字体 选项。
要设置特定的缩放比例,请创建以下 keyfile
/etc/dconf/db/gdm.d/03-scaling
[org/gnome/desktop/interface] text-scaling-factor=1.25
然后重新编译 GDM 数据库。或者,以 GDM 用户身份暂时执行以下操作并更改字体
[gdm]$ dbus-launch gsettings set org.gnome.desktop.interface text-scaling-factor 1.25
关闭声音
此调整将禁用在登录界面调整系统音量(通过键盘)时听到的声音反馈。
创建以下 keyfile
/etc/dconf/db/gdm.d/04-sound
[org/gnome/desktop/sound] event-sounds=false
然后重新编译 GDM 数据库。或者,以 GDM 用户身份暂时执行以下操作并关闭声音
[gdm]$ dbus-launch gsettings set org.gnome.desktop.sound event-sounds 'false'
配置电源按钮行为
创建以下 keyfile
/etc/dconf/db/gdm.d/05-power
[org/gnome/settings-daemon/plugins/power] power-button-action='action'
然后重新编译 GDM 数据库。或者,以 GDM 用户身份暂时执行以下操作并配置行为
[gdm]$ dbus-launch gsettings set org.gnome.settings-daemon.plugins.power power-button-action 'action'
其中 action 可以是 nothing、suspend 或 hibernate 之一。
启用轻触点击
轻触点击在 GDM(和 GNOME)中默认是禁用的,但你可以通过 dconf 设置轻松启用它。
要启用轻触点击,请创建以下 keyfile
/etc/dconf/db/gdm.d/06-tap-to-click
[org/gnome/desktop/peripherals/touchpad] tap-to-click=true
然后重新编译 GDM 数据库。或者,以 GDM 用户身份暂时执行以下操作并启用该操作
[gdm]$ dbus-launch gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click 'true'
禁用/启用辅助功能菜单
要禁用或启用辅助功能菜单,请创建以下 keyfile
/etc/dconf/db/gdm.d/07-accessibility
[org/gnome/desktop/interface] toolkit-accessibility='boolean'
然后重新编译 GDM 数据库。或者,以 GDM 用户身份暂时执行以下操作并更改状态
[gdm]$ dbus-launch gsettings set org.gnome.desktop.interface toolkit-accessibility 'boolean'
当键值为 false 时菜单被禁用,为 true 时启用。
在 GDM 上启用夜间模式
要在 GDM 上启用 夜间模式,请运行
[gdm]$ dbus-launch gsettings set org.gnome.settings-daemon.plugins.color night-light-enabled true
键盘布局
GDM 要求在 /etc/vconsole.conf 中设置 XKBLAYOUT 参数;如果没有设置,它将默认为标准的 us (qwerty) 布局,即它不会遵循 KEYMAP 中设置的值。
一种通用的方法是使用 localectl --no-convert set-x11-keymap [keymap]:有关详细信息,请参阅 Xorg 中的键盘配置#设置键盘布局。
--no-convert 的情况下使用 localectl set-x11-keymap 也会更改 KEYMAP= 的值,如果使用包含重音字符的密码对整个系统进行加密,这可能导致系统无法启动。参见 systemd 问题 #34967。更改语言
系统语言将应用于 GDM。如果系统有多个用户,可以为 GDM 设置与系统语言不同的语言。在这种情况下,首先确保安装了 gnome-control-center。然后,启动 gnome-control-center 并选择 区域与语言。在标题栏中,勾选 登录界面 切换按钮。最后,点击 语言 并从列表中选择你的语言。系统将提示你输入 root 密码。请注意,除非系统上存在多个用户,否则标题栏中不会显示 登录界面 按钮 [4]。
用户与登录
自动登录
要启用 GDM 自动登录,请将以下内容添加到 /etc/gdm/custom.conf(将 username 替换为你自己的用户名)
/etc/gdm/custom.conf
# Enable automatic login for user [daemon] AutomaticLogin=username AutomaticLoginEnable=True
或者用于延迟自动登录
/etc/gdm/custom.conf
[daemon] TimedLoginEnable=true TimedLogin=username TimedLoginDelay=1
你可以设置用于自动登录的会话(将 gnome-xorg 替换为所需的会话)
/var/lib/AccountsService/users/username
[User] XSession=gnome-xorg
无密码登录
如果你想绕过 GDM 中的密码提示,只需将以下行添加到 /etc/pam.d/gdm-password 的第一行
auth sufficient pam_succeed_if.so user ingroup nopasswdlogin
然后,将 nopasswdlogin 组添加到你的系统中。有关组描述和组管理命令,请参阅 用户组。
现在,将你的用户添加到 nopasswdlogin 组,之后只需点击你的用户名即可登录。
- 不要 对 root 账户执行此操作。
- 之后你将无法再在 GDM 登录时更改会话类型。如果你想更改默认会话类型,首先需要将你的用户从
nopasswdlogin组中移除。
禁用指纹登录
当使用指纹登录时,它不会解锁密钥环,因此系统仍会提示你输入密钥环密码。你可能希望禁止登录并保留指纹来解锁会话。为此,只需禁用 GDM 用户的指纹。
以 GDM 用户身份暂时执行以下操作并更改此设置
[gdm]$ dbus-launch gsettings set org.gnome.login-screen enable-fingerprint-authentication false
多用户会话下无需密码关机
GDM 使用 polkit 和 logind 来获取关机权限。你可以通过设置来实现在多个用户登录时关机
/etc/polkit-1/localauthority.conf.d/org.freedesktop.logind.policy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/software/polkit/policyconfig-1.dtd">
<!--
Policy definitions for logind
-->
<policyconfig>
<action id="org.freedesktop.login1.power-off-multiple-sessions">
<description>Shutdown the system when multiple users are logged in</description>
<message>System policy prevents shutting down the system when other users are logged in</message>
<defaults>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
</action>
</policyconfig>
你可以在 org.freedesktop.login1(5) 中找到所有可用的 logind 选项(例如 reboot-multiple-sessions)。
在 GDM 中启用 root 登录
不建议以 root 身份登录,但如有必要,你可以编辑 /etc/pam.d/gdm-password 并在 auth required pam_deny.so 行之前添加以下行
/etc/pam.d/gdm-password
auth sufficient pam_succeed_if.so uid eq 0 quiet
文件内容应该如下所示
/etc/pam.d/gdm-password
... auth sufficient pam_succeed_if.so uid eq 0 quiet auth sufficient pam_succeed_if.so uid >= 1000 quiet auth required pam_deny.so ...
重启 GDM 后你应该能够以 root 身份登录。
从登录列表中隐藏用户
GDM 用户列表的用户由 AccountsService 收集。它会自动隐藏系统用户(UID < 1000)。要从登录列表中隐藏普通用户,请在 /var/lib/AccountsService/users/ 中创建一个以要隐藏的用户名命名的文件,或者编辑该文件,包含至少以下内容
/var/lib/AccountsService/users/username
[User] SystemAccount=true
通过 RDP 远程登录
通过图形界面
可以通过在 Gnome 设置应用程序中导航到 系统 > 远程桌面 > 远程登录,通过图形界面配置远程登录。
通过命令行
要显示当前状态和凭据,可以使用以下命令
# grdctl --system status --show-credentials
设置凭据
# grdctl --system rdp set-credentials rdp_login rdp_password
生成新的 TLS 密钥和证书
# winpr-makecert3 -rdp -path /etc/gnome-remote-desktop -n rdp-tls
如果省略 -n rdp-tls 部分,则会将 hostname 用作名称。
设置 TLS 密钥和证书
# grdctl --system rdp set-tls-key /etc/gnome-remote-desktop/rdp-tls.key # grdctl --system rdp set-tls-cert /etc/gnome-remote-desktop/rdp-tls.crt
最后,启用远程登录
# grdctl --system rdp enable
设置默认显示器配置
一些桌面环境将显示设置存储在 ~/.config/monitors.xml 中,并据此生成 xrandr 命令。GDM 有一个用途类似的文件,位于 /etc/xdg/monitors.xml(这是全局 mutter 配置,也会影响新的 GNOME 会话)。
/var/lib/gdm/.config/monitors.xml − 已过时。如果你已经在 ~/.config/monitors.xml 中配置好了喜欢的显示器设置(分辨率、刷新率、方向、缩放、主显示器等),并希望 GDM 遵循这些设置
# cp /home/user/.config/monitors.xml /etc/xdg/monitors.xml
要在每次启动时自动重新配置显示器设置,请为 gdm.service 使用插入式文件
/etc/systemd/system/gdm.service.d/override.conf
[Service] ExecStartPre=/bin/cp /home/user/.config/monitors.xml /etc/xdg/monitors.xml
monitors.xml 中与屏幕旋转和缩放相关的部分是
<monitors version="2">
<configuration>
<logicalmonitor>
...
<scale>2</scale>
...
<transform>
<rotation>right</rotation>
<flipped>no</flipped>
</transform>
...
</logicalmonitor>
</configuration>
</monitors>
更改将在注销后生效。这是必要的,因为 GDM 不遵循 xorg.conf。
如果你修改了 Mutter 的实验性功能设置(通常用于分数缩放或可变刷新率),请确保 dconf 设置是全局执行的,而不仅仅是针对你的用户,请参阅 分数缩放。这是因为这些设置可能导致 monitors.xml 不兼容,请参阅 GDM bug 1028。
配置 X 服务器访问权限
你可以使用 xhost 命令配置 X 服务器访问权限。
例如,要授予 GDM 访问 X 服务器的权限,请使用以下命令
# xhost +SI:localuser:gdm
故障排除
升级至 GNOME 50 后 GDM 欢迎界面不显示用户列表
升级到 GDM 50 后,欢迎界面可能完全无法显示用户选择列表,仅作为 gdm-greeter 用户启动,没有选择或切换到任何常规用户账户的选项。当 /etc/dconf/profile/gdm 为空或缺少所需条目时,可能会发生这种情况。
该文件不属于任何软件包(pacman -Qo /etc/dconf/profile/gdm 返回 "No package owns ..."),因此在更新期间不会自动创建或修复。
验证该文件是否包含以下内容
user-db:user system-db:gdm file-db:/usr/share/gdm/greeter-dconf-defaults
如果该文件为空或缺少这些条目,请填充它并运行
# dconf update
然后重启 GDM。没有此配置文件,gnome-shell 将无法在欢迎模式下启动,也无法显示用户列表。
Wayland 与专有 NVIDIA 驱动程序
要在 GDM 中使用带有 NVIDIA 驱动程序的 Wayland,必须满足以下三个条件
- 启用 DRM KMS,
- 配置 Wayland,,
- 按照 NVIDIA/技巧与提示#休眠后保留显存 执行操作。
如果出现的不是 GDM,而是一个黑屏,请尝试在计算机的 BIOS 设置中禁用集成显卡。
在某些情况下,GNOME 启动失败并将控制权转回 GDM,这反过来导致登录界面再次出现。你可以尝试设置以下环境变量,如 BBS#2126478 所述
/etc/environment
MUTTER_DEBUG_KMS_THREAD_TYPE=user
注销失败
如果 GDM 在开机时启动正常,但在注销时反复尝试后失败,请尝试将此行添加到 /etc/gdm/custom.conf 的 daemon 部分
GdmXserverTimeout=60
无根 Xorg
请参阅 Xorg#Rootless Xorg。
使用 Xorg 后端
默认使用 Wayland 后端,仅在 Wayland 后端无法启动时使用 Xorg 后端。例如在以下情况下,你可能希望改用 Xorg 后端
- GDM 崩溃
要默认使用 Xorg 后端,请取消注释 /etc/gdm/custom.conf 中的以下行
#WaylandEnable=false
gdm 卸载不完全
user 'gdm': directory '/var/lib/gdm' does not exist
要消除此警告,请以 root 身份登录并删除主用户 gdm,然后删除组 gdm
以 root 权限通过 pwck 和 grpck 验证 gdm 是否已成功删除。最后,你可能需要仔细检查没有为 gdm 留下不属于任何软件包的文件。
GDM 自动休眠(GNOME 3.28)
GDM 使用单独的 dconf 数据库来控制电源管理。要应用你用户的电源设置,请将它们复制到 GDM 的 dconf 数据库中
$ IFS=$'\n'; for x in $(sudo -u username gsettings list-recursively org.gnome.settings-daemon.plugins.power); do eval "sudo -u gdm dbus-launch gsettings set $x"; done; unset IFS
其中 username 是你的用户名。
要仅禁用交流电 (AC) 下的自动休眠,请运行
[gdm]$ dbus-launch gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'
(要同时禁用电池下的自动休眠,请使用 battery 代替 ac 运行命令。)
重启 GDM 以激活更改。
对于较新版本的 GNOME(已在 49.1 上测试)
# Create following files and any directories if they do not exist. $ cat /etc/dconf/profile/gdm user-db:user system-db:gdm file-db:/usr/share/gdm/greeter-dconf-defaults $ cat /etc/dconf/db/gdm.d/00-disable-suspend [org/gnome/settings-daemon/plugins/power] sleep-inactive-ac-type='nothing' sleep-inactive-ac-timeout=0 $ sudo dconf update $ sudo reboot
补充论坛链接
GDM 忽略 Wayland 并默认使用 X.Org
Wayland 需要内核模式设置 (KMS) 才能工作,在某些机器上 GDM 进程启动得比 KMS 早,导致 GDM 无法看到 Wayland,只能在 X.Org 下工作。这可能会导致日志中出现如下消息
gnome-shell[569]: Failed to open gpu '/dev/dri/card0': GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Operation not permitted gnome-shell[569]: Failed to create backend: No GPUs found systemd[505]: org.gnome.Shell@wayland.service: Failed with result 'protocol'. systemd[505]: Failed to start GNOME Shell on Wayland.
或者,同样的问题可能导致 GDM 不显示,或显示器只显示 TTY 输出。
你可以通过更早启动 KMS 来解决此问题。你也可以通过验证 GDM 配置中是否启用了 Wayland 来排查(见上文)。
当存在 NVIDIA (e)GPU 时 AMD 或 Intel GPU 出现黑屏
起初,没有 NVIDIA 设备时,GDM 在 Wayland 上正常启动和工作,但一旦插入 NVIDIA eGPU(或出于其他原因加载了 nvidia 模块),它就会停止工作。该问题的典型症状是注销或 GDM 重启时出现带有闪烁光标的黑屏,以及 GDM 日志中出现以下消息(以 root 身份运行 journalctl -u gdm -b 查看)
Gdm: Child process -<some PID> was already dead.
解决方案与 #GDM 忽略 Wayland 并默认使用 X.Org 相同:防止在加载 nvidia 模块时运行 /usr/lib/gdm-disable-wayland。
请注意,一旦 /usr/lib/gdm-disable-wayland 运行,Wayland 上的 GDM 将不再工作。这是因为 WaylandEnable=false 已被写入 /run/gdm/custom.conf,它覆盖了 /etc/gdm/custom.conf。要在不重启的情况下修复此情况,请删除 /run/gdm/custom.conf,然后重启 GDM。
无法启用 GDM
请参阅 systemd/常见问题#因预先存在的符号链接导致无法启用单元。