Skip to content

Installation

Aric Camarata edited this page Jun 23, 2026 · 1 revision

Installation

Prerequisites

  • macOS 13 (Ventura) or later. Apple Silicon recommended.
  • Screen Sharing enabled: System Settings → General → Sharing → Screen Sharing.

Install

  1. Download Curtain-1.0.0.dmg from the GitHub Releases page.
  2. Open the DMG.
  3. Drag Curtain.app into the Applications folder.
  4. 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.

First launch: Gatekeeper

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.app

Then 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.

Grant Accessibility

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:

  1. Open System Settings → Privacy & Security → Accessibility.
  2. Find Curtain in the list and turn it on.
  3. 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.

Open at login

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.

Set a password

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.

Disconnect helper (optional)

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.

Mark DisplayLink monitors (if you have them)

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.

Confirm Curtain is running

pgrep -fl Curtain

You can also open Activity Monitor and search for Curtain.

Uninstall

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.

Clone this wiki locally