Monday, January 5, 2015

External monitor not detected by Mac running Yosemite - a solution

A funny thing happened while researching this issue, as it seems that many Mac users that have upgraded to Yosemite have experienced this problem with no resolution.  I found posts on the Apple support site suggesting ridiculous things like getting a new video cable or unplugging the cable from the monitor (but not your Mac) or uninstalling DropBox, when everything worked fine before upgrading to 10.10.  That's like telling someone to stand on one foot, rub your tummy with one hand and the top of your head with the other, but only on a leap year Feb 29th at Noon, and then magically, your external displays will once again work with your Mac.  My external monitor worked like a dream with my old MBP, and it worked with my new one out of the box loaded with Mavericks, but as soon as I upgraded to Yosemite and imported files/profile/settings from my dead MBP's hard drive, POOF!  External monitor no longer is recognized.  If I boot into Mavericks, external monitor works - so I know it's not the monitor or the cable, it's Yosemite that's the problem.  And I had to teach a class to customers just before Christmas and I could not use the projection screen to display my slides, so I had to (GASP!!) use a Windows laptop.  Now how stupid is that, Apple?

I was also looking into getting a 1 TB SSD for my 2014 Mac (my 2011 MBP suffered a fried logic board and had a 1TB SSD in it) and finding that you can't get an after-market SSD to fit inside the Retina MBP's because of the way Apple has designed the hardware interface.  And to top it all off, you can't even get 3rd party external SSD's to boot Yosemite, unless you are fortunate enough to buy a SSD from OWC, which doesn't require a 3rd party Trim driver to function correctly.

Turns out that Apple has activated a feature in the OS called kext signing or signed kernel extensions.  It's partly a security feature to prevent untested or "unapproved" or altered kernel extensions from loading and potentially harming your system.  If I followed the blogs and postings timeline correctly, this was actually introduced in Mavericks, but my Mavericks install is basically pristine so the external display works as expected.

I found a tool that some folks use to enable 3rd party Trim drivers to allow the use of non-Apple SSD's as boot disks.  However, the side effect is that the process to enable a 3rd party Trim involves globally disabling kext signing.  As an experiment, I tried this tool named Trim Enabler, and after it was installed and executed, it disabled kext signing as expected and after a reboot, my external display magically was detected and is working again!

I realize that this is a brute-force, shotgun approach to re-enabling external displays with Yosemite, and I don't recommend this for anyone else to try at home (or at work) on their Mac, but this is the first alternative I have tried that actually allows me to use my external display again.

And if you think about it, it makes sense - 3rd party video drivers get installed all the time and almost none of the companies will take the time and effort to get them approved by Apple.  Sometime the drivers get modified by application installers or patches, so if they are not pristine or are not on the approved list, they don't get loaded and you can't use your external display anymore.

Something needs to be done so that you can enable specific drivers or kernel extensions, but that's a whole 'nother discussion.

To sum it up, for all of you out there who lost the ability to use external displays after upgrading to Yosemite, you may be able to restore the functionality by using a tool like Trim Enabler to disable kext signing on your Mac.  It's a bit risky and I don't recommend it, but it works.

For me, now I can plug my MBP into an external display or projector when I have to teach another class or give a presentation and not have to lug around a Windows laptop just so I can show stuff on the big screen.

Proceed at your own risk and may the force be with you...