2026-09-27 12:28:46 +02:00
|
|
|
#!/usr/bin/bash
|
|
|
|
|
set -eoux pipefail
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
# Transaction: Login-Stack (greetd + tuigreet-Fallback + Noctalia-Greeter)
|
|
|
|
|
###############################################################################
|
|
|
|
|
# - greetd ist der Display-Manager (leicht, Wayland-nativ).
|
|
|
|
|
# - noctalia-greeter (aus Terra, siehe 10-repos.sh) ist die Login-UI in
|
|
|
|
|
# Noctalia-Optik. Braucht ZWINGEND greetd als Unterbau.
|
|
|
|
|
# - tuigreet bleibt als sparsamer Fallback, falls der grafische Greeter
|
|
|
|
|
# je streikt (in /etc/greetd/config.toml per Kommentar umschaltbar).
|
|
|
|
|
###############################################################################
|
|
|
|
|
echo "Installing login stack (greetd + Noctalia greeter)..."
|
|
|
|
|
|
|
|
|
|
# greetd + D-Bus + polkit sind harte Voraussetzungen des Noctalia-Greeters
|
|
|
|
|
# (https://docs.noctalia.dev/greeter/installation/) und werden hier explizit
|
|
|
|
|
# installiert statt von der Basis vorausgesetzt.
|
|
|
|
|
dnf5 install -y \
|
|
|
|
|
--allowerasing \
|
|
|
|
|
greetd \
|
|
|
|
|
greetd-selinux \
|
|
|
|
|
dbus-daemon \
|
|
|
|
|
polkit \
|
|
|
|
|
tuigreet \
|
2026-09-27 21:41:07 +02:00
|
|
|
noctalia-greeter \
|
|
|
|
|
fprintd
|
2026-09-27 12:28:46 +02:00
|
|
|
|
|
|
|
|
dnf5 clean all
|
|
|
|
|
|
2026-09-27 21:41:07 +02:00
|
|
|
# Fingerprint (Framework u.a.): System-Auth per authselect erweitern, damit
|
|
|
|
|
# sudo/Polkit/login-Pfade Finger anbieten (nach fprintd-enroll auf Hardware).
|
|
|
|
|
# Greeter-PAM (/etc/pam.d/greetd) bewusst NICHT angefasst: Feinschliff erst
|
|
|
|
|
# auf echter Hardware mit Reader testbar, kein VM-Test moeglich.
|
|
|
|
|
authselect enable-feature with-fingerprint || echo "WARN: with-fingerprint nicht aktivierbar - auf Hardware pruefen"
|
|
|
|
|
|
2026-09-27 12:28:46 +02:00
|
|
|
# accounts-daemon: liefert User-Avatare auf dem Login-Screen.
|
|
|
|
|
systemctl enable accounts-daemon.service
|
|
|
|
|
|
2026-09-27 18:48:10 +02:00
|
|
|
# Service-Account fuer die Greeter-Session. Weder greetd- noch Greeter-Paket
|
|
|
|
|
# legen ihn verlaesslich an - ohne ihn stirbt greetd ("user not found").
|
|
|
|
|
# WICHTIG (bootc/altfiles): video/render existieren nur in /usr/lib/group
|
|
|
|
|
# (read-only Image-Default). useradd -G scheitert daran ("group does not
|
|
|
|
|
# exist"), weil es die Mitgliedschaft nicht nach /etc mergen kann.
|
|
|
|
|
# systemd-sysusers ist das einzige Werkzeug, das den Split korrekt schreibt.
|
|
|
|
|
# Build-Zeit (statt Erst-Boot): Eintrag ab Boot 1 vorhanden, kein Race.
|
|
|
|
|
mkdir -p /usr/lib/sysusers.d
|
|
|
|
|
cat > /usr/lib/sysusers.d/noctalia-greeter.conf <<'EOF'
|
|
|
|
|
u greeter - "Greeter" - /usr/sbin/nologin
|
|
|
|
|
m greeter video
|
|
|
|
|
m greeter render
|
|
|
|
|
EOF
|
|
|
|
|
systemd-sysusers /usr/lib/sysusers.d/noctalia-greeter.conf
|
|
|
|
|
id greeter
|
|
|
|
|
|
2026-09-27 13:21:20 +02:00
|
|
|
# System-Setup des Greeters: richtet u.a. /etc/pam.d/greetd ein.
|
2026-09-27 12:28:46 +02:00
|
|
|
# Pfad laut PACKAGING.md: share/noctalia-greeter/setup_greeter_system.sh
|
|
|
|
|
if [[ -x /usr/share/noctalia-greeter/setup_greeter_system.sh ]]; then
|
|
|
|
|
/usr/share/noctalia-greeter/setup_greeter_system.sh || true
|
|
|
|
|
else
|
|
|
|
|
echo "WARN: setup_greeter_system.sh nicht gefunden - Greeter-State wird erst beim Boot angelegt"
|
|
|
|
|
fi
|
|
|
|
|
|
2026-09-27 18:48:10 +02:00
|
|
|
# GNOME-Keyring beim Login still mit entsperren (wie GDM/SDDM). greetd
|
|
|
|
|
# authentifiziert via PAM, daher kann pam_gnome_keyring das Login-Passwort
|
|
|
|
|
# abgreifen und den "login"-Keyring oeffnen - ohne den Dialog
|
|
|
|
|
# "Choose password for new keyring" bei der ersten Secrets-Anfrage.
|
|
|
|
|
# Nach dem Greeter-Setup anhaengen (dessen PAM-Anpassungen bleiben vorn).
|
|
|
|
|
if ! grep -q 'pam_gnome_keyring\.so' /etc/pam.d/greetd 2>/dev/null; then
|
|
|
|
|
cat >> /etc/pam.d/greetd <<'EOF'
|
|
|
|
|
auth optional pam_gnome_keyring.so
|
|
|
|
|
session optional pam_gnome_keyring.so auto_start
|
|
|
|
|
EOF
|
|
|
|
|
fi
|
|
|
|
|
|
2026-09-27 13:21:20 +02:00
|
|
|
# bootc-Hygiene: /var-Inhalte aus dem Build werden beim Deployment verworfen
|
|
|
|
|
# und wuerden nur den var-tmpfiles-Lint triggern. Die /etc-Anteile des Setups
|
|
|
|
|
# (PAM) bleiben erhalten; /var/lib/noctalia-greeter wird zur Laufzeit via
|
|
|
|
|
# tmpfiles.d angelegt (Paket-eigen + unsere Seed-Regel).
|
|
|
|
|
rm -rf /var/lib/noctalia-greeter
|
|
|
|
|
|
2026-09-27 14:20:31 +02:00
|
|
|
# Terra nach der Installation wieder entfernen: Der Greeter ist das einzige
|
|
|
|
|
# Paket von dort (includepkgs in 10-repos.sh), Updates kommen ueber
|
|
|
|
|
# Image-Rebuilds (Atomic-Prinzip: kein dnf-Upgrade einzelner Pakete).
|
|
|
|
|
# So sieht weder ein spaeterer Layer noch BIB-Depsolve noch das laufende
|
|
|
|
|
# System das Dritt-Repo je wieder (keine CDN-Hickups, kein Shadowing).
|
|
|
|
|
rm -f /etc/yum.repos.d/terra*.repo
|
|
|
|
|
dnf5 clean all
|
|
|
|
|
|
2026-09-27 12:28:46 +02:00
|
|
|
# Alte Display-Manager explizit aus (zwei DMs = Blackscreen).
|
|
|
|
|
# Auf fedora-bootc-Basis existieren sie i.d.R. nicht -> Fehler tolerieren.
|
|
|
|
|
systemctl disable sddm.service gdm.service lightdm.service 2>/dev/null || true
|
|
|
|
|
systemctl enable greetd.service
|
|
|
|
|
systemctl set-default graphical.target || true
|