Arch Linux on MacBook Pro with T2

10 minute read Updated

How to dual-boot Arch Linux on a 2019 or 2020 Mac.
Table of Contents

Since the 2014 MBP I was using to run Invisible Arch Linux finally died I’ve felt crippled in my ability to develop quality software effectively. And although running GNU/Linux in a virtual machine or via SSH to Termux on Android have their appeal, nothing beats bare metal. Nothing. So it’s time to revisit dual-booting Arch Linux on a MacBook Pro once again.

Last time I looked to run Arch on my T2 MBP the drivers for the keyboard and trackpad were still under active development and so I got basically nowhere. As of December 2021, however, not only are the drivers working, there’s an entire Wiki set-up around getting Linux on the T2 machines.

The following is a overview of the Arch installation process I used.

Heads up: I’ve created a progress report based on 10 weeks of T2 Linux usage on my 2019 MacBook Pro. Check it out to see if this is worth your time.

Allocate Space

To get started I freed up 200 gigs on the SSD by:

  • Running Storage Management to identify waste
  • Running docker system prune because I actively use Docker
  • Deleting cruft in ~/Library like old apps config
  • Clearing and limiting my Telegram cache

Upgrade macOS

I also made sure I finished upgrading to macOS Monterey as I was coming out of the Beta period and didn’t want to take any unnecessary risks. Also, this would ensure I had the latest device drivers on the machine in case I need to use any during the Arch installation.

About this Mac showing the first version of macOS Monterey
About this Mac showing the first version of macOS Monterey

Disable the T2 Chip

See the T2 wiki for instructions on how to do this. Apple has some as well as it’s required for those who wish to use Boot Cramp to install Windoze (lame).

Create Partitions

Next I used Disk Utility to create some FAT partitions. While creating the partitions I ran into an issues shrinking the volume. Having seen this problem before while dual-booting Manjaro on an old machine I knew the easy fix was to create an APFS partition first then destroy it to bend macOS to my will.

I created two partitions, both ExFAT, one for SWAP and one to boot:

Disk Utility showing partitioned drive.
Disk Utility showing partitioned drive.

Choose whatever suits you. I opted for 160GB for Arch and 8GB for SWAP. If you’re not sure how much you’ll need I left some guidance in my last dual-boot post.

Boot Live USB

There are multiple ISOs you could use to get set-up. Each of them is customized for T2 Linux. This is likely to change in the future.

At time of writing the latest release of archiso-mbp is Aug 29, 2021 and it’s running kernel 5.12 which is already growing old and I do not recommend it. The funami.tech ISO is running kernel 5.15 and is the one I had success with getting Arch Linux set-up without much hassle.

Furthermore, the funami.tech ISO includes a ready-made kernel package, headers and Wi-Fi drivers in the /t2kern directory which makes set-up quick as it’s designed to create and use a local Pacman repository during pacstrap.

The downside of using the funami.tech ISO is that you may need to switch kernels later (e.g. to archiso-mbp once it’s updated). And unfortunately it doesn’t provide GPG key signatures. But it is a serviceable ISO and has been essentially blessed by way of reference in the T2 Wiki after I sang its praises.

If you choose to go with the Aug 29, 2021 flavor of archiso-mbp, you will theoretically have a proper upgrade path. But you’re also going to have to spend more time getting Wi-Fi working and offline installs will be harder as well.

I used the funami.tech ISO from Dec 26, 2021 because it “just worked” for me. Whichever one you choose you can burn it with Balena Etcher or the dd command. I recommend Etcher as it includes some safeguards to help ensure you don’t accidentally wipe your entire hard disk.

Connect to Wi-Fi

Depending on which ISO you choose, and as you boot into the Live ISO environment, Wi-Fi drivers may or may not be installed out-of-the-box. If they’re not, you can ad lib on the steps outlined in the T2 Linux Wifi Guide in the wiki. If they are, you can connect to a wireless network using iwd like so:

systemctl start iwd.service && \
iwctl --passphrase <pass> station wlan0 connect <wifi_ssid>

Note: I’ve covered offline arch installs previously in Invisible Arch Linux.

If that gives you issues, run iwctl and you’ll have a nice little nCurses TUI where you can get help establishing and validating the connection.

Verify Partitions

Before installing Arch run parted from within Archiso and make sure your partitions appear as expected and are formatted properly. To know which disk to inspect run lsblk -f before running Parted and find your SSD device name.

CAUTION: Be careful when running parted or any formatting tools from within the Live USB environment. If you’re not careful, you could wipe out your disk and lose your macOS install. Regardless of your experience consider backing-up your macOS data before going any further and consider yourself warned.

Make sure your Swap and boot and any other partition is formatted correctly and contains the expected flags. If you need help, with that you can use my Invisible Arch Linux instructions as a point of reference but do not follow them verbatim.

The actual partitioning work can be done using the graphical Disk Utility tool while booted into macOS as described in Create Partitions.

