Hello
@wildwillow and thanks for this guide.
> Booting with HDMI and hotplugging the DVI output has done the job. The other way around it doesn't worked.
My experience is similar a bit like the previous guy
@skatemaza last post above ^^. However for me I found its the other way around. That I must boot with the HDMI port disconnected, using the DVI as the connected 'boot display'. Then plug in the HDMI port after logging in. And that was the only way around it would work for me.
This is at time of writing a recent Sierra 10.12.3, on a Gigabyte Z170 Gaming 3. You can safely assume similar behaviour for several other similar cheaper / low end boards, when the physical display outputs are missing DisplayPort (or TB3). This one it was with {VGA,DVI,HDMI} 3 ports on the motherboard.
@wildwillow users like you with {DP + HDMI} will no doubt have a slight different experience and perhaps better success.
I run my HDMI output through an HDMI splitter to the TV. So it turns out that disconnecting power from that splitter box before boot time will allow booting and then powering it after login will trigger the hotplug which runs successfully.
However as things currently stand, the situation is a very strained and bugged one. It is not very much practical / usable for the following reasons. These things kindda ruin it:
====
Issue #1 - Graphics Driver Hanging
If plugging ports the 'wrong way around' (whichever way around that may actually be), for me was with the DVI being hotplug device. Well that will mostly just cause the system to crash / hang / panic or reboot. Or, instead of no output to the screen(s), it is displaying a solid black color, with the only the mouse cursor then showing up, which is very slowly cycling / alternating between the regular arrow pointer cursor, the busy spinning wheel, and none. This kind of busy / hanging behaviour will also happen after unplugging a 'correctly' hot-plugged display. So in my case, cutting the power to my HDMI splitter (when the HDMI output was the display that was hot-plugged after login).
I run my HDMI output through an HDMI splitter to the TV. So it turns out that disconnecting power from that splitter box before boot time will allow booting and then powering it after login will trigger the hotplug which runs successfully.
However if I forget to diconnect the HDMI before [re-]booting the machine into OS X. I.e. whenever both displays are plugged in during boot time. Then macOS always tried to grab the HDMI as a higher priority over the 'legacy' DVI port, and this causes problem. The HDMI is grabbed as the 'boot' display, and as we know, the DVI gets somehow switched off or disabled during the verbose logging text. Unfortunately then in my case then macOS will throw a hissy fit at the user login screen. Doing the hanging cursor / spinning wheel thing.
====
Issue #2 - Incorrect display priorities
Despite MacOS having previously been told the DVI is the primary dock display, and having booted and logged in on the DVI monitor alone, and then with the dock in it. Then upon (the only possible successful way of) hotplug connection of the HDMI output as 2nd device (extended screen).... MacOS still somehow regards this new Hot-plugged HDMI screen as a higher priority screen. The DVI screen blanks out, comes back, blanks out twice. Then all of the currently open windows then are moved automatically across to the other 2nd display (HDMI). This is despite the MacOS remembering from a previous session that the DVI is the primary (dock) screen and the HDMI is the extended one.
Furthemore the Preferences pane indeed shows the 'new' 2nd HDMI display in the main preferences pane panel (indicating its now regarded as the primary display). And the DVI monitor has been moved to be on a floating breakout window. Presumably that means OS X thinks of it as the secondary display now. Even though that was the one which we booted from. Maybe its because I changed the screen order and OS X got confused about that? Nope. Swapping the screen order and rebooting again (then hot-plugging the HDMI as 2nd), yields the same results.
So inherently there is something else in OS X that is considering the HDMI as more important then the DVI. Regardless of what I try to do about it.
===
The assumption (from my side), about the issue #2 may not occur for people with newer DP+HDMI. If MacOS is treating the DisplayPort as higher priority then HDMI. And because that is not being hot-plugged. Then its still regarded as the primary display in OS X after hot-plugging.
===
My motherboard is a Gigabyte GA-Z170X-Gaming 3. That has VGA, DSUB, and HDMI. So (and
with the 4 port patch) according to the utility IORegistryExplorer, the ports are shown to be:
AppleIntelFramebuffer@0 = port 0x0 (is this one for the VGA? or its empty / not-used ? ).
AppleIntelFramebuffer@1 = port 0x5 (confirmed as the HDMI port).
AppleIntelFramebuffer@2 = port 0x6 (confirmed as the DVI port).
===
AppleIntelFramebuffer@0
port 0x00
connector-type 0x 02 00 00
AppleIntelFramebuffer@1
port 0x05
connector-type 0x 08 00 00
Display0 —> is connected to the HDMI tv
AppleIntelFramebuffer@2
port 0x06
connector-type 0x 02 00 00
Display0 -> is connected to the DVI monitor
AppleIntelFramebuffer@3
port 0x00
connector-type 0x 01 00 00
Displayport = 40,000
HDMI = 80,000
DVI = 20,000
===
HTML:
<key>KextsToPatch</key>
<array>
<dict>
<key>Comment</key>
<string>10.11.4-SKL-AIFB1-port0x5-DP2HDMI</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
AQUJAAAEAACHAQAA
</data>
<key>Name</key>
<string>AppleIntelSKLGraphicsFramebuffer</string>
<key>Replace</key>
<data>
AQUJAAAIAACHAQAA
</data>
</dict>
<dict>
<key>Comment</key>
<string>10.11.4-SKL-AIFB2-port0x6-DP2DVI</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
AgQKAAAEAACHAQAA
</data>
<key>Name</key>
<string>AppleIntelSKLGraphicsFramebuffer</string>
<key>Replace</key>
<data>
AgQKAAACAACHAQAA
</data>
</dict>
<dict>
<key>Comment</key>
<string>10.11-SKL-1912000-4_displays</string>
<key>Disabled</key>
<false/>
<key>Find</key>
<data>
AQMDAw==
</data>
<key>Name</key>
<string>AppleIntelSKLGraphicsFramebuffer</string>
<key>Replace</key>
<data>
AQMEAw==
</data>
</dict>
. . .