GDM (简体中文)

From ArchWiki
翻译状态:本文是 GDM翻译。上次翻译日期:2022-09-12。如果英文版本有所更改,则您可以帮助同步翻译。

来自GDM - GNOME显示管理器:“GNOME显示管理器(GDM)是一个管理图形显示服务并处理图形用户登录的程序。

显示管理器X Window SystemWayland提供图形登录提示。

安装

可通过安装gdm包来安装GDM,或作为gnome组的一部分安装。

启动

若要开机启动GDM,启用gdm.service

自动启动应用

欲使程序于登录后自动启动,请参照 Autostarting_(简体中文)#桌面环境 中适用您的桌面环境的指示。

配置

注意: 下面列出的大多数配置选项都可以使用 gdm-settingsAUR GUI 应用程序轻松设置。

登录页面背景图片

注意:
  • 自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

主题文件应当已提取到创建的目录中。现在将您想要的背景图像复制到此目录。

接下来,您需要在目录中创建一个文件,内容如下:

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>checkbox.svg</file>
    <file>checkbox-focused.svg</file>
    <file>checkbox-off-focused-light.svg</file>
    <file>checkbox-off-focused.svg</file>
    <file>checkbox-off-light.svg</file>
    <file>checkbox-off.svg</file>
    <file>gnome-shell.css</file>
    <file>gnome-shell-high-contrast.css</file>
    <file>gnome-shell-start.svg</file>
    <file>pad-osd.css</file>
    <file>process-working.svg</file>
    <file>toggle-off.svg</file>
    <file>toggle-off-hc.svg</file>
    <file>toggle-off-light.svg</file>
    <file>toggle-on.svg</file>
    <file>toggle-on-hc.svg</file>
    <file>toggle-on-light.svg</file>
    <file>workspace-placeholder.svg</file>
    <file>filename</file>
  </gresource>
</gresources>

filename 替换为背景图像的文件名,或移除此行后用16位色彩值替代。

现在,打开 gnome-shell.css 文件并更改 #lockDialogGroup 定义如下:

#lockDialogGroup {
  background: url(filename);
  background-size: widthpx heightpx;
  background-repeat: no-repeat;
}

background-size 设置为GDM使用的分辨率, 这可能不一定是图像的分辨率。显示分辨率列表见Display resolution。同样,将 filename 替换为背景图像的文件名。

如果您仅想改变背景颜色,请调整 #lockDialogGroup 的定义,如下:

#lockDialogGroup {
  background-color: #color;
}

这里 color 是作为背景的十六进制编码的新颜色。

最后,使用以下命令编译主题:

$ glib-compile-resources gnome-shell-theme.gresource.xml

然后将生成的 gnome-shell-theme.gresource 文件复制到 /usr/share/gnome-shell 目录下。

然后重启 gdm.service (注意:重启而不是退出) ,它就会使用您想要的背景图片了。

更多信息见 此贴。一个自动执行以上步骤的 shell 脚本在 DimaZirix's github repository 上可用。

dconf配置

一些 GDM 设置存储在 DConf database 中。 可以通过将 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

创建以下密钥文件:

/etc/dconf/db/gdm.d/02-logo
[org/gnome/login-screen]
logo='/path/to/logo.png'

然后重新编译 GDM database,或登录 GDM 用户并执行以下操作:

$ sudo -u gdm dbus-launch gsettings set org.gnome.login-screen logo '/path/to/logo.png'

更改光标主题

GDM会忽略 GNOME 光标主题设置,也忽略根据 XDG_规范 设置的光标主题。若要更改GDM使用的光标,请创建以下密钥文件:

/etc/dconf/db/gdm.d/10-cursor-settings
[org/gnome/desktop/interface]
cursor-theme='theme-name'

然后重新编译GDM database,或登录GDM用户并执行以下操作:

$ sudo -u gdm dbus-launch gsettings set org.gnome.desktop.interface cursor-theme 'theme-name'

更改图标主题

可以使用相同的方法来更改图标主题。 创建以下密钥文件:

/etc/dconf/db/gdm.d/11-icon-settings
[org/gnome/desktop/interface]
icon-theme='theme-name'

然后,重新编译 GDM 数据库。 或者,执行以下命令临时登录 GDM 用户并更改图标主题:

$ sudo -u gdm dbus-launch gsettings set org.gnome.desktop.interface icon-theme 'theme-name'

在登录页面显示大字体

单击屏幕右上角的辅助功能图标(一个白色圆圈,中间有一个人的轮廓),然后选中 大号文本 选项。

要设置特定的缩放比例,可以创建以下密钥文件(以1.25为例):

/etc/dconf/db/gdm.d/03-scaling
[org/gnome/desktop/interface]
text-scaling-factor='1.25'

