This post is a step-by-step guide for installing elementaryOS 6 on an early 2015 MacBook Pro. ElementaryOS is an Ubuntu-based Linux operating system that is clean, simple, and lightweight. Apple’s 2015 models make for a great choice to run eOS 6, as nearly everything works immediately upon installing: keyboard, trackpad, wifi, and the buttons on the keyboard for screen brightness, backlight, and volume all work exactly as expected.
The one exception is the in-built camera, which did not work out of the box. With a little bit of work, that can be fixed; however, the image quality of the camera does seem lower compared to when the machine is running MacOS.
This guide will set up the computer to dual-boot MacOS and elementaryOS. While a clean install that replaces MacOS is also possible, the dual-boot offers an easy way to update firmware if it becomes necessary. The computer default boots straight into eOS, but by holding down the option key while booting, you can select the MacOS partition if/when needed.
Let’s begin with the required set up. The model number and specifications of my machine are below. Because Apple products vary a bit year-to-year, this guide is only directly applicable to 2015 models. It may still be useful for models from other years, through different troubleshooting will likely be required.
(Retina, 13-inch, Early 2015)
Graphics: Intel Iris Graphics 6100 1536 MB
Dual-Core Intel Core i5
8 GB RAM
Running macOS Catalina version 10.15.6
I have verified that the steps in this guide also work with macOS Big Sur. You will also need a USB drive that has a capacity of at least 3 GB to use as a bootable install drive.
NOTE: If you have important data on the laptop, make sure to do a BACKUP using Time Machine or another method before taking these steps.
Step 1: Create Partitions
The first step is to partition the drive to designate specific space to MacOS and elementaryOS. This can be done using Apple’s Disk Utility application. In the view menu, change it from “Show Only Volumes” to “Show All Devices” and select the top-level drive with MacOS. Then click Partition. Apple may ask you if you just want to add a volume, but you want to add actual partitions, so click “Partition” to partition the device.
You then see a pie chart with a slider bar that allows you to resize partitions. I needed to create three partitions to be able to install eOS 6: a boot partition, a swap partition, and the main Linux partition.
First create a boot partition. This partition can be small, and I recommend making it 550MB. Set the format for this and all newly created partitions to “MS-DOS (FAT)”. Next, create a swap partition. Though this is optional, I would recommend creating it, and making it at least the size of the RAM of the machine. Given that I have an 8GB RAM machine, I will make this partition 8GB. Finally, create the main partition which will determine how much space is available to Linux. I set this main partition size to 81GB.
Here are screenshots of what Disk Utility shows before and after making the partitions:
Step 2: Create a bootable install drive
You also need to create a bootable install drive for eOS. You can use a program called Etcher 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.66GB, so make sure you have a USB drive with at least that much capacity.
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 eOS
You are now ready to install eOS. Shut down the machine, insert the bootable USB drive, and hold the option key as you power on the machine. Choose the EFI Boot option, and you will be guided through elementary’s installer. Choose “Custom Install” so that you can designate the partitions yourself for dual-boot to work.
I ended up designating the following three partitions in the installer:
/dev/sda3 81.5GB format, use as root, ext4 format
/dev/sda4 550MB /boot/efi
/dev/sda4 8GB swap
With these partitions designated, you will be able to select “Erase and Install”. The rest of the installation process is smooth, and set up is straightforward.
At this point, I had a working install of eOS and most things worked perfectly out of the box: wifi works and speed tests gave expected download speeds of around 300 Mbps; screen resolution look great, speakers and microphone work; volume, brightness, and keyboard backlight buttons all work as expected.
Troubleshooting: Getting the camera to work
The only thing that did not work out of the box was the in-built camera. Opening an application that required a camera gave the error “No supported camera found.”
There are many guides for this. The original work and guide is on patjak’s github. Other guides are at AskUbuntu and at the bottom of a guide from LinuxNewbie. Below are the exact steps that worked for me to get the camera working on a 2015 MacBook Pro.
First note, however, that the native elementary OS Camera application does not work on some MacBook Pro and Air models, tracked as issue #149 on Github. So before following the steps below, install either Cheese from Flathub or mplayer so that you can properly test whether the camera starts working.
Now, on to the installation of the facetime camera drivers. You will need to enter the following commands into the terminal.
1. Install dependencies
sudo apt-get install git
sudo apt-get install curl
sudo apt-get install cpio
sudo apt-get install xz-utils
sudo apt-get install make
2. Extract and install firmware file
git clone https://github.com/patjak/facetimehd-firmware.git
sudo make install
3. Install Linux headers. I was unable to build the driver without installing linux-headers. See this source for more information on these steps. The second line here producing “No such file or directory” message would confirm that you need to install headers in the third line.
ls -l /usr/src/linux-headers-$(uname -r)
sudo apt install linux-headers-$(uname -r)
4. Build the driver
sudo apt-get install kmod libssl-dev checkinstall
git clone https://github.com/patjak/bcwc_pcie.git
sudo make install
sudo modprobe facetimehd
Note that in step 4, after running
sudo make install you may see an error about a signing key “e: certs/signing_key.pem”. It seems fine to ignore this message.
At this point, you should have a working camera!
So that the camera works each time you start the computer, you need to add a line to the modules file to tell elementary to load the facetime driver on boot. Type:
sudo nano /etc/modules
This will open a text file. Add a single line to the text file that says “facetimehd” (without the quotation marks), write out by hitting control+o, hit enter to save the file with the same name, and then hit control+x to exit.
The other thing to note, is that this camera driver module that was constructed will not persist when there are kernel updates. This does occur in elementary, even though it is based on a Long Term Support (LTS) version of Ubuntu, there are still periodic Hardware Enablement (HWE) updates that ship updated kernels that work with new hardware; and elementary ships those kernel updates when they are available.
There are two options to deal with kernel updates. Option A, you can just follow the same steps above if a kernel update disables the camera. The same steps all can be entered, except that the dependencies should already all be installed, and the git clone steps are not required as those cloned repositories should still be available.
Option B, for the more adventurous, is to set up DKMS, which re-compiles driver packages automatically when the Linux kernel is updated. Do this only after you have already done the above steps to get the camera working. Then, just follow the instructions from patjak under the section “Setting up DKMS (auto-compile on kernel update)”.
I will not paste all the commands here, as they are all given in the linked Github page, but you just need to enter all the commands given in the Terminal. One note is that in the bcwc_pcie folder that was created in the steps above, there should be a file called dkms.conf. Open this file through the terminal or in a text editor such as Code, and make sure that the version is 0.1 and the module name is facetimehd. If for some reason this is not the case, you can change them to these correct values. Also note that when following the steps in the link, the commands are designated as root user with the #, so most commands will require typing sudo at the beginning.
(Optional) Set a boot manager
The steps given above in this guide will result in a system that will boot by default into eOS. By holding down the option key during boot, you will get a boot menu where you can select either MacOS or eOS. This is a simple and perfectly fine way to dual boot, especially if you will be primarily using Linux.
However, if you’d like more control and customization, you can install the boot manager called rEFInd. The boot manager will load automatically whenever the computer is turned on and detect all bootable systems available – no need to hold down the option key to choose the operating system. This configuration is probably most useful for people regularly using both MacOS and eOS on the machine. For me personally, I go back and forth between the two operating systems frequently, and so I do like using the rEFInd boot manager.
Installing rEFInd is very simple. There is a nice guide given in a blog post by Ian Maddaus, but the steps are simple:
– First, disable System Integrity Protection (SIP). By holding down Command+R on boot, the machine will enter Recovery Mode or Internet Recovery Mode. Open Terminal (under Utilities), and type
csrutil disable. This will disable SIP. Reboot the computer.
– Second, you can now install rEFInd. Download rEFInd from SourceForge and unzip the download file. In that folder, there is a file called refind-install. Open a Terminal window and drag that file into the Terminal window, and hit enter. rEFInd is now installed!
– Finally, you should reenable SIP. Again, boot into Recovery Mode with Command+R, open Terminal, and this time type
csrutil enable. This will reenable SIP. In any terminal window, you can type
csrutil status to check the status of the System Integrity Protection.
The default rEFInd screen looks fine, but you can also customize it a great deal if desired. It’s easy to change to one of many themes that have been made, and I have gone with Evan Purkhiser’s Minimal theme. Below is the screenshot from Evan’s GitHub page demonstrating the look of his theme.
Because eOS is based on Ubuntu, guides for installing Ubuntu 20.04 on an Apple device will also be applicable for eOS 6. Helpful guides that describe dual-booting Ubuntu on Mac devices include a guide from LinuxNewbie and a YouTube video by Reed.
For a discussion of the recommended size of the boot partition, see this post on the AskUbuntu Forum.
Your next step is to download software – check out our guide to Installing Software on elementary OS 6.