macOS doesn't natively expose controls for third-party displays, but most modern displays support DDC/CI — a protocol that lets software send commands directly to display hardware: brightness, contrast, volume, input source, color temperature, power, and more.
This skill is split into a setup section (below) and per-control reference files. Once set up, jump to the reference file for the control you need.
FileControls coveredreferences/brightness.mdBrightness — scripts, keyboard shortcuts, cron presetsreferences/contrast.mdContrast — tips for color-mode lockreferences/volume.mdDisplay speaker volume, mute togglereferences/input-source.mdInput switching, KVM setup, per-brand codesreferences/color-temperature.mdColor presets, RGB gain, night/day mode scriptsreferences/power-and-misc.mdPower on/off, rotation, factory reset, capability probing
bash
uname -m # arm64 = Apple Silicon | x86_64 = Intel
Or: Apple menu → About This Mac.
CableApple SiliconIntelUSB-C / Thunderbolt✅ Full DDC support✅ Full DDC supportDisplayPort✅ Works✅ WorksHDMI (built-in port)⚠️ Blocked on M1/M2 Mac Mini, M1 MBP, Mac Studio✅ WorksHDMI via Thunderbolt adapter✅ Usually works✅ WorksDisplayLink dock❌ No DDC❌ No DDC
If you're on Apple Silicon with HDMI and can't switch cables → jump to Software Fallback.
m1ddc#bash
brew install m1ddc
m1ddc display list # your display should appear here
ddcctl#bash
brew install ddcctl
ddcctl -d 1 -p 1 # probe display 1 — lists supported controls
Homebrew not installed?
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Verify DDC is working before scripting anything:
bash
# Apple Silicon
m1ddc set luminance 30 # screen should visibly dim
m1ddc set luminance 80 # screen should brighten
# Intel
ddcctl -d 1 -b 30
ddcctl -d 1 -b 80
No change? → See Software Fallback below.
Multiple displays? Target a specific one:
bash
m1ddc display list # find index
m1ddc display 2 set luminance 60
ddcctl -d 2 -b 60 # Intel equivalent
All controls work as one-line shell commands. Create a ~/scripts/ folder
and save scripts there so Automator, cron, and keyboard shortcuts can call them.
bash
mkdir -p ~/scripts
Always use full binary paths in scripts — Automator and cron don't load your shell PATH:
/opt/homebrew/bin/m1ddc/usr/local/bin/ddcctlSee each references/*.md file for ready-to-paste scripts per control.
Make scripts executable after creating them:
bash
chmod +x ~/scripts/*.sh
Works for any script. Do this once per action you want to bind to a key.
/Users/yourname/scripts/brightness-up.sh)⌃⌥↑)If the shortcut doesn't fire: System Settings → Privacy & Security → Automation → grant access.
Use cron to switch display settings automatically at certain times:
bash
crontab -e
text
# Day mode at 8am
0 8 * * * /Users/yourname/scripts/day-mode.sh
# Night mode at 9pm
0 21 * * * /Users/yourname/scripts/night-mode.sh
See references/color-temperature.md for ready-made day/night scripts.
If your display doesn't respond to DDC (TVs, budget displays, DisplayLink docks), use macOS Gamma table control to dim the image in software:
bash
# Set brightness to 60% (range: 0.0–1.0)
osascript -e 'tell application "System Events" to set brightness of (first screen of (get every screen)) to 0.6'
As a script ( ~/scripts/brightness-soft.sh):
bash
#!/bin/bash
# Usage: brightness-soft.sh 0.6
osascript -e "tell application \"System Events\" to set brightness of (first screen of (get every screen)) to ${1:-0.7}"
⚠️ Software dimming changes appearance only — no power saving, slight colour shift at low values. Hardware DDC is always preferable when available.
SymptomFixm1ddc display list returns nothingMust use USB-C; HDMI blocked on M1/M2 Mac MiniDisplay found but control has no effectDDC/CI may be off in OSD; or Dynamic Contrast is onWrong display changesUse m1ddc display 2 … or ddcctl -d 2 …Command not found in Quick ActionUse full path: /opt/homebrew/bin/m1ddcShortcut doesn't fireSystem Settings → Privacy & Security → AutomationNo DDC at allUse Software Fallback (osascript gamma)
m1ddc (Apple Silicon): https://github.com/waydabber/m1ddcddcctl (Intel): https://github.com/kfix/ddcctl