GDM (简体中文) - ArchWiki

Jump to content

相关文章

- GNOME
- 显示管理器

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

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

显示管理器为X Window System和Wayland提供图形登录提示。

## 安装

可通过安装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

#### 登录页面的logo

创建以下密钥文件：

    /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`, `suspend` 或 `hibernate` 其中之一。

#### 开启触摸板轻触以点击

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.xml`。xrandr 命令基于该文件内容生成信息。在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`。

注意：

- 如果在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_PreserveVideoMemoryAllocations` 和 NVIDIA 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#About udev rules）。 建议修改 `/etc/` 中的文件，而非 `/usr/` 中的文件，也是因为 `/etc/` 中的文件由 pacman 管理。

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

### 注销失败

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

    GdmXserverTimeout=60

### 无 root 的 Xorg

见Xorg (简体中文)#没有 root 权限的 Xorg。

### 使用Xorg后端

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

- GDM 崩溃

要默认使用 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 权限的 `pwck` 和 `grpck` 成功删除。 解决这个问题 ，您可能需要仔细检查 无主文件（缺失中文翻译） 是否保留 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.

## 另见

- GDM Reference Manual

Categories:

- GNOME (简体中文)
- Boot process (简体中文)
- Display managers (简体中文)

Hidden category:

- Pages with dead links