Install Archlinux

Two approaches here. Scripted and manual. There’s an T2 MBP installer profile for archinstall. Archinstall wasn’t designed to work on partitions though it does have an experimental mode to allow it to work on /mnt directories if you’re feeling brave and have everything backed up. When I tried it I ran into a number of bugs and had to give up though the TUI it provides is very slick.

For manual installs see T2 Wiki Arch Installation for instructions. If you’ve never installed Arch before, you should learn how to do manual install first.

Installation resources:

Use them to complete the installation. You can join the Discord Server maintained by the T2 folks and ask for help if you get stuck. Just be aware Discord has a very naughty Terms Of Service. Additionally, some of the admins of the server talk openly about medical experiments I prefer not to be associated with.

Tip: Consider using nano instead of vim to do any file editing if the touchbar isn’t working to avoid the desire to use the Esc key. If you get stuck in INSERT mode in vim, press Ctrl-c to get back to normal editing.

Copy the network configuration files from /etc/systemd/network on the ISO into your chroot so you won’t have to configure systemd manually after first boot. Configuration available for three kinds of networks and they’re very nicely assembled. Copy them to the same path under your /mnt directory to use them.

Complete your install and set a root password. Then reboot, holding option and choosing the new EFI option made available (assumes systemd boot). If you fail to boot into your new arch install go back and double check your ESP loaders and /etc/fstab and make sure if you’re using UUIDs your loader(s) match fstab.

First Boot

At first boot we’re going to configure networking and install a desktop.

Configure Network

iwd is a very simple tool and can be used without NetworkManager or a separate DNS resolver. All it needs is systemd. To get Wi-Fi working after a fresh install you need exactly 4 lines of config and to start/enable a few services:

  • Start/enable iwd.service, connect to a network using iwctl and then run iwctl station wlan0 show to show connection details. If you do not have an IP address, follow the steps in Enable built-in network configuration on Arch Wiki. This amounts to writing two lines of config so you will be assigned an IP address by the DHCP functionality built into iwd. Restart iwd when finished.

  • Ping 1.1.1.1 and archlinux.org. If you copied the network configuration files as described in Install Archlinux above you should already be able to connect to WLAN and ping an IP address. To allow iwd to resolve IP addresses you need to configure a resolver. Here we’re using systemd. Add another two lines of configuration in /etc/iwd/main.conf as described in Select DNS manager.

  • Once the systemd resolver is set via the iwd config changes made in the last step start/enable it along with network services for DNS to begin working:

    systemctl enable --now systemd-networkd && \
    systemctl enable --now systemd-resolved
    

    Now you should be able to ping archlinux.org and resolved will lookup the DNS properly. This means pacman may be used now as well to install any packages you forgot you wanted during pacstrap earlier.

  • If you use Docker, Docker will not be able to do any DNS at first because it expects /etc/resolv.conf to contain configuration which it does not. To address this create a symlink from /etc/resolv.conf to /run/systemd/resolve/resolv.conf as described in part 2b of this ServerFault answer. You’re welcome.

  • Also, if you like, review the iwd and networkd docs on Arch Wiki and make any changes you like. For example, with a couple more lines of config you can enable IPv6 support. Or you can configure the network MAC address to change every time you connect to the Internet to improve anonymity. You could also disable network scanning so iwd doesn’t scan when disconnected.

That should wrap-up everything network-related needed to get productive. Next we’re going to install a desktop environment. I’m going to use GNOME.

Install Desktop

Add a new user and set their password:

useradd -m -g users -G wheel,storage,power -s /bin/bash <USERNAME>
passwd <USERNAME>

Make them a super user by running EDITOR=vim visudo and uncommenting:

/etc/sudoers
%wheel ALL=(ALL) ALL

Then install and start gnome desktop:

pacman -S gnome
systemctl start gdm

From there login as the new user and probably install an AUR helper such as Yay, copy in or generate your GPG keys and gopass repo and you’re off to the races.

Personal Experience

Though I had no problems with most drivers working, I did run into issues when I tried to mix steps from the T2 Wiki with the ISO I chose. What I learned was that most of the manual steps DKMS section of the T2 Wiki were not necessary depending on ISO chosen.

The speakers don’t sound as nice as they do in macOS and for some reason I can’t share my screen in Jitsi Meet. But the video camera is working, music plays in stereo and the new version of GNOME looks really nice running on a hi-definition display.

My biggest gripe is that the mic isn’t working and I jacked up the system so bad trying to get it running I had to reformat and reinstall Arch after I tried to pivot to PipeWire from PulseAudio without much luck. Your mileage may vary.

Summary

In this post I summarized how to install Arch Linux in a dual-boot configuration on MacBook Pro with a T2 chip. I also provided some tips on how to create a minimalist network set-up and left you with some of my personal experiences. T2 Linux also works for the 2020 MacBook Pros, the MacBook Air and other Mac machines as well. Try it out to make your Mac feel just like GNU.