This is a tale of apparent hardware problems which revealed themselves to actually be the result of the most common cause of issues when working with computer software, that which is located somewhere between the screen and the keyboard. i.e. user error
The problem
I have a Macbook Pro connected to a Cinema Display external monitor via a thunderbolt to DVI adaptor. I had unplugged the laptop and taken it downstairs in the evenings recently to do some late-night hacking. Usually when returning it to my desk the next morning, I just plug it back in and everything “just works” ™, but yesterday it didn’t, and when it happened again today I started to worry that I’d had a hardware failure somewhere. Silly me…
Symptoms
When connecting the external display to the Macbook Pro via the Thunderbolt to DVI adaptor:
- The external display seemed to wake from sleep, but did not display a picture
- The Macbook Pro did not detect the external display
- Opening the Displays preferences pane and hitting Detect Displays did nothing
- The system logs (Console.app) did not show any errors or warnings
Debugging
- Tried logging out to the accounts screen and logging back in (which should restart the window server), but it had no effect
- Rebooted the MacBook pro, and upon arriving at the accounts screen the external display was activated
Having already wasted enough time on it, I thought nothing more of it and got to work. When it happened again today though, I had to dig a little further…
The solution
I mentioned unplugging my laptop and taking it downstairs. The recent models of Macbook Pro have two GFX processors, a “discreet” GPU which is a powerful 3D processor with dedicated super-fast RAM for games etc., and an “integrated” GPU which shares system resources. They attempt to intelligently switch between the two depending on the applications being used, which is great in theory, but in practice many common OS X applications use library calls which trigger the dedicated GPU, and this results in the battery draining much faster than necessary.
A solution to this is using an application called gfxCardStatus to manually force the system to use the low-power integrated GPU when running on batteries. The only problem with this however, is that the integrated GPU can’t be used with external displays, so if you forget to switch it back to “automatic” mode…
Head. Bang. On. Desk.
- Open the Macbook Pro
- Set gfxCardStatus to Discreet only, or Dynamic switching
- Your external display will spring to life!
Sometimes when your computer seems to be misbehaving, it’s just doing exactly what you told it to, in this case explicitly disabling the GPU required for using external displays.
A better solution
Mac OS X has a great speech synthesiser built-in, it could actual say “To use this external display, enable the discreet graphics processor” so that if the laptop is closed, you still get some feedback as to why the external display is not working.