GDM
来自 GDM - GNOME 显示管理器: "GNOME 显示管理器 (GDM) 是一个管理图形显示服务器并处理图形用户登录的程序。"
显示管理器 为 X Window 系统 和 Wayland 用户提供图形登录提示。
安装
GDM 可以通过 安装 gdm 软件包来安装,并且作为 gnome 组的一部分安装。
启动
要在启动时启动 GDM,启用 gdm.service
。
自动启动应用程序
要在登录后自动启动应用程序,请按照 自动启动#在桌面环境启动时 中关于您的桌面环境的说明进行操作。
配置
登录屏幕背景图片
- 自 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,以防万一,请验证主题子文件夹的内容是否与此处的列表匹配,包括背景图片)
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
目录(保留原始文件的备份)。
$ sudo cp /usr/share/gnome-shell/gnome-shell-theme.gresource /usr/share/gnome-shell/gnome-shell-theme-original.gresource $ sudo cp ./gnome-shell-theme.gresource /usr/share/gnome-shell
最后,注销,您应该会发现 gdm 正在使用您首选的背景图片(如果更改没有立即应用,您可能需要重启 gdm)。
如果后续更新重置了 gnome-shell-theme.gresource 文件,只需重复上述步骤,验证 XML 的内容是否与提取的文件列表匹配。
有关更多信息,请参阅以下论坛帖子。DimaZirix 的 github 仓库 上提供了自动执行上述步骤的 shell 脚本。
dconf 配置
一些 GDM 设置存储在 dconf 数据库中。可以通过将 keyfiles 添加到 /etc/dconf/db/gdm.d
目录,然后以 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 issue #34967。更改语言
系统语言将应用于 GDM。如果系统有多个用户,则可以为 GDM 设置与系统语言不同的语言。在这种情况下,首先确保安装了 gnome-control-center。然后,启动gnome-control-center 并选择区域 & 语言。在标题栏中,选中登录屏幕切换按钮。最后,单击语言并从列表中选择您的语言。系统将提示您输入 root 密码。请注意,除非系统上存在多个用户,否则登录屏幕按钮不会在标题栏中可见[5]。
用户和登录
自动登录
要使用 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
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 设置应用程序中导航到系统 > 远程桌面 > 远程登录来通过图形界面配置远程登录。
通过 CLI
要显示当前状态和凭据,可以使用以下命令
# 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 在 /var/lib/gdm/.config/monitors.xml
中存储一个类似的文件。
如果您已在 ~/.config/monitors.xml
中设置了您喜欢的显示器设置(分辨率、刷新率、方向、缩放、主显示器等),并且希望 GDM 遵守这些设置
# cp ~/.config/monitors.xml /var/lib/gdm/.config/
要在每次启动时自动重新配置显示器设置,请为 gdm.service
使用drop-in 文件
/etc/systemd/system/gdm.service.d/override.conf
[Service] ExecStartPre=/bin/cp /home/user/.config/monitors.xml /var/lib/gdm/.config/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
。
- 如果您在 Wayland 下使用 GDM,您还必须使用在 Wayland 下创建的
monitors.xml
。有关更多信息,请参阅 GDM bug 224。或者,您可以强制 GDM #使用 Xorg 后端,并使用在 Xorg 下创建的monitors.xml
。 - 如果您使用 分数缩放,您需要为用户
gdm
启用它,
[gdm]$ dbus-launch gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"
配置 X server 访问权限
您可以使用 xhost
命令来配置 X server 访问权限。
例如,要授予 GDM 访问 X server 的权限,请使用以下命令
# xhost +SI:localuser:gdm
故障排除
Wayland 和 NVIDIA 闭源驱动
要在 GDM 中将 Wayland 与 NVIDIA 驱动程序一起使用,您必须满足以下三个条件
- 启用 DRM KMS,
- 配置 Wayland,
- 遵循 NVIDIA/技巧和窍门#在挂起后保留视频内存。
从 GDM 42 和 NVIDIA 驱动程序 510 开始,GDM 默认使用 Wayland。对于较旧的 NVIDIA 驱动程序(介于 470 和 510 版本之间),GDM 具有芯片组相关的 udev 规则,以使用 Xorg 而不是 Wayland。要强制启用 Wayland,而不是遵循上述三个常规步骤,请通过创建以下符号链接来覆盖这些规则
# ln -s /dev/null /etc/udev/rules.d/61-gdm.rules
/etc/udev/rules.d/
中的规则会覆盖 /usr/lib/udev/rules.d/
中的规则(请参阅 udev#关于 udev 规则)。还建议修改 /etc/
中的文件而不是 /usr/
中的文件,因为这些文件由 pacman 管理。如果出现黑屏而不是 GDM,请尝试在计算机的 BIOS 设置中禁用集成显卡。
在某些情况下,GNOME 启动失败并将控制权转移回 GDM,这反过来导致登录屏幕重新出现。您可以尝试设置以下环境变量,如 BBS#2126478 中建议的那样
/etc/environment
MUTTER_DEBUG_KMS_THREAD_TYPE=user
注销失败
如果 GDM 在启动时正常启动,但在注销时重复尝试失败,请尝试将此行添加到 /etc/gdm/custom.conf
的守护程序部分
GdmXserverTimeout=60
无根 Xorg
请参阅 Xorg#无根 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
通过 pwck
和 grpck
以 root 权限验证 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 以激活您的更改。
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 驱动程序,Wayland 会话可能会被 udev 规则阻止(请参阅 GNOME#Wayland 会话 下的注释)。这可能会导致以下消息
systemd[1022]: Condition check resulted in GNOME Shell on Wayland being skipped. systemd[1022]: org.gnome.Shell@wayland.service: Skipped due to 'exec-condition'. systemd[1022]: org.gnome.Shell@wayland.service: Control process exited, code=exited, status=2/INVALIDARGUMENT
有关解决方法,请参阅 #Wayland 和 NVIDIA 闭源驱动。
当存在 NVIDIA (e)GPU 时 AMD 或 Intel GPU 黑屏
首先,在没有 NVIDIA 设备的情况下,GDM 在 Wayland 上启动并正常工作,但是一旦插入 NVIDIA eGPU(或由于其他原因加载 nvidia
模块),GDM 就会停止工作。此问题的典型症状是注销和 GDM 重启时出现带有闪烁光标的黑屏,以及 GDM 日志(通过以 root 身份运行 journalctl -u gdm -b
访问)中的以下消息
Gdm: Child process -<some PID> was already dead.
解决方案与 #GDM 忽略 Wayland 并默认使用 X.Org 相同:阻止 /usr/lib/gdm-disable-wayland
在加载 nvidia
模块时运行。
请注意,一旦 /usr/lib/gdm-disable-wayland
运行,Wayland 上的 GDM 将不再工作。这是因为 WaylandEnable=false
已写入 /run/gdm/custom.conf
,这将覆盖 /etc/gdm/custom.conf
。要在不重启的情况下解决此问题,请删除 /run/gdm/custom.conf
,然后重启 GDM。
GDM 无法启用
请参阅 systemd/FAQ#由于预先存在的符号链接而无法启用单元。