Elementary OS is an Ubuntu-based Linux operating system that is clean, simple, and lightweight. Lightweight it particularly useful for revitalizing older hardware. I have a 2010 MacBook Pro that is still in good shape, but it cannot run the current MacOS and has zero trade-in value at the Apple Store. This post goes step-by-step through the process of installing elementaryOS to revitalize the machine.
Elementary OS runs pretty well on this machine, with two caveats. First, wifi does not work out of the box. It is not too hard to get it to work, but you will need either an ethernet cable or a way to run internet through bluetooth to the laptop to get the wifi set up properly. Second, the Nvidia GeForce 320M graphics card in this device is not well-supported in Linux. With the default open-source nouveau drivers, performance is sup-optimal compared to the Nvidia proprietary drivers, and wake from suspend will not be supported. (If graphical performance is important, you will have an easier time getting the proprietary Nvidia drivers configured on Ubuntu 20.04 LTS, as discussed in more detail below.)
In this guide, we will do a clean installation of elementary OS that will replace MacOS on the machine. That all said, let us dive into the installation.
Step 1: Preliminaries
Make sure you have a 64 bit computer. Basically, any Apple computer older than 2008 is likely 32 bit and thus not compatible with eOS 6. The specific model I used for this post is:
MacBook Pro (13-inch, Mid 2010)
Model Identifier: MacBookPro7,1
Over the years, I did upgrade the RAM a bit and changed the hard drive to a SSD. This guide should be helpful for other Apple computers from around the same time, but because components change across models, it will not be exactly the same steps.
Step 2: Create a bootable install drive
On MacOS, you can use a program called Etcher from Balena to create the bootable drive. Download Etcher, and then download the eOS 6 ISO file to your computer, and insert a USB drive. The ISO file for eOS 6 is about 2.6GB, so make sure you have a USB drive with at least that much space.
Open Etcher, select the ISO file, select the correct USB drive, and click “Flash!”
After flashing the drive is finished, you will see an error message that says “The disk you inserted was not readable by this computer.” It is safe to ignore this message.
Step 3: Install elementary OS
Insert the bootable install drive, and as you power on the machine, hold down the Option key. A screen loads with two USB icons that say “EFI Boot”. I selected the second icon, and hit enter (but it shouldn’t matter which EFI Boot icon you select).
A screen will then load that may display a few lines of error messages that are safe to ignore, such as “error: unexpectedly disconnected from boot status daemon” and “/init: line 49: can’t open devsdb: No medium found.” And then it will say “Checking integrity, this may take a while…” After some time, the elementary installer screen should load. Make some language in input selections, and then Select “Erase Disk and Install.”
At this point, elementary OS will install on the machine. It takes some time, and once it is finished, you will again be asked to make some customization selections and set up a user account. At the end, you can select “Finish Setup” and you will be able to log in to elementary OS 6!
Log in, and you have a basic functioning installation of elementary. But, there will likely be two main functions missing out of the box: there will be no wifi options available, and the open-source nouveau drivers for the graphics card will not allow the laptop to wake properly after sleeping. We tackle these issues in the next step of troubleshooting.
Step 4: Troubleshooting
Getting the wifi settings to work
In short, the proper drivers for the Broadcom wireless card are not available out of the box. The solution is to plug in an ethernet cable (or otherwise get access to the internet through a bluetooth adapter), and install the bcmwl-kernel-source driver through AppCenter. You may need to restart the machine after installing the bcmwl driver in order to be able to see the available wireless networks. With this driver, I was able to achieve downloads speeds of 100 mbps.
Update October 2021: Previous steps in this blog post that followed this answer on the elementary StackExchange have been removed, as they are no longer the recommended approach for this model of MacBook Pro. Thank you to reddit user u/GrafPaf for pointing out that the bcmwl driver from the AppCenter now works with this model.
Getting Nvidia drivers to work
This model of MacBook Pro has a Nvidia GeForce 320M graphics card. You can check the model of the card on your machine entering
lspci in the Terminal. This graphics card has been notoriously difficult to support on Linux.
By default, the eOS installation will run the Nvidia graphics card with open source Nouveau drivers. These drivers allow the machine to run, but performance is not optimal, and most importantly wake from suspend will not work. According to the Ubuntu Forums, it is expected that wake from suspend will not work with the nouveau drivers and this particular graphics card. One perfectly fine option, is to stick with the nouveau drivers and just disable suspend in the settings, and plan to not suspend the machine when using it. In this configuration, the laptop works great for internet browsing, watching YouTube videos, and basic computer usage.
Alternatively, to get wake from suspend to work properly, you would use the proprietary Ndivia 340 driver. However, the Nvidia 340 driver is end of life and no longer supported by Nvidia, and if you try to install it through the App Center, the download will fail. Moreover, attempting to install the driver will leave the drivers partially installed, and you will be unable to log in from the login screen, and instead will be stuck in an endless login loop.
If you install the nvidia-340 driver and do get stuck in an endless login loop, use these steps to get out: (1) from the login screen, you can access the Terminal interface by pressing ctrl+fn+alt+F1, (2) purge the nvidia driver by entering:
sudo apt-get remove --purge '^nvidia-.*'(3) reboot, and now the nouveau drivers will be used and you will be able to log in.
To check which graphics driver is in use at any time, open the Terminal and type
lspci -nnk. The output will include a line under the VGA compatible controller that says either “Kernel driver in use: nouveau” or “nvidia”.
For those willing to put in extra effort and experiment with unsupported drivers, there are possible workarounds. But the issue is that the required Nvidia 340.108 driver is end of life, and according to Ubuntu Launchpad is no longer available on newer Linux kernels after 5.10. However, Nvidia 340.108 is available on Ubuntu 20.04 LTS. While elementary 6 is based on Ubuntu 20.04 LTS, elementary makes use of LTS Hardware Enablement (or HWE), which provides a newer kernel underneath Ubuntu LTS. The HWE means that elementary OS has a newer kernel and support for newer hardware, such as for the Framework laptop, but this means that the Nvidia 340 driver is not officially available on eOS 6.
My recommendation at this point, is that for people who want to run Linux on this model of MBP, the best bet is probably to stick with the nouveau drivers with elementary. If graphical performance is important, then the other good option is to run Ubuntu 20.04 LTS on this machine. There are useful forums for getting this Nvidia 340 driver to work on the MBP 7,1 in Ubuntu 20.04 available here and here. And there is a most helpful comment on the elementary OS Stack Exchange that covers some alternative workarounds as well.
Hopefully this guide was useful to revitalize a 2010 MacBook Pro with elementary OS 6. For a guide on installing software as a next step, see our guide here.