Files

5.2 KiB
Raw Permalink Blame History

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.