5.2 KiB
Code-Review – 23.09.2026
Geprüft wurde der ursprüngliche Stand 73e727e (Version 0.1.0). Die folgenden
Befunde wurden für Version 0.2.0 behoben. Es gab noch keine vorhandene Git-Historie;
der gelieferte Stand wurde deshalb vor Änderungen als eigener Commit gesichert.
| Priorität | Befund im Ausgangscode | Auswirkung | Korrektur |
|---|---|---|---|
| Hoch | revive-monitor-fix.sh: kein EXIT-/Signal-Trap nach dem ersten chvt |
Abbruch oder gescheiterter Rückwechsel kann den Benutzer auf einer anderen Konsole lassen. | Rückkehr-Trap, Prüfung beider sudo-Berechtigungen, Zeitlimits und ein Notfall-Rückkehrversuch. |
| Hoch | Nur der Watcher prüft eine aktive Wayland-Sitzung, danach mehrere Sekunden Wartezeit | Bei Abmeldung oder Sitzungswechsel kann die Recovery eine inzwischen fremde VT aktivieren; direkte Helper-Aufrufe umgehen den Schutz. | Eigenständige Helper-Prüfung, UID/seat0/VT-Abgleich und erneute Prüfung unmittelbar vor dem Wechsel. |
| Hoch | systemd erhält keine Hyprland-Instanz; hyprctl-Fehler werden ignoriert |
Der Dienst kann auf die falsche/keine Instanz zugreifen und trotzdem VTs wechseln bzw. Erfolg melden. | Dokumentierter Login-Hook, Umgebungsimport im Installer, IPC-/Monitorprüfung und propagierte Fehler. |
| Mittel | /tmp/revive-monitor als gemeinsamer Fallback; Fehler beim Lock-Öffnen ungeprüft |
Benutzerübergreifende Kollisionen, Symlink-Ziele und unwirksame Sperren möglich. | Nur privates, eigenes Runtime-Verzeichnis mit Modus 0700; kein /tmp-Fallback; Lockfehler führen zum Abbruch. |
| Mittel | Watcher-Pipeline ohne pipefail, EOF ergibt reguläres Ende |
udevadm kann ausfallen, ohne dass Restart=on-failure den Dienst neu startet. |
Pipeline-Status erfassen; jedes unerwartete Stream-Ende endet mit Fehlerstatus. |
| Mittel | Watcher meldet nach jedem Helper-Aufruf Erfolg; Zeit-/Monitorwerte ungeprüft | Diagnose verschleiert echte Fehler; fehlerhafte Einstellungen können Schutz- und Wartefunktionen beeinträchtigen. | Statusabhängige Logs, begrenzte Integer-Werte, erlaubte Output-Namen. |
| Mittel | Installer startet sofort; enable --now startet aktive Dienste bei Updates nicht neu; uneinheitliches XDG; globales reset-failed im Deinstaller |
Aktivierung vor Konfiguration, alter Prozess trotz neuer Dateien, falscher Unit-Pfad, Löschen fremder Fehlerzustände. | Explizites --start, Stop vor Dateiaustausch, Restart bei Aktivierung, konsistente XDG-Pfade, Root-Verweigerung und gezieltes Zurücksetzen. |
Validierung
- 25 bestandene Verhaltenstests mit echten Bash-Prozessen und simulierten loginctl-, hyprctl-, udev-, sudo- und systemd-Befehlen; keine realen VT-Wechsel.
- Abgedeckt: Erfolg, Vor-Login-Schutz, fremde Benutzer/Seats/Desktops, falsche VT, Sitzungswechsel während der Wartezeit, IPC-/Output-Fehler, fehlende Rechte, Rückkehrfehler und Signalbehandlung, Runtime-/Symlink-Schutz, Konfiguration, parallele Recovery, Hotplug-Bursts, Stream-Ende und Fehlerprotokollierung.
- Installation, wiederholte Installation, Update-Aktivierung und Deinstallation unter temporärem HOME/XDG; vorhandene Konfiguration bleibt erhalten.
- Bash-Syntax und ShellCheck 0.11.0 ohne Befunde; statische systemd-Prüfung mit auf das Checkout umgebogenem ExecStart, ohne Installation des Dienstes auf diesem Desktop.
- Release aus committed HEAD; Archivinhalt, Prüfsummen und entpackter Installer werden separat geprüft.
Verbleibende Grenzen
Ein Shell-Trap hilft nicht gegen SIGKILL, Stromausfall oder dauerhafte Kernel-/sudo- Fehler. Prüfung und VT-Wechsel sind nicht atomar. Die temporäre VT kann einen anderen Konsoleninhalt zeigen. Unterstützt ist eine lokale Hyprland-Sitzung auf seat0; mehrere gleichzeitige Desktops desselben Benutzers sind nicht abgedeckt.
DRM-Hotplug identifiziert nicht zuverlässig den betroffenen Monitor. Der Cooldown kann einen echten schnellen Rückwechsel unterdrücken. Das bleibt eine bewusste Einschränkung dieses hardwareabhängigen Workarounds und ist in README beschrieben.
Ein realer Test von HDMI-Eingangswechsel, Ab-/Anmeldung und Boot-Verhalten wurde im ursprünglichen Review für 0.2.0 nicht ausgeführt. Der anschließende Praxistest für 0.2.1 ist im folgenden Nachtrag dokumentiert.
Nachtrag: Lua-Korrektur und Praxistest für 0.2.1
Die Prüfung am Desktop zeigte, dass Hyprland 0.56.2 mit Lua-Konfiguration die
alten dispatch dpms on-/dispatch focusmonitor-Befehle ablehnt. Version 0.2.0
brach dadurch vor dem VT-Wechsel ab. Die bisherigen Mocks hatten beliebige
Dispatch-Aufrufe akzeptiert und diesen Fehler nicht erkannt.
Version 0.2.1 erkennt den aktiven Konfigurationsanbieter über hyprctl -j status
und verwendet die passenden Lua- oder hyprlang-Befehle. Die Mocks prüfen nun die
Befehlssyntax; fehlgeschlagene Refresh-Aufrufe protokollieren Operation,
Exitstatus und Fehlerantwort. Alle 30 Verhaltenstests sowie Bash-Syntaxprüfung
und ShellCheck 0.11.0 waren erfolgreich.
Der vollständige manuelle Recovery-Lauf am Desktop kehrte auf die grafische VT1
zurück und meldete Recovery completed for HDMI-A-2. Anschließend bestätigte
der Betreiber am 23.09.2026 den erfolgreichen physischen HDMI-Eingangswechsel.
Testumgebung und noch nicht separat bestätigte Prüfungen sind unter
Hardware validation festgehalten.