mirror of
https://github.com/acamarata/curtain.git
synced 2026-07-01 03:04:25 +00:00
79 lines
2.7 KiB
Markdown
79 lines
2.7 KiB
Markdown
# Installation
|
|
|
|
## Prerequisites
|
|
|
|
- macOS 13 or later (Apple Silicon recommended).
|
|
- Screen Sharing enabled in System Settings > General > Sharing > Screen Sharing.
|
|
- Admin rights on the machine (the install script needs one sudo prompt).
|
|
|
|
## Install
|
|
|
|
```bash
|
|
git clone https://github.com/acamarata/curtain.git
|
|
cd curtain
|
|
./Scripts/install.sh
|
|
```
|
|
|
|
The script does the following in one go:
|
|
|
|
| What it sets up | Where | Why |
|
|
|---|---|---|
|
|
| `Curtain.app` bundle | `/Applications/Curtain.app` | Ad-hoc codesigns the bundle so TCC (Accessibility) grants a stable identity. |
|
|
| Login LaunchAgent | `~/Library/LaunchAgents/com.acamarata.curtain.plist` | Starts Curtain automatically when you log in. |
|
|
| Root helper | `/usr/local/bin/curtain-endsession` | Lets Curtain kill the Screen Sharing connection (owned by root) without a password prompt. |
|
|
| Sudoers rule | `/etc/sudoers.d/curtain-endsession` | NOPASSWD for the helper only. Requires one admin prompt during install. |
|
|
|
|
After the script finishes, Curtain starts automatically and a 👁 icon appears in the menu bar.
|
|
|
|
## Grant Accessibility
|
|
|
|
Curtain needs Accessibility permission to block physical keyboard and mouse input. Without it the curtain still covers the screen, but desk input reaches your apps.
|
|
|
|
1. Open **System Settings > Privacy & Security > Accessibility**.
|
|
2. Find **Curtain** in the list and turn it on.
|
|
3. Relaunch Curtain: `launchctl kickstart -k gui/$(id -u)/com.acamarata.curtain`
|
|
|
|
If Curtain does not appear in the Accessibility list, run:
|
|
|
|
```bash
|
|
open -a Curtain
|
|
```
|
|
|
|
Then check again.
|
|
|
|
## Set a password
|
|
|
|
From the menu-bar icon, choose **Set Password…** and type the password you want to use at the desk to end a remote session.
|
|
|
|
If you never set a password, the default is `curtain`.
|
|
|
|
Passwords are stored as a salted SHA-256 hash in `~/Library/Application Support/Curtain/config.json`. The plaintext is never saved.
|
|
|
|
## Mark DisplayLink monitors (if you use them)
|
|
|
|
If you have any DisplayLink USB monitors, choose **Mark Current Externals as DisplayLink** from the menu. This tells Curtain to use a different cover mode for those displays.
|
|
|
|
To see which display is which first, choose **Identify Displays** — each monitor flashes its index number and serial for six seconds.
|
|
|
|
See [How It Works — DisplayLink](How-It-Works#displaylink) for why this matters.
|
|
|
|
## Uninstall
|
|
|
|
```bash
|
|
./Scripts/uninstall.sh
|
|
```
|
|
|
|
This removes the app bundle, LaunchAgent, helper binary, and sudoers rule.
|
|
|
|
## Manual LaunchAgent management
|
|
|
|
```bash
|
|
# Stop
|
|
launchctl unload ~/Library/LaunchAgents/com.acamarata.curtain.plist
|
|
|
|
# Start
|
|
launchctl load ~/Library/LaunchAgents/com.acamarata.curtain.plist
|
|
|
|
# Restart
|
|
launchctl kickstart -k gui/$(id -u)/com.acamarata.curtain
|
|
```
|