Control your Samsung monitor's input source, brightness, and contrast from the command line using DDC/CI — even while the monitor is displaying a different input.
- What This Is
- Status
- Hardware Tested
- Quick Start
- Key Finding
- Helper Script
- Documentation
- Safety Notes
- Contributing
- License
This repository documents a practical investigation into controlling the Samsung LS24D300G
monitor via DDC/CI from an Apple Silicon
Mac using the m1ddc command-line tool.
The primary goal was to switch the monitor's input source (HDMI ↔ VGA) from the Mac without touching the physical OSD buttons, and to automate that switch with a mouse button in BetterTouchTool.
| Capability | Status |
|---|---|
| Read/set luminance and contrast | ✅ Confirmed working |
Switch HDMI → VGA (input code 1) |
✅ Confirmed working |
| Switch VGA → HDMI | |
| DDC transport active while on VGA | ✅ Confirmed (commands from HDMI path still applied) |
| BetterTouchTool mouse-button trigger | ✅ Working (button detection separated from input-switch) |
| Exact calibration data |
| Component | Details |
|---|---|
| Monitor | Samsung LS24D300G (24″, 60 Hz, IPS-type) |
| Mac | Apple Silicon Mac (M4) running macOS |
| Connection | Mac → monitor via HDMI |
| Secondary input | VGA (from a separate machine) |
brew install m1ddcm1ddc display 1 get luminanceExpected output: a number like 40. If you get an error, see Mac Setup Guide.
m1ddc display 1 set input 1cp scripts/monitor-ddc-probe ~/bin/monitor-ddc-probe
chmod +x ~/bin/monitor-ddc-probemonitor-ddc-probe pulseYou should see the brightness dip and recover — even if the monitor is showing VGA.
DDC transport from the Mac remains active while the monitor displays VGA.
Brightness and contrast commands sent over the HDMI path are applied to the panel even though VGA is the selected source. This means VGA → HDMI switching should also be possible in principle — the correct VCP input code just hasn't been confirmed yet for this specific Samsung firmware.
See DDC/CI Source Switching — Explanation for the full technical context.
scripts/monitor-ddc-probe is a Bash script that automates the most common investigation
tasks:
monitor-ddc-probe pulse # brightness blink — confirms DDC is live
monitor-ddc-probe probe 17 # test input code 17 for HDMI
monitor-ddc-probe scan 5 17 3 6 18 # single pass over multiple candidates
monitor-ddc-probe loop # infinite loop over default candidates
Full reference: docs/reference/monitor-ddc-probe.md
| Document | What It Covers |
|---|---|
| Mac Setup Guide | Installing m1ddc, verifying DDC, first commands |
| BetterTouchTool — Mouse Buttons | Mapping mouse extra buttons to terminal commands |
| Windows ControlMyMonitor Method | Reading the true HDMI input code from the VGA machine |
| Finding the HDMI Code | Step-by-step strategy to identify the correct VCP code |
| m1ddc Command Reference | Useful commands and their syntax |
| Monitor Behavior Reference | Confirmed and unconfirmed behaviors |
| monitor-ddc-probe Reference | All script subcommands, options, and env vars |
| DDC/CI Source Switching — Explanation | Why input switching is harder than it looks |
| Calibration Notes | Best-effort starting profile for this monitor |
| ADR-001: Publication Scope | What is and isn't included in this repo |
- DDC/CI commands can change panel settings. Write down your current values before experimenting.
- The
scanandloopsubcommands repeatedly send input-switch codes. If the monitor unexpectedly accepts one, the display will change source. Be prepared for that. ddcctlwas also tested but failed with framebuffer acquisition errors on this macOS build. Do not rely on it for this workflow. See Mac Setup Guide.- Nothing in this repo requires root. Do not run these scripts with
sudo.
See CONTRIBUTING.md.
MIT — see LICENSE.