然后重新编译GDM database,或登录GDM用户并执行以下操作:

$ sudo -u gdm dbus-launch gsettings set org.gnome.desktop.interface text-scaling-factor '1.25'

关闭声音

此调整禁用在登录屏幕上(通过键盘)调整系统音量时听到的声音反馈。

创建以下密钥文件:

/etc/dconf/db/gdm.d/04-sound
[org/gnome/desktop/sound]
event-sounds=false

然后重新编译GDM database,或登录GDM用户并执行以下操作:

$ sudo -u gdm dbus-launch gsettings set org.gnome.desktop.sound event-sounds 'false'

更改电源按钮行为

注意:
  • 对于电源键的设置 logind 设置 已被 GNOME Settings Daemon 覆盖。 [1]
  • 自从 GDM 3.18起,电源键不能被设置为交互式 (interactive). [2]
  • 在某些情况下,这条设置会被忽略,而采用硬编码产生的的默认值。[3]
警告: 请注意, acpid 守护进程也会控制“电源键”和“休眠键”相关事件。同时运行两套系统可能导致意外的结果。

创建如下的 keyfile:

/etc/dconf/db/gdm.d/05-power
[org/gnome/settings-daemon/plugins/power]
power-button-action='action'

然后重新编译GDM database,或登录GDM用户并执行以下操作:

$ sudo -u gdm dbus-launch gsettings set org.gnome.settings-daemon.plugins.power power-button-action 'action'

这里 action 可以是 nothing, suspendhibernate 其中之一。

开启触摸板轻触以点击

GDM(和GNOME)中默认关闭轻触以点击,但可以使用dconf设置开启它。

注意: 如果想要在X下这么做,必须先正确配置X服务器的访问权限,见 #配置X服务器的访问权限

若要启用轻触以点击,创建以下key文件:

/etc/dconf/db/gdm.d/06-tap-to-click
[org/gnome/desktop/peripherals/touchpad]
tap-to-click=true

然后重新编译GDM database,或登录GDM用户并执行以下操作:

$ sudo -u gdm dbus-launch gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click 'true'

开启或关闭无障碍菜单

若要禁用或启用无障碍菜单,创建以下key文件:

/etc/dconf/db/gdm.d/07-accessibility
[org/gnome/desktop/interface]
toolkit-accessibility='boolean'

然后重新编译GDM database,或登录GDM用户并执行以下操作:

$ sudo -u gdm dbus-launch gsettings set org.gnome.desktop.interface toolkit-accessibility 'boolean'

当key的值为false时,无障碍菜单默认关闭;true则开启。

在 GDM 上启用夜间模式

欲启用 夜间模式,运行

$ sudo -u gdm dbus-launch gsettings set org.gnome.settings-daemon.plugins.color night-light-enabled true

键盘布局

GDM会应用系统键盘布局。见Keyboard configuration in Xorg#Using X configuration files

提示: 参见 Wikipedia:ISO 3166-1 以得到键盘映射的完整列表

当您使用Wayland时, 您可能需要使用 localectl以自定义地具体说明 X 键盘布局:

# localectl set-x11-keymap fr

如果一个系统有多个用户,您可以为 GDM 指定与系统键盘布局不同的键盘布局。首先,确定包 gnome-control-center 已安装。然后启动 gnome-control-center (即设置,译者注)并定位到 区域与语言>输入源在标题栏中,点击“登录屏幕”切换按钮,然后从列表中选择键盘布局。 请注意,除非系统上存在多个用户,否则标题栏中的“登录屏幕”按钮将不可见。[4]

GDM 2.x(传统GDM)的用户需要将~/.dmrc更改为以下内容:

~/.dmrc
[Desktop]
Language=de_DE.UTF-8   # change to your default lang
Layout=de   nodeadkeys # change to your keyboard layout

更改语言

系统语言将应用于 GDM。 如果系统有多个用户,则可以为 GDM 设置与系统语言不同的语言。 在这种情况下,首先请确保安装了 gnome-control-center。 然后,启动 gnome-control-center 并选择“区域和语言”。 在标题栏中,选中 登录屏幕 切换按钮。 最后,单击 语言 并从列表中选择您的语言。 系统将提示您输入 root 密码。 请注意,除非系统上存在多个用户,否则标题栏中的“登录屏幕”按钮将不可见. [5]

提示: 添加 2 种不同的输入语言后,注销。然后选择您的默认语言 ,GDM 将在第二个选项被删除后记住您的选择。

用户与登录

自动登录

警告: 不要尝试对由 systemd-homed 管理的用户执行此操作。 这是目前 未解决 的漏洞,并且会使 GDM 崩溃。

