GDM

来自 Arch Linux 中文维基

来自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 用户执行以下操作:

[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用户执行以下操作:

[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 用户更改图标主题:

[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用户执行以下操作:

[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用户执行以下操作:

[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用户并执行以下操作:

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

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

开启触摸板轻触以点击[编辑 | 编辑源代码]

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

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

若要启用轻触以点击,创建以下keyfile:

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

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

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

开启或关闭无障碍菜单[编辑 | 编辑源代码]

本文内容或本节内容已经过期。

原因: 对于 GDM 43,以下配置 keyfile 无效,尽管官方文档仍然这样说明[4]。请使用 org.gnome.desktop.a11y.applications screen-keyboard-enabled true key。 (在Talk:GDM讨论)

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

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

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

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

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

在 GDM 上启用夜间模式[编辑 | 编辑源代码]

欲启用夜间模式,运行

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

键盘布局[编辑 | 编辑源代码]

GDM 会应用系统键盘布局。您可以用 localectl set-x11-keymap 来指定键盘布局。细节参见 Keyboard configuration in Xorg#Setting 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

通过 RDP 的远程登录[编辑 | 编辑源代码]

注意: 当前只能创建无显示器的远程会话。
注意: 一次只能存在一个图形化会话。若另一个图形化会话存在,尝试创建新图形化会话会杀死它。
通过图形化接口[编辑 | 编辑源代码]

可在 Gnome 设置程序中找到“系统>远程桌面>远程登录”来图形化地配置远程登录。

通过终端接口[编辑 | 编辑源代码]
注意: 要生效,Gnome 远程桌面同时要求 TLS 证书和凭证。除非预先设置过,否则两者都不存在,需要手动设置。

要显示当前状态和凭证,可采用以下命令:

# 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.xmlxrandr 命令基于该文件内容生成信息。在GDM中类似内容保存在/var/lib/gdm/.config/monitors.xml

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

# cp ~/.config/monitors.xml /var/lib/gdm/.config/

要在每次启动时自动重新配置显示器设置,为 gdm.service 使用 Systemd#附加配置片段

/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

注意:
 [gdm]$ dbus-launch gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

配置X服务器的访问权限[编辑 | 编辑源代码]

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

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

# xhost +SI:localuser:gdm

疑难解答[编辑 | 编辑源代码]

Wayland 与 NVIDIA 专有驱动[编辑 | 编辑源代码]

要在 GDM 中使用带有 NVIDIA 驱动程序的 Wayland,您必须满足以下三个条件:

从 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#About udev rules)。 建议修改 /etc/ 中的文件,而非 /usr/ 中的文件,也是因为 /etc/ 中的文件由 pacman 管理。

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

一些情况下,GNOME 无法启动,将控制权转回 GDM,最终导致登录页面重复出现。您可以尝试设置以下环境变量,参考BBS#2126478

/etc/environment
MUTTER_DEBUG_KMS_THREAD_TYPE=user

注销失败[编辑 | 编辑源代码]

如果 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 可能会报告以下内容:

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 上的自动挂起,运行:

[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.

另见[编辑 | 编辑源代码]