Skip to content

v1.6.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 09:57
· 15 commits to main since this release

Disabling a display now turns it off for real

Until now, "disabling" a display mirrored it onto another one: the panel stayed lit showing a copy of your main screen and kept its place in the arrangement. SimpleDisplay now uses the private CGSConfigureDisplayEnabled API (the same mechanism displayplacer uses): the display goes dark and leaves the desktop while staying connected, and comes back with one click. Based on PR #1 by @zhigang1992, thank you.

  • A disabled display drops out of macOS's display list, so SimpleDisplay keeps a greyed-out row for it (persisted across launches) with a working toggle. Rows are reconciled by display UUID, so a display that comes back with a different ID, or an ID that macOS reassigned to another monitor, can't be toggled by mistake.
  • The HiDPI mode a display had before being turned off is restored when it comes back.
  • Turning off your last visible display (only virtual displays would remain) is allowed but guarded: a banner counts down 15 seconds and turns it back on unless you click Keep off. Only a confirmed choice is re-applied on launch; if the app quits mid-countdown it brings the display back on the next start.

Mirroring is a separate action

Prefer to keep a monitor on? The new mirror button next to each physical display's toggle mirrors it onto the main display, and back. Mirrors are persisted, re-applied on launch and dissolved before sleep. Virtual displays can't be mirror sources: on macOS 26 that crashes the window server (verified, see docs/real-disable-vm), so the app refuses it. Mirroring a physical display onto a virtual one works and is the remote-desktop use case.

Automation

  • New simpledisplay:// actions: mirror, unmirror, and disable?…&headless=true to confirm turning off the last visible display up front (remote sessions, scripts).
  • simpledisplayctl gains enable, disable [--headless], mirror and unmirror.
  • simpledisplay://status JSON includes mirrorOf.

Bug fixes

  • Virtual displays keep their identity across launches: the serial slot is now persisted per display, so removing one virtual display and relaunching no longer makes another inherit its identity and the mode macOS remembered for it (HiDPI lost).
  • Persisted display state is applied only once the display topology has settled, so virtual displays restored at launch are no longer skipped.
  • Removing a virtual display that was disabled no longer leaves a dead row or a stale persisted flag behind.

Look and feel

  • The menu bar icon is now the app's own glyph (a template image that adapts to light and dark menu bars) instead of the generic system symbol; the popover and Settings show the real app icon.

Notes

  • CGSConfigureDisplayEnabled is undocumented; like CGVirtualDisplay, it may change in future macOS versions.
  • Verified on a clean macOS 26.6.2 VM with 67 scripted checks (docs/real-disable-vm/). Sleep/wake with real monitors could not be exercised in the VM; please report anything odd.

Full Changelog: v1.5.0...v1.6.0