nevaforget 48d363bb18
All checks were successful
Update PKGBUILD version / update-pkgver (push) Successful in 3s
fix: ship polkit rule so greeter user can reboot/power off (v0.8.3)
The rule that grants the greeter user authorization for
org.freedesktop.login1.{reboot,power-off} lived only in the moonarch
repo and was never installed by any PKGBUILD. On a fresh install the
reboot/shutdown buttons silently failed because greetd's greeter
session is inactive in logind and polkit denies inactive sessions by
default.

Move the rule into the moongreet source tree where it belongs and
ship it via moongreet-git.
2026-04-21 09:11:59 +02:00

2.5 KiB
Raw Permalink 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 + hotplug — Full greeter UI on all monitors (keyboard input on first), hotplugged monitors get windows automatically
  • GPU blur — Background blur via GskBlurNode (shared cache across 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)
  • Journal loggingjournalctl -t moongreet, debug level via MOONGREET_DEBUG env var
  • Password wiping — Zeroize on drop

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"
    
  4. Install the polkit rule so the greeter user can reboot / power off:

    sudo install -Dm644 config/polkit/50-moongreet-power.rules \
        /etc/polkit-1/rules.d/50-moongreet-power.rules
    

    Without this rule, loginctl reboot / loginctl poweroff fail because greetd's greeter session is inactive in logind.

Development

# Run tests
cargo test

# Build release
cargo build --release

# Run locally (without greetd, disables layer-shell)
MOONGREET_NO_LAYER_SHELL=1 ./target/release/moongreet

License

MIT