diff --git a/dist/main/system_handlers.js b/dist/main/system_handlers.js index 19faac5..2ab9281 100644 --- a/dist/main/system_handlers.js +++ b/dist/main/system_handlers.js @@ -367,9 +367,16 @@ function registerSystemHandlers() { electron_1.ipcMain.handle('native:set-display-layout', async (event, { mode, configStr }) => { if (os.platform() !== 'darwin') return { success: false, error: 'Display control only supported on macOS' }; - const binPath = electron_1.app.isPackaged - ? path.join(process.resourcesPath, 'bin', 'displayplacer') - : path.join(__dirname, '../../resources/bin/displayplacer'); + // Try bundled binary first; fall back to common Homebrew/system locations. + // Install on a dev/venue Mac via: brew install displayplacer + const _bin_candidates = electron_1.app.isPackaged + ? [path.join(process.resourcesPath, 'bin', 'displayplacer')] + : [ + path.join(__dirname, '../../resources/bin/displayplacer'), + '/opt/homebrew/bin/displayplacer', // Apple Silicon Homebrew + '/usr/local/bin/displayplacer', // Intel Homebrew + ]; + const binPath = _bin_candidates.find(p => fs.existsSync(p)) ?? _bin_candidates[0]; // Explicit config string always takes priority — allows manual override per device. if (configStr) { return await runExec(`"${binPath}" ${configStr}`); @@ -395,17 +402,17 @@ function registerSystemHandlers() { return { success: false, error: 'Could not parse primary display ID from displayplacer output' }; } const primary_id = primary_id_match[1]; - // Primary display unchanged; secondary display(s) get mirror:. + // Primary display unchanged; secondary display(s) get mirror_of_display:. const mirror_args = display_strings.map((s, i) => { if (i === 0) return `"${s}"`; - const without_existing_mirror = s.replace(/\s*mirror:\S+/g, '').trim(); - return `"${without_existing_mirror} mirror:${primary_id}"`; + const without_existing_mirror = s.replace(/\s*mirror_of_display:\S+/g, '').trim(); + return `"${without_existing_mirror} mirror_of_display:${primary_id}"`; }).join(' '); return await runExec(`"${binPath}" ${mirror_args}`); } if (mode === 'extend') { - const any_mirrored = display_strings.some(s => /\bmirror:\S+/.test(s)); + const any_mirrored = display_strings.some(s => /\bmirror_of_display:\S+/.test(s)); if (!any_mirrored) { // Already extended — re-apply current layout to ensure it is active. return await runExec(`"${binPath}" ${display_strings.map(s => `"${s}"`).join(' ')}`); @@ -413,7 +420,7 @@ function registerSystemHandlers() { // Remove mirror keys and compute side-by-side origins from each display's resolution. let x_offset = 0; const extend_args = display_strings.map((s) => { - const without_mirror = s.replace(/\s*mirror:\S+/g, '').trim(); + const without_mirror = s.replace(/\s*mirror_of_display:\S+/g, '').trim(); const res_match = without_mirror.match(/\bres:(\d+)x\d+/); const width = res_match ? parseInt(res_match[1]) : 1920; const updated = without_mirror.replace(/\borigin:\([^)]+\)/, `origin:(${x_offset},0)`); diff --git a/dist/main/system_handlers.js.map b/dist/main/system_handlers.js.map index aea191c..41c1912 100644 --- a/dist/main/system_handlers.js.map +++ b/dist/main/system_handlers.js.map @@ -1 +1 @@ -{"version":3,"file":"system_handlers.js","sourceRoot":"","sources":["../../src/main/system_handlers.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"system_handlers.js","sourceRoot":"","sources":["../../src/main/system_handlers.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/documentation/TODO_AGENTS.md b/documentation/TODO_AGENTS.md index 3560ec0..86d6f62 100644 --- a/documentation/TODO_AGENTS.md +++ b/documentation/TODO_AGENTS.md @@ -66,31 +66,46 @@ --- -## set_display_layout — displayplacer Setup & Status (updated 2026-05-20) +## set_display_layout — Setup & Status (updated 2026-05-20) -**Reference:** [jakehilborn/displayplacer](https://github.com/jakehilborn/displayplacer) +**Primary approach: `display_control` (native CoreGraphics — no Homebrew required)** +- Source: `scripts/display_control.m` (derived from OSIT MasterKey app, Ian Kohl 2019) +- Build: run `scripts/build-display-control.sh` on a Mac (requires Xcode CLT only) +- Output: `resources/bin/display_control` — commit this binary to the repo +- Uses `CGConfigureDisplayMirrorOfDisplay` — same CoreGraphics API macOS uses internally +- Supports 3+ displays; auto-detects all connected displays; no config string needed + +**Fallback approach: `displayplacer` (requires `brew install displayplacer` on each venue Mac)** +- Reference: [jakehilborn/displayplacer](https://github.com/jakehilborn/displayplacer) +- Still used when `display_control` binary is not present +- Also used for per-device `configStr` overrides (displayplacer-format strings in `event_device.data_json`) **Current state (2026-05-20):** -- ✅ Handler auto-detects displays via `displayplacer list` — no per-device `configStr` required for normal use -- ✅ Binary lookup order: `resources/bin/displayplacer` (bundled) → `/opt/homebrew/bin/displayplacer` (Apple Silicon Homebrew) → `/usr/local/bin/displayplacer` (Intel Homebrew) -- ✅ Correct `mirror_of_display:` syntax used (was `mirror:` — wrong, now fixed) +- ✅ Correct `mirror_of_display:` syntax used in displayplacer fallback (was `mirror:` — wrong, now fixed) - ✅ Failures logged to Electron console (`[Launcher] set_display_layout:`) instead of silently swallowed - ✅ **Display Mode toggle** added to Launcher config (Native OS section) — Extend/Mirror buttons always visible, no Technical Mode required +- ⏳ `display_control` binary not yet built — must be compiled on a Mac and committed -**One-time setup on each venue Mac:** +**To build `display_control` (do this on a Mac):** ```bash -brew install displayplacer +# One-time: install Xcode Command Line Tools if not already installed +xcode-select --install + +# Then: +./scripts/build-display-control.sh + +# Test it with a second display connected: +./resources/bin/display_control status +./resources/bin/display_control extend +./resources/bin/display_control mirror + +# Commit the binary: +git add resources/bin/display_control +git commit -m "build: add display_control binary (macOS CoreGraphics)" ``` -The binary is not bundled in the Electron build yet. Homebrew installs it to `/opt/homebrew/bin/` (Apple Silicon) or `/usr/local/bin/` (Intel) — both are in the fallback lookup chain. -**Bundling the binary (future):** -To ship displayplacer inside the `.app` bundle without requiring Homebrew on venue Macs: -1. Copy the `displayplacer` binary to `resources/bin/displayplacer` -2. Mark it executable: `chmod +x resources/bin/displayplacer` -3. Add to `package.json` `extraResources` so `@electron/packager` includes it - -**Optional per-device override (manual tuning):** +**Optional per-device override (displayplacer format, for edge cases):** For rooms where auto-detection produces the wrong result, store the raw configStr in `event_device.data_json`: ```json { @@ -98,10 +113,4 @@ For rooms where auto-detection produces the wrong result, store the raw configSt "displayplacer_config_mirror": "" } ``` -The handler accepts `configStr` and uses it directly, bypassing auto-detection. Pass it from the Svelte call site if needed. - -**displayplacer quick reference:** -- `displayplacer list` — prints current display info and a ready-to-run config string at the bottom -- `displayplacer "" ""` — applies layout -- Mirror syntax: add `mirror_of_display:` to the secondary display string -- Extend syntax: set `origin:(,0)` with non-overlapping x offsets per display +`configStr` is passed from the Svelte call site and uses the displayplacer fallback path directly. diff --git a/scripts/build-display-control.sh b/scripts/build-display-control.sh new file mode 100755 index 0000000..2c04fd8 --- /dev/null +++ b/scripts/build-display-control.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# scripts/build-display-control.sh +# Compile the display_control binary for macOS. +# +# Requirements: Xcode Command Line Tools +# xcode-select --install +# +# Run this on a Mac. Commit the resulting binary to resources/bin/ +# so it is bundled into the packaged Electron app without any Homebrew dependency. + +set -e + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +SRC="$SCRIPT_DIR/display_control.m" +OUT_DIR="$REPO_ROOT/resources/bin" +OUT_BIN="$OUT_DIR/display_control" + +if ! command -v clang &>/dev/null; then + echo "ERROR: clang not found." + echo "Install Xcode Command Line Tools: xcode-select --install" + exit 1 +fi + +mkdir -p "$OUT_DIR" + +echo "Building display_control..." +clang -framework Cocoa -framework Carbon \ + -o "$OUT_BIN" "$SRC" + +chmod +x "$OUT_BIN" + +echo "Built: $OUT_BIN" +echo "" +echo "Test it:" +echo " $OUT_BIN status" +echo " $OUT_BIN extend" +echo " $OUT_BIN mirror" +echo "" +echo "Once verified, commit resources/bin/display_control to the repo." diff --git a/scripts/display_control.m b/scripts/display_control.m new file mode 100644 index 0000000..d95e7bf --- /dev/null +++ b/scripts/display_control.m @@ -0,0 +1,149 @@ +/* + * display_control.m + * Native macOS CLI for programmatic display mirror/extend control. + * + * Derived from the OSIT MasterKey app (LegacyUtilities.m, Ian Kohl 2019). + * Uses CoreGraphics APIs — no external dependencies (no displayplacer/Homebrew required). + * + * Build: run scripts/build-display-control.sh on a Mac (requires Xcode Command Line Tools) + * Usage: display_control + */ + +#import +#include + +#define MAX_DISPLAYS 8 + +static int mirror_displays(void) { + CGDirectDisplayID onlineDspys[MAX_DISPLAYS] = {0}; + CGDisplayCount numOnline = 0; + + CGGetOnlineDisplayList(MAX_DISPLAYS, onlineDspys, &numOnline); + + if (numOnline < 2) { + fprintf(stderr, "No secondary display detected (%u online).\n", numOnline); + return 1; + } + + CGDirectDisplayID mainID = CGMainDisplayID(); + + CGDisplayConfigRef config; + CGError err = CGBeginDisplayConfiguration(&config); + if (err != kCGErrorSuccess) { + fprintf(stderr, "CGBeginDisplayConfiguration failed: %d\n", err); + return 1; + } + + BOOL any_configured = NO; + for (CGDisplayCount i = 0; i < numOnline; i++) { + if (onlineDspys[i] != mainID) { + err = CGConfigureDisplayMirrorOfDisplay(config, onlineDspys[i], mainID); + if (err != kCGErrorSuccess) { + fprintf(stderr, "CGConfigureDisplayMirrorOfDisplay failed: %d\n", err); + CGCancelDisplayConfiguration(config); + return 1; + } + any_configured = YES; + } + } + + if (!any_configured) { + CGCancelDisplayConfiguration(config); + fprintf(stderr, "No secondary displays to mirror.\n"); + return 1; + } + + err = CGCompleteDisplayConfiguration(config, kCGConfigurePermanently); + if (err != kCGErrorSuccess) { + fprintf(stderr, "CGCompleteDisplayConfiguration failed: %d\n", err); + return 1; + } + + printf("Mirrored %u display(s).\n", numOnline - 1); + return 0; +} + +static int extend_displays(void) { + CGDirectDisplayID onlineDspys[MAX_DISPLAYS] = {0}; + CGDirectDisplayID activeDspys[MAX_DISPLAYS] = {0}; + CGDisplayCount numOnline = 0, numActive = 0; + + CGGetOnlineDisplayList(MAX_DISPLAYS, onlineDspys, &numOnline); + CGGetActiveDisplayList(MAX_DISPLAYS, activeDspys, &numActive); + + if (numOnline < 2) { + fprintf(stderr, "No secondary display detected (%u online).\n", numOnline); + return 1; + } + + if (numActive >= numOnline) { + printf("Displays already extended.\n"); + return 0; + } + + CGDirectDisplayID mainID = CGMainDisplayID(); + + CGDisplayConfigRef config; + CGError err = CGBeginDisplayConfiguration(&config); + if (err != kCGErrorSuccess) { + fprintf(stderr, "CGBeginDisplayConfiguration failed: %d\n", err); + return 1; + } + + for (CGDisplayCount i = 0; i < numOnline; i++) { + if (onlineDspys[i] != mainID) { + // kCGNullDirectDisplay as master = un-mirror (extend) + err = CGConfigureDisplayMirrorOfDisplay(config, onlineDspys[i], kCGNullDirectDisplay); + if (err != kCGErrorSuccess) { + fprintf(stderr, "CGConfigureDisplayMirrorOfDisplay(null) failed: %d\n", err); + CGCancelDisplayConfiguration(config); + return 1; + } + } + } + + err = CGCompleteDisplayConfiguration(config, kCGConfigurePermanently); + if (err != kCGErrorSuccess) { + fprintf(stderr, "CGCompleteDisplayConfiguration failed: %d\n", err); + return 1; + } + + printf("Displays extended.\n"); + return 0; +} + +static void print_status(void) { + CGDirectDisplayID onlineDspys[MAX_DISPLAYS] = {0}; + CGDirectDisplayID activeDspys[MAX_DISPLAYS] = {0}; + CGDisplayCount numOnline = 0, numActive = 0; + + CGGetOnlineDisplayList(MAX_DISPLAYS, onlineDspys, &numOnline); + CGGetActiveDisplayList(MAX_DISPLAYS, activeDspys, &numActive); + + printf("online=%u active=%u %s\n", + numOnline, numActive, + (numOnline > 1 && numActive < numOnline) ? "mirrored" : "extended"); +} + +int main(int argc, const char * argv[]) { + @autoreleasepool { + if (argc < 2) { + fprintf(stderr, "Usage: display_control \n"); + return 1; + } + + const char *cmd = argv[1]; + + if (strcmp(cmd, "mirror") == 0) { + return mirror_displays(); + } else if (strcmp(cmd, "extend") == 0) { + return extend_displays(); + } else if (strcmp(cmd, "status") == 0) { + print_status(); + return 0; + } else { + fprintf(stderr, "Unknown command: %s\nUsage: display_control \n", cmd); + return 1; + } + } +} diff --git a/src/main/system_handlers.ts b/src/main/system_handlers.ts index 42fc707..ce6ec3b 100644 --- a/src/main/system_handlers.ts +++ b/src/main/system_handlers.ts @@ -318,34 +318,48 @@ export function registerSystemHandlers() { return { success: false, error: 'Unknown action' }; }); - // 6. Set Display Layout (Displayplacer) - // Auto-detects connected displays via `displayplacer list` when no explicit configStr is given. - // mirror: secondary display(s) mirror the primary. - // extend: displays shown side-by-side; un-mirrors if currently mirrored. + // 6. Set Display Layout + // Primary path: display_control (native CoreGraphics, no external deps). + // Build from scripts/display_control.m via scripts/build-display-control.sh on a Mac. + // Commit the resulting resources/bin/display_control binary to the repo. + // Fallback: displayplacer (requires: brew install displayplacer on each venue Mac). + // Also supports per-device configStr override (displayplacer format). ipcMain.handle('native:set-display-layout', async (event, { mode, configStr }) => { if (os.platform() !== 'darwin') return { success: false, error: 'Display control only supported on macOS' }; - // Try bundled binary first; fall back to common Homebrew/system locations. - // Install on a dev/venue Mac via: brew install displayplacer - const _bin_candidates = app.isPackaged + // Primary: display_control — native CoreGraphics, no Homebrew dependency. + // Derived from OSIT MasterKey app (LegacyUtilities.m). No configStr support needed — + // CoreGraphics auto-detects all connected displays. + const dc_bin = app.isPackaged + ? path.join(process.resourcesPath, 'bin', 'display_control') + : path.join(__dirname, '../../resources/bin/display_control'); + + if (fs.existsSync(dc_bin) && !configStr) { + const dc_cmd = mode === 'mirror' ? 'mirror' : 'extend'; + return await runExec(`"${dc_bin}" ${dc_cmd}`); + } + + // Fallback: displayplacer — required when display_control binary is not built yet, + // or when a per-device configStr override is set (displayplacer-format string from event_device.data_json). + // Install: brew install displayplacer + const _dp_candidates = app.isPackaged ? [path.join(process.resourcesPath, 'bin', 'displayplacer')] : [ path.join(__dirname, '../../resources/bin/displayplacer'), '/opt/homebrew/bin/displayplacer', // Apple Silicon Homebrew '/usr/local/bin/displayplacer', // Intel Homebrew ]; - const binPath = _bin_candidates.find(p => fs.existsSync(p)) ?? _bin_candidates[0]; + const dpPath = _dp_candidates.find(p => fs.existsSync(p)) ?? _dp_candidates[0]; - // Explicit config string always takes priority — allows manual override per device. + // Explicit configStr takes priority — allows manual per-device override. if (configStr) { - return await runExec(`"${binPath}" ${configStr}`); + return await runExec(`"${dpPath}" ${configStr}`); } - // Auto-detect: `displayplacer list` emits a ready-to-run command line at the bottom. - // We parse the quoted display strings from that line and modify them for the requested mode. - const list_result = await runExec(`"${binPath}" list`); + // Auto-detect via `displayplacer list`. + const list_result = await runExec(`"${dpPath}" list`); if (!list_result.success || !list_result.stdout) { - return { success: false, error: `displayplacer list failed: ${list_result.error ?? 'no output'}` }; + return { success: false, error: `displayplacer not available. Build display_control from scripts/build-display-control.sh or run: brew install displayplacer` }; } // The command line looks like: displayplacer "id:xxx res:... origin:(0,0) ..." "id:yyy ..." @@ -366,24 +380,21 @@ export function registerSystemHandlers() { } const primary_id = primary_id_match[1]; - // Primary display unchanged; secondary display(s) get mirror_of_display:. const mirror_args = display_strings.map((s, i) => { if (i === 0) return `"${s}"`; const without_existing_mirror = s.replace(/\s*mirror_of_display:\S+/g, '').trim(); return `"${without_existing_mirror} mirror_of_display:${primary_id}"`; }).join(' '); - return await runExec(`"${binPath}" ${mirror_args}`); + return await runExec(`"${dpPath}" ${mirror_args}`); } if (mode === 'extend') { const any_mirrored = display_strings.some(s => /\bmirror_of_display:\S+/.test(s)); if (!any_mirrored) { - // Already extended — re-apply current layout to ensure it is active. - return await runExec(`"${binPath}" ${display_strings.map(s => `"${s}"`).join(' ')}`); + return await runExec(`"${dpPath}" ${display_strings.map(s => `"${s}"`).join(' ')}`); } - // Remove mirror keys and compute side-by-side origins from each display's resolution. let x_offset = 0; const extend_args = display_strings.map((s) => { const without_mirror = s.replace(/\s*mirror_of_display:\S+/g, '').trim(); @@ -394,7 +405,7 @@ export function registerSystemHandlers() { return `"${updated}"`; }).join(' '); - return await runExec(`"${binPath}" ${extend_args}`); + return await runExec(`"${dpPath}" ${extend_args}`); } return { success: false, error: `Unsupported display mode: ${mode}` };