Hi everyone,
Just spent 2 hours on this and found a fix that doesn't involve buying a USB-C adapter, so I figured I'd share since every thread I read ends with "just get a dongle".
My setup: MacBook Pro 14" M2 Pro, macOS Tahoe 26.5, Samsung monitor over HDMI plugged directly into the Mac's built-in HDMI port. Classic symptom, the monitor powers on but stays black, and the Mac doesn't see it at all. Nothing in System Settings, nothing in system_profiler SPDisplaysDataType, nothing in IORegistry. The same HDMI cable works fine on my TV, and the monitor used to work with this Mac before the Tahoe upgrade.
I tried everything you usually find on forums: multiple HDMI cables, rebooting with the monitor already plugged in, updating macOS (26.4.1 then 26.5), disabling VRR on the monitor, Option+Detect Displays in System Settings. Nothing changed.
What ended up working is one command in Terminal, no sudo needed:
mv ~/Library/Preferences/ByHost/com.apple.windowserver.displays.*.plist ~/Desktop/
Then plug the HDMI cable in, restart via the Apple menu, and on boot the monitor is detected right away.
Why it works. macOS keeps a cache of every display it has ever seen in this file. On my Mac there were 11 configurations stacked up across 8 different displays (old TVs, meeting room projectors, previous office monitors, you name it), and several of them were in a clearly broken state: dimensions of 1x1 pixels, origin coordinates at -3200, a mix of Sequoia and Tahoe formats in the same file. Tahoe became way stricter about validating this file, where Sequoia would just silently ignore invalid entries. So the entire display detection pipeline gets stuck on the first malformed entry it hits, and the HDMI handshake never even starts with a new monitor.
The mv sends the file to the Desktop instead of deleting it, so you have an automatic backup. If anything goes weird you can put it back:
mv ~/Desktop/com.apple.windowserver.displays.*.plist ~/Library/Preferences/ByHost/
Hope this helps someone.