Графический вход в 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на своей версии.
Комментарии
Пока комментариев нет.