Zwei Anzeigen für einen Handgriff sind eine zu viel

Apples eigene Einblendung lässt sich aushängen, ohne Root und ohne SIP
anzufassen: `com.apple.OSDUIHelper` liegt in der GUI-Domäne des angemeldeten
Benutzers, nicht im System. `launchctl bootout` dort hinein genügt.

Standardmäßig aus, denn es verschwindet **jede** Einblendung — auch Helligkeit
und Feststelltaste, und für die Feststelltaste hat Onyx keinen Ersatz. Beim
Beenden wird wieder eingehängt: eine Einstellung darf nicht überleben, was sie
eingestellt hat.

Dazu zwei Fehler im Anlernen behoben. Der Posenname stand als roher Schlüssel da
— die Zeichenketten liegen im Bündel von `FaceProvider`, gesucht wurden sie im
Hauptbündel. Und „Gesicht vergleichen" blieb nach dem Anlernen grau, weil
`isEnrolled` bei jedem Aufruf den Schlüsselbund las: richtig, aber für SwiftUI
unsichtbar, weil es nichts gab, woran eine Ansicht die Änderung hätte bemerken
können.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-05 22:26:41 +02:00
co-authored by Claude Opus 5
parent fd29df51cf
commit a3399d3a96
9 changed files with 221 additions and 8 deletions
+11
View File
@@ -189,6 +189,11 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
}
// Ohne diese Zeile wäre der Schalter in den Einstellungen eine
// Behauptung: gespeichert, aber ohne Wirkung.
if model.suppressSystemOSD { SystemOSD.suppress() }
model.onSuppressOSDChanged = { suppress in
suppress ? SystemOSD.suppress() : SystemOSD.restore()
}
lockController.usesFaceUnlock = model.faceUnlockEnabled
model.onFaceUnlockChanged = { [weak self] uses in
self?.lockController.usesFaceUnlock = uses
@@ -309,6 +314,11 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
}
func applicationWillTerminate(_ notification: Notification) {
// Apples Einblendung wieder einhängen. Ohne das säße jemand bis zum
// nächsten Abmelden ganz ohne Rückmeldung da — auch bei der Helligkeit,
// mit der Onyx nichts zu tun hat — und wüsste nicht, warum. Eine
// Einstellung darf nicht überleben, was sie eingestellt hat.
if model?.suppressSystemOSD == true { SystemOSD.restore() }
coordinator?.stop()
menuBar?.stop()
// Der Herzschlag endet damit. Der Helfer stellt die Lüfter binnen fünf
@@ -650,6 +660,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
}
@objc private func quit() { NSApp.terminate(nil) }
}
/// Der Inhalt des Panels. Liest `model.layout` und zeichnet sich damit neu,