greetd-moongreet/README.md
nevaforget a462b2cf06 feat: add fprintd fingerprint authentication via greetd multi-stage PAM (v0.6.0)
Fingerprint auth was missing because moongreet rejected multi-stage
auth_message sequences from greetd. With pam_fprintd.so in the PAM
stack, greetd sends non-secret prompts for fingerprint and secret
prompts for password — moongreet now handles both in a loop.

- Replace single-pass auth with multi-stage auth_message loop
- fprintd D-Bus probe (gio::DBusProxy) for UI feedback only
- Fingerprint label shown when device available and fingers enrolled
- 60s socket timeout when fingerprint available (pam_fprintd scan time)
- Config option: [appearance] fingerprint-enabled (default: true)
- Fix: password entry focus loss after auth error (grab_focus while
  widget was insensitive — now re-enable before grab_focus)
2026-03-29 13:47:57 +02:00

1.9 KiB
Raw Blame History

Moongreet

A greetd greeter for Wayland, built with Rust + GTK4 + gtk4-layer-shell. Part of the Moonarch ecosystem.

Features

  • greetd IPC — Communicates via $GREETD_SOCK (length-prefixed JSON)
  • User list — Parsed from /etc/passwd (UID 100065533)
  • Avatars — AccountsService icons, ~/.face fallback, default SVG with theme tinting
  • Sessions — Discovered from /usr/share/wayland-sessions/ and /usr/share/xsessions/
  • Last user/session — Remembered in /var/cache/moongreet/
  • Power actions — Reboot / Shutdown via loginctl
  • Layer Shell — Fullscreen via gtk4-layer-shell (TOP layer)
  • Multi-monitor — Greeter on primary, wallpaper on all monitors
  • i18n — German and English (auto-detected from system locale)
  • Faillock warning — Warns after 2 failed attempts, locked message after 3
  • Fingerprint — fprintd support via greetd multi-stage PAM (configurable)

Requirements

  • GTK 4
  • gtk4-layer-shell (for Wayland fullscreen)
  • greetd

Building

cargo build --release

Installation

# Install binary
sudo install -Dm755 target/release/moongreet /usr/bin/moongreet

# Install config
sudo mkdir -p /etc/moongreet
sudo cp config/moongreet.toml /etc/moongreet/moongreet.toml

System Setup

  1. Edit /etc/moongreet/moongreet.toml — set an absolute path for the wallpaper.

  2. Create cache directory:

    sudo mkdir -p /var/cache/moongreet/last-session
    sudo chown greeter:greeter /var/cache/moongreet
    
  3. Configure greetd (/etc/greetd/config.toml):

    [default_session]
    command = "niri -c /etc/greetd/niri-greeter.kdl"
    user = "greeter"
    

Development

# Run tests
cargo test

# Build release
cargo build --release

# Run locally (without greetd, needs LD_PRELOAD for layer-shell)
LD_PRELOAD=/usr/lib/libgtk4-layer-shell.so ./target/release/moongreet

License

MIT