-
Notifications
You must be signed in to change notification settings - Fork 0
Installation
- macOS 13 (Ventura) or later. Apple Silicon recommended.
- Screen Sharing enabled: System Settings → General → Sharing → Screen Sharing.
- Download
Curtain-1.0.0.dmgfrom the GitHub Releases page. - Open the DMG.
- Drag
Curtain.appinto theApplicationsfolder. - Launch Curtain from
/Applications.
On first launch an onboarding flow walks you through setup: Welcome → grant Accessibility → optional disconnect helper → optional password → finish. When it completes, the curtains icon appears in the menu bar.
Curtain is currently ad-hoc signed, not yet notarized. On a clean download macOS Gatekeeper blocks the first launch and reports the app is damaged or from an unidentified developer. This is expected for now.
Clear the quarantine flag once, then open the app normally:
xattr -dr com.apple.quarantine /Applications/Curtain.appThen double-click Curtain.app. Right-clicking and choosing Open is no longer enough on recent macOS, so use the command above. Once a notarized build ships, this step goes away and Curtain opens straight from the DMG.
Curtain needs Accessibility permission to block the desk keyboard and mouse. Without it, Curtain refuses to show the cover at all and posts a notification instead. This prevents putting up a screen that cannot be unlocked. The emergency hotkey Control + Option + Command + U always works regardless.
The onboarding flow deep-links you straight to the right pane. You can also open it yourself:
- Open System Settings → Privacy & Security → Accessibility.
- Find Curtain in the list and turn it on.
- Relaunch Curtain so the new permission takes effect.
If Curtain does not appear in the Accessibility list, launch it once from /Applications, then check again.
After every rebuild of a local ad-hoc build, re-grant Accessibility. Rebuilding produces a new code signature and macOS does not carry over the old grant automatically.
Curtain manages login startup itself with SMAppService. Turn on Open at login in the settings window. macOS tracks this under System Settings → General → Login Items, where you can also toggle it off. There is no LaunchAgent and no plist to manage by hand.
Open the settings window (click the menu-bar icon) and type a password in the Security section. This is what someone at the desk types to get past the curtain.
If you never set a password, the default is curtain. The password is stored as a salted PBKDF2-HMAC-SHA256 hash in UserDefaults. The plaintext is never saved.
The optional "disconnect the remote session" feature is off by default. When you enable it (in settings or during onboarding), Curtain registers a privileged helper through SMAppService and asks for one approval in System Settings. There is no sudoers rule.
Under the current ad-hoc build, this helper may fail to register. The privileged-helper path needs a notarized or Developer ID signed build to install cleanly. Until then, leave the feature off or expect the registration to be rejected.
If any external monitor is DisplayLink, open Settings → Displays and mark it as DisplayLink. This tells Curtain to use a capturable cover mode for that display.
Displays are identified by a stable UUID, so the marking survives reboots and reconnects. Detection works with both classic and high-performance Screen Sharing.
See How It Works for why this matters.
pgrep -fl CurtainYou can also open Activity Monitor and search for Curtain.
Quit Curtain, then drag Curtain.app from /Applications to the Trash.
If you had an older script-based install on this machine, Scripts/uninstall.sh in the repo cleans up any legacy LaunchAgent, helper binary, or sudoers rule left behind.