This page is a step by step guide to get Wi-Fi and Bluetooth working on T2 Macs. This guide is also applicable to iMac19,1 and iMac19,2, which are non T2 Intel Macs.
If you're running Arch or EndeavourOS and have
apple-bcm-firmware installed, you do not need to follow this guide.
Ensure Kernel Supports OTP Firmware Selection¶
Check if this command outputs any lines:
modinfo brcmfmac | grep 4387 If it doesn't output anything, then upgrade your kernel.
Refer to the "Updating Kernel" section on your distro's FAQ for instructions if you need to update your kernel:
We now use a script which can help you set up Wi-Fi and Bluetooth. Follow the instructions below to use this script :-
- Click here to download the script.
- Boot into macOS.
- Run this script there.
- When the script shall run successfully, it shall ask you to follow either of the two options mentioned in the On Linux section, on Linux.
- Boot into Linux.
You have two options here. You can follow either of the two, its purely based on your choice. If your distro installer requires internet to install, you can also follow these steps on a Live ISO environment:
Note :- We have noticed a lot of users directly running the script on Linux and without running it first on macOS. Please ensure that you have run the script on macOS first. In case you have removed macOS, this script won't be much helpful to you.
The first is to either copy this script to Linux via a USB, download it if you have a wired internet connection, or use some other method to get it to Linux. You can then run the script again from Linux and it will finish setting up Wi-Fi and Bluetooth.
The second method is to simply run the following commands on Linux :-
sudo umount /dev/nvme0n1p1 sudo mkdir -p /tmp/apple-wifi-efi sudo mount /dev/nvme0n1p1 /tmp/apple-wifi-efi bash /tmp/apple-wifi-efi/firmware.sh
For those who don’t know how to run a script¶
If you don’t know how to run a script, follow these instructions.
Boot into macOS, and download the script. Make sure the script is there in your Downloads folder.
Open the terminal and run :-
Then boot into Linux and place the same script in the Downloads folder over there or simply run the commands the script asked you to run in Linux when you executed it in macOS.
If you placed the script in the Downloads folder instead of running the commands told by the script in macOS, run step 2 command on the terminal, this time in Linux. Else you needn't follow this step.
You can check the logs to confirm correct loading of the firmware using
sudo journalctl -k --grep=brcmfmac, the output should look similar to this
Dec 24 22:34:19 hostname kernel: usbcore: registered new interface driver brcmfmac Dec 24 22:34:19 hostname kernel: brcmfmac 0000:01:00.0: enabling device (0000 -> 0002) Dec 24 22:34:20 hostname kernel: brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac4377b3-pcie for chip BCM4377/4 Dec 24 22:34:20 hostname kernel: brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4377b3-pcie.apple,tahiti-SPPR-m-3.1-X0.bin failed with error -2 Dec 24 22:34:20 hostname kernel: brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4377b3-pcie.apple,tahiti-SPPR-m-3.1.bin failed with error -2 Dec 24 22:34:20 hostname kernel: brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4377b3-pcie.apple,tahiti-SPPR-m.bin failed with error -2 Dec 24 22:34:20 hostname kernel: brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4377b3-pcie.apple,tahiti-SPPR.bin failed with error -2 Dec 24 22:34:20 hostname kernel: brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4377b3-pcie.apple,tahiti-X0.bin failed with error -2 Dec 24 22:34:20 hostname kernel: brcmfmac: brcmf_c_process_txcap_blob: TxCap blob found, loading Dec 24 22:34:20 hostname kernel: brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4377/4 wl0: Jul 16 2021 18:25:13 version 16.20.3126.96.36.199.105 FWID 01-30be2b3a Dec 24 22:34:20 hostname kernel: brcmfmac 0000:01:00.0 wlp1s0f0: renamed from wlan0
Fixing unstable WPA2 using iwd¶
Using iwd is technically not needed for using wifi. But if you are facing unstable WPA2 issues and have to follow step 1 of the above section every time you connect to a WPA2 network, you will have to follow this section. If your connection is stable, you needn't follow this section.
Instructions in this section might be different for the distribution that you are trying to install.
To get WPA2 to work stably, install the
iwdpackage (for example
sudo apt install iwdon Ubuntu).
/etc/NetworkManager/NetworkManager.confto look like the following:
Set iwd to run on boot with the following commands (assuming that you are using systemd).
sudo systemctl enable --now iwd sudo systemctl restart NetworkManager
If you wifi disconnects or has issues otherwise its advised to restart iwd:
sudo systemctl restart iwd, or reprobe the wifi kernel module:
sudo modprobe -r brcmfmac && sudo modprobe brcmfmac.