Skip to content

fly-dm greeter: показать host_id на экране входа

This content is not available in your language yet.

tessera отправляет короткую идентификацию машины в PAM в начале pam_sm_authenticate:

Этот банкомат: host_id=a1b2c3d4 (source=MachineId)

Это PAM_TEXT_INFO-сообщение. Полный host_id_hash остаётся в syslog: journalctl -t tessera | grep host_identity. Цель — оператор/инженер у терминала видит, к какому host_id привязан сертификат, не заходя в shell.

Где сообщение показывается без дополнительной настройки:

  • TTY-login (/etc/pam.d/login на консоли);
  • sshd interactive (/etc/pam.d/sshd);
  • sudo (/etc/pam.d/sudo).

Где нужны настройки — fly-dm (Astra GUI display manager): см. ниже.

На Astra с МКЦ-3 (production-банкоматы) fly-dm под темой fly-modern игнорирует PAM-сообщения и GreetString — hardcoded’но рендерит в headline place строку «Усиленный уровень защищенности» из /usr/share/locale/ru/LC_MESSAGES/fly-dm_greet_modern.mo (определяется по PARSEC API).

История попыток (для контекста):

ВерсияПодходРезультат
0.3.15greeter-show-messages = true в fly-dmrcKDM/LightDM legacy key, fly-qdm 2.15+ не парсит. Cargo-cult.
0.3.16/etc/X11/fly-dm/override/GreetString.desktopНа fly-modern МКЦ-3 GreetString hardcode’ом замещается. No-op.
0.3.19Wallpaper writer — впечатать в JPG-фонРаботает.

Идея: впечатать host_id прямо в JPG, на который смотрит [background].path в /etc/X11/fly-dm/fly-modern/settings.ini. Daemon делает это автоматически, без зависимостей от темы.

/etc/tessera/config.toml
[fly_dm_greeter]
update_wallpaper = true

Restart:

Окно терминала
sudo systemctl restart tessera

При каждом старте tessera.service:

  1. Первый раз: cp wallpaper_target → wallpaper_backup (one-time снимок оригинала). Дальнейшие правки источника НЕ перезаписывают backup — изменение оригинала фона требует ручного удаления wallpaper_backup.
  2. Открывает wallpaper_backup как source-изображение.
  3. Рендерит template (template_ru / template_en по locale) с подстановкой:
    • {host_id_short} — первые 8 hex символов sha256;
    • {source} — имя источника (MachineId, DmiBoardSerial …);
    • %n — hostname машины.
  4. Atomic save → wallpaper_target (tmpfile + rename).
[fly_dm_greeter]
update_wallpaper = true
wallpaper_target = "/usr/share/wallpapers/fly-default-light.jpg"
wallpaper_backup = "/var/lib/tessera/wallpaper.orig.jpg"
wallpaper_font = "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"
wallpaper_font_size = 64
wallpaper_text_color = "#000000"
wallpaper_gravity = "south" # north | south | east | west | center
wallpaper_offset_x = 0 # пиксели от gravity-anchor по горизонтали
wallpaper_offset_y = 120 # пиксели от gravity-anchor (для south — вверх)
template_ru = "Банкомат %n host_id={host_id_short} ({source})"
template_en = "ATM %n host_id={host_id_short} ({source})"

Pure Rust: crate image для JPG I/O + ab_glyph для растеризации шрифта. Без native deps (no ImageMagick / no Pango). Failures → log-and-continue, auth-flow никогда не блокируется ошибкой wallpaper writer’а.

Daemon не редактирует settings.ini — этим управляет оператор/Ansible. Если на хосте включён сильный color_overlay или blur — текст может быть невидим.

Baseline для production-банкомата:

/etc/X11/fly-dm/fly-modern/settings.ini
[background]
path=/usr/share/wallpapers/fly-default-light.jpg
color_overlay=0,0,0,30
[background][blur]
enable=false

После правки settings.ini:

Окно терминала
sudo systemctl restart fly-dm

После правки [fly_dm_greeter] в config.toml:

Окно терминала
sudo systemctl restart tessera

После рестарта daemon’а:

Окно терминала
sudo journalctl -u tessera -g fly_dm_greeter -n 20

Ожидаемая запись — одна INFO fly-dm wallpaper update finished (target tessera.fly_dm_greeter) с полем outcome: Wrote { backed_up: true } на первом запуске, дальше backed_up: false; Disabled — если update_wallpaper = false. Любая ошибка (нет прав, битый JPG, отсутствующий шрифт — поставить fonts-dejavu-core) — WARN fly-dm wallpaper update failed (continuing), демон продолжает работу.

Затем визуально на экране login fly-dm: внизу должна появиться строка Банкомат astra184 host_id=a1b2c3d4 (DmiBoardSerial).

См. troubleshooting.md раздел «fly-dm не показывает host_id на экране входа».

  • install.md — установка tessera целиком.
  • configuration.md — справочник по config.toml.
  • clone-image.md §2.4 — настройка wallpaper на эталоне перед снятием образа.