Cross‑platform hotkey → DDC/CI switcher.
- ✅ CLI backends:
ddcutil(Linux),ddcctl(macOS),ControlMyMonitor.exe(Windows) - ✅ JSON configuration of models, monitors, and hotkeys
- 🔄 Native backends scaffolding: Windows (implemented), macOS/Linux (stubs)
- Edit
XDispDDCSwtchr-Settings.json. - Build and run:
# Linux prerequisites for hotkey support
sudo apt-get install libx11-xcb-dev libxtst-dev libxkbcommon-dev libxkbcommon-x11-dev \
libxinerama-dev libxrandr-dev libxcursor-dev
# Linux/macOS
go build -o xdispddcswtchr ./cmd/xdispddcswtchr
sudo ln -sfn /Library/Preferences/com.apple.windowserver.displays.plist /Library/Preferences/com.apple.windowserver.plist
./xdispddcswtchr# Windows
go build -o xdispddcswtchr.exe .\cmd\xdispddcswtchr\
.\xdispddcswtchr.exeBy default the CLI backend is used. To prefer the native backend on Windows, set "backend": "native" in the JSON.
- No tags: CLI backend (all OSes)
-tags native: Enable native backend selection logic. Currently Windows native is implemented; macOS/Linux are stubs.
- Requires
ddcutilinstalled:sudo apt-get install ddcutil - May require
i2c-devkernel module:sudo modprobe i2c-dev - Verify DDC/CI support:
ddcutil detect - Limitation:
ddcutilcurrently ignores monitor ID and affects all monitors - Performance: Commands may take 1-2 seconds per execution
- Timeout: 30-second timeout prevents hanging on unsupported monitors
- Requires
ddcctlinstalled:brew install ddcctl - Workaround: Some ddcctl builds require a plist symlink:
sudo ln -sfn /Library/Preferences/com.apple.windowserver.displays.plist \ /Library/Preferences/com.apple.windowserver.plist - Monitor ID Format: Use
MonitorName@Nwhere N is the display number (e.g.,LG45GX950A@4) - VCP Code 0x60: Input switching uses
-iflag for better compatibility - Timeout: 30-second timeout prevents hanging on unsupported monitors
- Requires ControlMyMonitor.exe in PATH
- Monitor ID Format: Use monitor name from ControlMyMonitor (e.g.,
"\\.\DISPLAY1") - VCP Code Format: Supports both hex (
0x60) and decimal (96) - Timeout: 30-second timeout prevents hanging on unsupported monitors
- Enable with
"backend": "native"in settings JSON - Uses Windows DDC/CI API directly (no external tools required)
- Limitation: If multiple physical monitors share one logical display, only the first is controlled
- VCP Code Format: Supports both hex (
0x60) and decimal (96) - Monitor ID Format: Use
DISPLAY1,DISPLAY2, etc., or leave empty for first monitor
- Verify your monitor supports DDC/CI (check monitor OSD settings)
- Test manually with platform tools (
ddcutil,ddcctl, orControlMyMonitor.exe) - Some monitors require DDC/CI to be explicitly enabled in settings
- Check that the correct monitor ID is configured
- Verify VCP codes match your monitor's capabilities
- Some monitors only respond when powered on (not in standby)
- Run the symlink command shown above
- Ensure you have appropriate permissions
- Linux may require
i2c-devaccess for future native backend; for CLI make sureddcutilworks manually. - macOS requires appropriate entitlement/permissions for low-level IOKit access; CLI uses
ddcctl.