-`greeter.rs` — GTK4 UI (Overlay-Layout), Login-Flow via greetd IPC (Multi-Stage-Auth für fprintd), Faillock-Warnung, Power-Confirm (Inline-Bestätigung vor Reboot/Shutdown, wie moonlock), Avatar-Cache, Last-User/Last-Session Persistence (0o700 Dirs, 0o600 Files)
-`greeter.rs` — GTK4 UI (overlay layout), login flow via greetd IPC (multi-stage auth for fprintd), faillock warning, power confirm (inline confirmation before reboot/shutdown, like moonlock), avatar cache, last-user/last-session persistence (0o700 dirs, 0o600 files)
-`main.rs` — Entry Point, GTK App, Layer Shell Setup, ein Greeter-Fenster auf dem fokussierten Output (kein `set_monitor`), `KeyboardMode::Exclusive`, systemd-journal-logger
-`main.rs` — entry point, GTK app, Layer Shell setup, one greeter window on the focused output (no`set_monitor`), `KeyboardMode::Exclusive`, systemd-journal-logger
- **TOP Layer statt OVERLAY**: Greeter läuft unter greetd, nicht über Waybar
- **TOP layer instead of OVERLAY**: the greeter runs under greetd, not above Waybar
- **GResource-Bundle**: CSS, Wallpaper und Default-Avatar sind in die Binary kompiliert
- **GResource bundle**: CSS, wallpaper and default avatar are compiled into the binary
- **Async Login**: `glib::spawn_future_local` + `gio::spawn_blocking`statt raw Threads
- **Async login**: `glib::spawn_future_local` + `gio::spawn_blocking`instead of raw threads
- **Socket-Cancellation**: `Arc<Mutex<Option<UnixStream>>>` + `AtomicBool` für saubere Abbrüche
- **Socket cancellation**: `Arc<Mutex<Option<UnixStream>>>` + `AtomicBool` for clean cancellation
- **Avatar-Cache**: `HashMap<String, gdk::Texture>` in `Rc<RefCell<GreeterState>>`
- **Avatar cache**: `HashMap<String, gdk::Texture>` in `Rc<RefCell<GreeterState>>`
- **GPU-Blur via GskBlurNode**: `Snapshot::push_blur()` + `GskRenderer::render_texture()` im`connect_realize`Callback — kein CPU-Blur, kein Disk-Cache, kein `image`-Crate. Blurred Texture wird per`Rc<RefCell<Option<gdk::Texture>>>` über alle Monitore gecacht (1x GPU-Renderpass statt N).
- **GPU blur via GskBlurNode**: `Snapshot::push_blur()` + `GskRenderer::render_texture()` in the`connect_realize`callback — no CPU blur, no disk cache, no`image` crate. The blurred texture is cached across all monitors via`Rc<RefCell<Option<gdk::Texture>>>` (1 GPU renderpass instead of N).
- **Fingerprint via greetd Multi-Stage PAM**: fprintd D-Bus nur als Probe (Gerät/Enrollment), eigentliche Verifizierung läuft über PAM im greetd-Auth-Loop. `auth_message_type: "secret"` → Passwort, alles andere → `None` (PAM entscheidet). 60s Socket-Timeout bei fprintd. Device-Proxy in `GreeterState` gecacht, Generation-Counter gegen Race Conditions bei schnellem User-Switch.
- **Fingerprint via greetd multi-stage PAM**: fprintd D-Bus only as a probe (device/enrollment), the actual verification runs through PAM in the greetd auth loop. `auth_message_type: "secret"` → password, everything else → `None` (PAM decides). 60s socket timeout for fprintd. Device proxy cached in `GreeterState`, generation counter against race conditions on fast user switch.
- **GTK-Theme-Validierung**: Nur alphanumerisch + `_-+.`erlaubt, verhindert Path-Traversal über Config
- **GTK theme validation**: only alphanumeric + `_-+.`allowed, prevents path traversal via config
- **Cursor-Theme via GtkSettings**: GTK4 unter greetd liest`XCURSOR_THEME` env nicht zuverlässig — Cursor wird via `gtk::Settings::set_gtk_cursor_theme_name()` gesetzt, analog zu`gtk-theme`. Gleiche Validierung (`is_valid_gtk_theme`) gegen Path-Traversal.
- **Cursor theme via GtkSettings**: GTK4 under greetd does not read the`XCURSOR_THEME` env reliably — the cursor is set via `gtk::Settings::set_gtk_cursor_theme_name()`, analogous to`gtk-theme`. Same validation (`is_valid_gtk_theme`) against path traversal.
- **Testbare Persistence**: `save_*_to`/`load_*_from`Varianten mit konfigurierbarem Pfad für Unit-Tests
- **Testable persistence**: `save_*_to`/`load_*_from`variants with a configurable path for unit tests
- **Shared Wallpaper Texture**: `gdk::Texture`wird einmal in `load_background_texture()`dekodiert und per Ref-Count an alle Fenster geteilt — vermeidet redundante JPEG-Dekodierung pro Monitor
- **Shared wallpaper texture**: the`gdk::Texture`is decoded once in `load_background_texture()`and shared by ref-count across all windows — avoids redundant JPEG decoding per monitor
- **Wallpaper-Validierung**: GResource-Zweig via `resources_lookup_data()` + `from_bytes()` (kein Abort bei fehlendem Pfad), Dateigröße-Limit 50 MB, non-UTF-8-Pfade → `None`
- **Wallpaper validation**: GResource branch via `resources_lookup_data()` + `from_bytes()` (no abort on a missing path), file-size limit 50 MB, non-UTF-8 paths → `None`
- **Error-Detail-Filterung**: GDK/greetd-Fehlerdetails nur auf`debug!`-Level, `warn!`ohne interne Details — verhindert Systeminfo-Leak ins Journal
- **Error-detail filtering**: GDK/greetd error details only at`debug!` level, `warn!`without internal details — prevents system-info leak into the journal
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.