An interesting thing happened this weekend that allowed me to fully appreciate what it must be like to use a computer without the benefit of sight.
It all Started With a Broken Display
I have a nearly new MacBook Pro that has been seeing action in some rough circumstances of late, and while a relatively rugged machine on the outside, it is still a pretty delicate piece of expensive consumer electronics inside.
As the result of carelessness and daredevilry it ended up with a Retina display of the busted and cracked variety.
I have multiple machines, so using this particular one as desktop until I can replace the display has worked out thus far with some minor annoyances here and there mostly related to having only an external display available.
Did You Mean Upgrayedd?
Recently however, I was prompted to upgrade an application that makes use of a kernel extension.
This application has previously never given any issue, so I proceeded with the upgrade. Given that I was using the machine that evening and didn’t want to be interrupted further, I elected to not restart when prompted to do so.
Once I was ready for sleep later, I hit the Restart button on the installer dialog, powered off the external display and called it a night.
That’s odd, I thought the next morning; when I sat down to some usual daily activities, I noticed that the machine was no longer powered on. That was the first sign of trouble and the first step in a long path of troubleshooting.
I powered up the laptop —
GOHHHHNG… so far, so good.
However, the external display did not spring to life as usual, and the indicator on it blinked away while the on-screen display showed that it was still seeking signal from the laptop.
Hmm, let’s try turning it off an on again! Same behavior. Immediately, I did a few basic hardware level things. I reset the SMC with ⇧⌃⌥ plus power. I powered on with ⌘⌥-p-r to reset PRAM and let the system restart once more…
Well this mystery was sure deepening quickly.
I let the machine go and jumped onto another system, ran a quick
nmap to look for this machine,and noticed no additional devices besides the ones I could account for on the the network.
That’s when it hit me (the old “what changed last?” question): the upgraded application’s kernel extension was probably somehow interfering with the system boot!
I immediately tried booting into safe mode by holding ⇧ while powering on and waiting for the external display. Nothing happened, so I figured that external displays probably do not work in safe mode. As a last resort, I tried Recovery Mode with ⌘R while powering on.
I got a sync on the external screen, and a simple solid gray screen. Within seconds, a nice voice said, “To use English as the main language, press the Return key”.
So here I was, in the recovery mode, but unable to see anything except a gray screen!
I closed the lid on the machine and voila!
There was the recovery mode interface staring back at me. At this point, I knew that I could beat this issue. There was just one little problem…
I had no external keyboard or pointing device on hand.
My plan was to disable the problematic kernel extension so that the machine could normally boot again. At first I was tempted to obtain an external keyboard and mouse so that I could keep the lid closed and proceed with my plan.
Then, I thought why not try to have the computer help me fix it? and with that, I proceeded to enable VoiceOver with ⌘F5 and follow its lead with the laptop open by using nothing but keyboard navigation.
The steps were roughly as follows:
- Open Disk Utility
- Mount and unlock my primary disk
- Open Terminal
- Locate and remove the kernel extension
All of the above was carefully performed with a bit of trial and error over the course of approximately 10 minutes. During this whole time, I was constantly mindful that this is what it is like for visually impaired persons to use a computer every single day.
After the reboot, my trusty MacBook Pro was back in action and I found myself both completely proud to have resolved the problem, and profoundly humbled by the entire experience.