My fondness of Apple’s software releases has been steadily declining recently, so I decided to switch entirely to a Linux-based operating system. Having recently had very good experiences with Ubuntu’s hardware support on various machines, I decided to try out the latest 14.04 LTS release on my MacBook Pro (Mid 2014) (MacBookPro6,2).
The installation went smoothly – brightness/audio controls, WiFi, Audio and Webcam all seemed to be working without any additional configuration needed. At this point, I was using the pre-selected open-source Nouveau driver for the Nvidia Geforce 330M GPU.
The defining detail
I soon found, however, than returning the laptop from sleep/suspend mode (lid closed) would cause the laptop to freeze. I found it to be related to a known bug in the open-source Nouvea driver as described here and discussed here. I then decided to try out the proprietary Nvidia drivers as provided by Ubuntu’s “Software & Updates” application. Switching to any of the proprietary drivers, however, had a much more severe side effect… At this point, I was now completely unable to boot into the desktop environment, as the entire screen would remain blank as soon as the X-server tried to start.
Since returning to the original Nouvea driver was not an option for me (because of the non-functional suspend), it took me a couple of days to figure out the causing of the problem and eventually find a working solution.
It turns out that installing Ubuntu 14.04 on a Mac laptop installs an EFI boot loader using Grub2. For whatever reason, using this EFI boot loader somehow prevented the operating system from properly communicating with the GPU.
Replacing Grub2 with legacy Grub
The only working solution that I have found is to replace Grub2 with Grub (sometimes referred to as legacy Grub). For whatever reason (don’t ask me why), this seems to solve the problem with the operating system not being able to communicate with the GPU properly.
As described here, these are the steps I followed to successfully replace Grub2 with legacy Grub.
- Create backups of the configuration folders for Grub2:
sudo cp /etc/default/grub /etc/default/grub.old
sudo cp -R /etc/grub.d /etc/grub.d.old
sudo cp -R /boot/grub /boot/grub.old
- Uninstall Grub2:
sudo apt-get purge grub-pc
- Install legacy Grub:
sudo apt-get install grub
- Configure legacy Grub on the harddisk where Ubuntu resides:
- Note: Remember to replace “X” with the drive-letter of the harddisk where Ubuntu is installed.
sudo grub-install /dev/sdX
- Generate a new “menu.lst” partition list for legacy Grub:
- Note: Select “Yes” when prompted.
After a reboot, I was now able to successfully boot into the graphical user interface.