Графический вход в GNOME: GDM

Вход в систему

Графический вход в GNOME делает служба GDM (GNOME Display Manager). Для системы это обычная служба, которая запускается вместе с графической целью и держит окно приветствия. Пароль она проверяет тем же PAM, что и терминальный login, — только по другому файлу.

Служба и её псевдоним

$ systemctl status gdm --no-pager | head -5
$ systemctl list-unit-files | grep -E 'gdm|display-manager'

display-manager.service — псевдоним, указывающий на gdm.service. Поэтому в разных руководствах вы встретите разные имена: systemctl restart display-manager и systemctl restart gdm сделают одно и то же.

Из чего состоит работа GDM:

Часть Что это
gdm.service Служба входа, запускается системой
Приветствие (greeter) Отдельная сессия GNOME под служебным пользователем gdm
gdm-password (PAM) Проверка пароля обычного входа
gdm-autologin (PAM) Отдельная служба для авто-входа — без проверки пароля
gdm-launch-environment (PAM) Сессия приветствия до того, как кто-то вошёл
/etc/gdm3/custom.conf Основной файл настроек

Отдельный служебный пользователь — не мелочь: из-за него у приветствия нет доступа к домашним каталогам людей, и всё, что должно открываться после входа (например, связка ключей), открывается уже под самим пользователем.

Настройки входа: /etc/gdm3/custom.conf

Файл небольшой, и почти всё в нём закомментировано по умолчанию:

[daemon]
# AutomaticLoginEnable = true
# AutomaticLogin = user1
# TimedLoginEnable = true
# TimedLogin = user1
# TimedLoginDelay = 10

[security]

[debug]
#Enable=true
  • Авто-вход — AutomaticLoginEnable и AutomaticLogin: машина входит сама, пароль не спрашивается. Удобно для стенда и киоска, и это же ослабление защиты: любой, кто включил машину, получил сессию.
  • Вход по времени — TimedLogin: приветствие уходит в авто-вход через TimedLoginDelay секунд.
  • Отладка — [debug] Enable=true: подробный журнал, помогает понять, почему вход не идёт. Включать на время разбора, потом убирать.

Список всех возможных параметров лежит не в файле, а в схеме: /usr/share/gdm/gdm.schemas (так и написано в шапке custom.conf). Настройки приветствия отдельно задаются в /etc/gdm3/greeter.dconf-defaults.

Какой будет сессия: Wayland или X11

GNOME в Ubuntu по умолчанию запускает сессию Wayland. Проверить, что получилось:

$ echo $XDG_SESSION_TYPE
wayland
$ loginctl show-session $(loginctl list-sessions --no-legend | awk '{print $1}' | head -1) -p Type
Type=wayland

Сессию на X11 включают на экране входа: значок шестерёнки рядом с именем → выбрать «GNOME on Xorg». Постоянно — строкой в custom.conf:

[daemon]
WaylandEnable=false

Причину переключения стоит фиксировать: Wayland ломает отдельные программы (старые средства удалённого доступа, некоторые средства записи экрана), но и X11 — не «просто старее»: часть новых возможностей GNOME работает только на Wayland.

Путь через PAM

Служба приветствия — отдельная, поэтому и файл PAM отдельный. Вот /etc/pam.d/gdm-password (Ubuntu 26.04):

auth    requisite   pam_nologin.so
auth    required    pam_succeed_if.so user != root quiet_success
@include common-auth
auth    optional    pam_gnome_keyring.so
@include common-account
session required    pam_loginuid.so
session optional    pam_keyinit.so force revoke
session required    pam_limits.so
@include common-session

Что тут важно:

  • user != root — войти в графику как root нельзя: модуль просто отклоняет такого пользователя. В терминале root пустят, в GNOME — нет;
  • @include common-auth — та же общая проверка пароля, что и в терминале. Именно здесь подключается домен: если стоит SSSD, пользователь проверяется в домене;
  • pam_gnome_keyring — открывает связку ключей логин-паролем, чтобы приложения не спрашивали его отдельно;
  • pam_systemd (из common-session) — регистрирует графическую сессию, и её видно в loginctl с типом wayland или x11.

Обратите внимание на службу gdm-autologin: она существует только для авто-входа и пароль не проверяет вообще. Если авто-вход включён, а приложения всё равно просят пароль от связки ключей — причина в этом: пароль не вводился, и открывать связку было нечем.

Экран блокировки — это тоже вход

Заблокированный экран GNOME (Super+L) разблокируется тем же механизмом: проверку снова делает PAM. Отсюда следствия:

$ loginctl lock-session        # заблокировать свою сессию
$ loginctl unlock-session      # разблокировать (без пароля — для доверенных сценариев)
$ loginctl terminate-session <id>   # закрыть сессию другого пользователя

Полезно, когда графическая сессия зависла, а перезагружать машину не хочется: переключиться на текстовый терминал (Ctrl+Alt+F3), войти, посмотреть loginctl list-sessions и закрыть зависшую сессию или перезапустить службу:

$ sudo systemctl restart gdm

Перезапуск GDM завершает графические сессии всех пользователей — это не «перерисовать экран», а закрыть вход и пригласить заново.

Частые случаи

Ввёл пароль, экран мигнул и вернулось приветствие. Пароль принят, но графическая сессия падает. Смотреть journalctl -u gdm -n 50 --no-pager — там будет либо ошибка в компонентах сессии, либо отказ по правам на домашний каталог.

Чёрный экран вместо приветствия. Обычно драйвер или Wayland; помогает вход по X11 (шестерёнка) и WaylandEnable=false.

Не работает авто-вход. Проверить оба параметра: AutomaticLoginEnable = true и имя пользователя в AutomaticLogin; и помнить, что служба при этом другая (gdm-autologin), поэтому правила common-auth тут не применяются.

Забыл пароль, а вход в графику один. Переключиться на Ctrl+Alt+F3, войти root-ом или через rescue.target и задать пароль passwd.

Источники

  • Файлы рабочей системы (Ubuntu 26.04, GNOME): /etc/gdm3/custom.conf и его указание на схему настроек, /etc/gdm3/greeter.dconf-defaults, /etc/pam.d/gdm-password, /etc/pam.d/gdm-autologin.
  • man 8 pam_succeed_if, man 8 pam_gnome_keyring, man 8 pam_systemd, man 8 pam_nologin.
  • man 1 loginctl, man 8 systemd-logind — сессии, типы сессий, блокировка.
  • Проект GDM: https://gitlab.gnome.org/GNOME/gdm

Что ещё не проверено

  • Поведение авто-входа со связкой ключей описано по устройству служб (gdm-autologin без пароля) и на этой машине не проверялось — авто-вход здесь выключен.
  • Настройки TimedLogin* в новых выпусках GDM могут отличаться от приведённых в custom.conf; сверять со схемой /usr/share/gdm/gdm.schemas на своей версии.
Оценка статьи 0

Комментарии

Пока комментариев нет.