将以下内容添加至/etc/gdm/custom.conf以开启自动登陆(将username替换为您的用户名):

/etc/gdm/custom.conf
# Enable automatic login for user
[daemon]
AutomaticLogin=username
AutomaticLoginEnable=True
提示: 如果在添加这些行后 GDM 失败,请从 TTY 中将它们注释掉。

或延迟自动登录:

/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 使用 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>

您可以找到所有可用的 logind 选项(比如,reboot-multiple-sessions,即重启多用户会话)在 org.freedesktop.login1(5) 中。

在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 用户列表的用户由 [6][失效链接 2022-09-17 ⓘ] 收集。 它会自动隐藏系统用户(UID < 1000)。 要从登录列表中隐藏普通用户,请创建或编辑一个以用户命名的文件,并将其保存在 /var/lib/AccountsService/users/ 中,随之隐藏该文件。文件至少应包含:

/var/lib/AccountsService/users/username
[User]
SystemAccount=true

设置默认显示器

一些桌面环境将显示设置保存在 ~/.config/monitors.xmlxrandr 命令基于该文件内容生成信息。在GDM中类似内容保存在/var/lib/gdm/.config/monitors.xml

若有显示器设置(例如朝向,缩放,主屏幕等等)信息记录于~/.config/monitors.xml中,并且想要让这些设置用于GDM:

# cp ~/.config/monitors.xml /var/lib/gdm/.config/
# chown gdm:gdm /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
  • 如果您使用 fractional scaling(分数缩放),您需要为用户 gdm 启用它。
  • 注:HiDPI wiki 简体中文部分尚不完善,故选用英语版本。

配置X服务器的访问权限

您可以使用 xhost 命令来配置 X 服务器的访问权限。

例如,要授予 GDM 访问 X 服务器的权限,请使用以下命令:

# xhost +SI:localuser:gdm

疑难解答

Wayland与NVIDIA专有驱动

要在 GDM 中使用带有 NVIDIA 驱动程序的 Wayland,您必须首先启用 NVIDIA_(简体中文)#DRM内核级显示模式设置

注意: 如果在 GDM 中未显示 Wayland 选项,即使在 启用 KMS配置 Wayland 之后,您很可能已禁用 NVreg_PreserveVideoMemoryAllocationsNVIDIA systemd 服务 。 在尝试以下方法强制 Wayland 之前,请先遵循 NVIDIA/Tips and tricks#Preserve video memory after suspend

从 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/ 中的文件,也是因为 /etc/ 中的文件由 pacman 管理。

如果出现黑屏而不是 GDM,请尝试在计算机的 BIOS 设置中禁用集成显卡。

注销失败

如果 GDM 在启动时正常启动,但在多次尝试注销后失败,请尝试将此行添加到 /etc/gdm/custom.conf 的守护程序部分:

GdmXserverTimeout=60

无 root 的 Xorg

Xorg_(简体中文)#没有_root_权限的_Xorg

使用Xorg后端

默认使用 Wayland_(简体中文) 后端,只有在 Wayland 后端无法启动时才使用 Xorg_(简体中文) 后端。 在如以下情况下,您可能希望使用 Xorg 后端:

要默认使用 Xorg 后端,请在 /etc/gdm/custom.conf 中将以下行取消注释:

#WaylandEnable=false

GDM 在提供输入之前没有启动

如果在启动后,屏幕保持黑屏,并且 GDM 直到鼠标移动或在键盘上键入内容才启动,这可能是由于随机数生成所需的无序状态(熵)不足。 如要确认,请检查以下内容是否出现在 systemd-random-seed 的日志中(可以通过以 root 权限运行 journalctl --unit systemd-random-seed 来读取):

Kernel entropy pool is not initialized yet, waiting until it is.

要解决此问题,如果您的 CPU 支持 RDRAND 指令,您可以传递 random.trust_cpu=on 内核参数。您也可以使用 Haveged_(简体中文) ,它也提供了熵,尽管据称质量很低。 有关其他解决方案,请参阅 Debian 关于该主题的文章

没有完全卸载 GDM

删除 gdm 后,systemd_(简体中文) 可能会报告以下内容:

user 'gdm': directory '/var/lib/gdm' does not exist

要删除此警告,请以 root 身份登录并 删除私有用户 gdm 然后 删除组 gdm

验证 gdm 是否已通过具有 root 权限的 pwckgrpck 成功删除。 解决这个问题 ,您可能需要仔细检查 无主文件(缺失中文翻译) 是否保留 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 上的自动挂起,运行:

$ sudo -u 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.

解决方法同 所描述: 防止 /usr/lib/gdm-disable-wayland 在 {{ic|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#Failure to enable unit due to preexisting symlink.

另见