curtain/.github/wiki/Installation.md

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
```