Mac monitor input switching: DDC limits and a safe test
An input command is a request, not proof. Test the exact HDMI or DisplayPort value while the monitor controls remain reachable, then verify the target device's picture before automating the switch.
For a Mac monitor shared with another computer or console, first use the monitor's own input menu. If the monitor exposes DDC input-source control, TeenyDisplay can send a tested value through a licensed teenydisplay://input URL. The current visible input menu has a narrower list than those URL commands, so it should not be described as a general HDMI or DisplayPort picker.
macOS Displays settings controls the Mac's arrangement, resolution, refresh rate, and detection. It does not provide a universal switch for the monitor's physical ports. The Mac detected-but-no-signal guide explains how to separate those layers.
Disclosure: I build TeenyDisplay. This refresh follows the current Swift source, including the visible-menu limit and the lack of post-command verification. Monitor hardware and connection paths vary, so keep a physical recovery control within reach.
What each input control proves
| Control | Current behavior | Acceptance evidence |
|---|---|---|
| Monitor buttons or remote | Selects the physical input through the monitor itself. | The target device's distinctive picture appears. |
| TeenyDisplay visible menu | The current source renders the first eight legacy choices and asks for confirmation. | The chosen source appears; the menu state alone is insufficient. |
teenydisplay://input |
A licensed command can send a numeric DDC value to a selected display. | The monitor shows the intended active source after the write. |
| Saved preset | Can reapply a stored input value with other display state. | Every stored physical result is checked again. |
| macOS Displays settings | Shows whether the Mac detects the display and which mode it requests. | Useful for the Mac side, but it does not prove the monitor input. |
What the current TeenyDisplay source actually exposes
The input controller uses DDC VCP code 0x60. Its known map includes DisplayPort-1 as 15, DisplayPort-2 as 16, HDMI-1 as 17, and HDMI-2 as 18. A monitor may support only part of that map or use a different value.
The visible input menu currently calls knownInputs.prefix(8). Those first eight entries are VGA, DVI, Composite, and S-Video choices. DisplayPort and HDMI occur later in the list, so the current source does not render them in that menu even though the controller and URL handler know their numeric values.
The URL handler accepts a numeric input value and starts an asynchronous write for displays that report input-switching support. It does not read the value back after the command or display a success receipt. TeenyDisplay has a separate read method in source, but that method is not part of the URL command's acceptance path.
Run the safe HDMI or DisplayPort test
- Connect the Mac and the second source to their intended monitor ports.
- Wake both devices and put a distinctive image on each, such as a desktop with a large device name.
- Use the monitor menu to confirm the Mac's known-good input and write down its exact port label.
- Keep the monitor joystick, buttons, or remote reachable.
- Send one candidate DDC value. Use 15 or 16 only for a DisplayPort label you have matched, or 17 or 18 only for a matched HDMI label.
- Confirm the target device's distinctive picture appears. A disappearing Mac desktop is not enough.
- Return to the Mac from the second device or the monitor's physical menu. Confirm the Mac picture comes back.
Test the return path from the other source because a monitor may stop accepting DDC from the Mac after it leaves the Mac's input. If you cannot return without physical controls, do not put the outgoing command behind an unattended shortcut.
Open a tested URL from Shortcuts or a launcher
A licensed TeenyDisplay installation can handle a command such as teenydisplay://input?display=1&value=17. In the current source, value 17 maps to HDMI-1. The display parameter can target a one-based display index, all, or external. Omitting it uses the handler's default display set.
Apple Shortcuts can open another app's URL scheme with an Open URLs action. Give each tested action a physical name such as "Dell left monitor to Mac HDMI-1." Avoid a vague label such as "Switch screen," which hides both the target display and the recovery value.
Because the handler does not return a success result, do not chain dependent work immediately after the URL as if the input were confirmed. Put a human picture check between the switch and the next task.
Use presets only after the input passes alone
TeenyDisplay presets can store an input value with brightness, contrast, volume, resolution, refresh rate, and HiDPI state when those fields are available. That is useful for a repeated desk state, but it makes troubleshooting harder if several values change at once.
First prove the input switch by itself. Then save the larger state and apply it while watching every expected result. The Mac display presets guide provides a field-by-field acceptance record and separates stored commands from visible outcomes.
A preset for an unfamiliar meeting-room display is a poor bet. Use the presentation display checklist, the monitor controls, and a conservative display mode instead.
Troubleshoot a command that appears to do nothing
- Confirm the license. The current URL handler ignores control commands when full access is not active. Its read-only
infocommand is the exception. - Confirm per-control support. A monitor can support DDC brightness but reject DDC input-source writes.
- Remove the dock for comparison. Test a direct cable because a dock, adapter, or connection type may block DDC.
- Check the monitor's DDC/CI setting. Some monitors provide a physical option to enable or disable it.
- Match the value to the actual port. Software's HDMI-1 label does not prove which printed HDMI jack the vendor treats as input 17.
- Accept a hardware-only path. If a direct, enabled, correctly mapped connection still ignores the write, use the monitor menu, remote, or a KVM.
Check the rest of the desk after the picture changes
A successful input switch changes which source the panel displays. It can also change which display the Mac sees and whether monitor speakers remain available. Recheck Displays settings after returning to the Mac, then play a test sound before assuming the audio route survived.
If different apps use different speakers or headphones, follow the Mac per-app audio routing acceptance test. It separates the saved device choice from the output that actually produces sound.
Common questions
Can TeenyDisplay's current menu select HDMI or DisplayPort?
Not from the input list rendered by the current local source. That menu takes the first eight mapped choices, while DisplayPort and HDMI appear later in the controller's list. Tested URL commands can send values 15 through 18, but monitor compatibility still decides the result.
Does a teenydisplay input URL confirm the monitor switched?
No. The current URL handler starts the write but does not perform a post-command readback or show a success result. Verify the target device's picture on the monitor.
What should I do if the monitor goes blank after switching inputs?
Use the monitor's buttons, joystick, or remote to return to the known-good input. A blank screen may mean the command worked but the selected port has no active signal.
Sources checked
- TeenyDisplay behavior was checked against the current local Swift source for
InputController,CLIHandler,DisplayControlView, DDC VCP values, presets, license checks, and URL commands. - TeenyDisplay homepage for the current public feature description, pricing, trial, and macOS compatibility.
- Apple Support: Displays settings on Mac.
- Apple Mac User Guide: Connect one or more external displays with your Mac.
- Apple Support: Intro to URL schemes in Shortcuts on Mac.
Automate only a switch you can reverse.
teenydisplay is a $9.99 Mac menu bar app for supported external monitor controls. Its input URL commands need a full license, a DDC-capable path, a tested numeric value, and a physical recovery option.