How I fixed broken Wi-Fi on my 2012 Mac Mini running Zorin OS
Skip to the end for the quick-and-dirty solution.
I recently installed Zorin OS Lite on a 2012 Mac Mini. When I booted it up for the first time, the Wi-Fi didn’t work because I didn’t have the drivers. This is how I fixed it.
These steps worked for me, and I hope they’re helpful for you. I suspect these instructions work on many old Macs with other Linux distros like Ubuntu. (In fact, these instructions were inspired by a similar guide, which was itself inspired by an old Ubuntu guide.)
At a high level, I did two things:
- Installed the firmware for the wireless card.
- Changed a couple of settings.
I also used an existing Intel computer, running a Debian-based OS, to download the necessary files.
Installing the firmware
I needed to install firmware-b43-installer
. In a perfect world, I’d run apt install firmware-b43-installer
, but I didn’t have internet access!
Downloading the package
I learned that you can download the dependencies on one computer, ferry the downloaded .deb
file to another, and install it there.
We can download our package like this:
# Run on a computer with internet
sudo apt install --download-only firmware-b43-installer
Packages are downloaded into /var/cache/apt/archives
. Their dependencies are also downloaded, which is relevant to us because this package has a dependency.
This downloaded two files on my machine: the package, firmware-b43-installer_GARBAGE_all.deb
; and its dependency, b43-fwcutter_GARBAGE_amd64.deb
. (Replace “GARBAGE” with some letters and numbers I got.) I copied these to a thumb drive.
I see “amd64” in the filename, and I wonder if you’d get different results if you downloaded these packages on a computer that used a processor different from the Mac Mini, like one with an ARM chip. Maybe!
Downloading a necessary file
I didn’t realize this until I tried to install it, but the firmware package downloads a file during installation.
I downloaded lwfinger.com/b43-firmware/broadcom-wl-5.100.138.tar.bz2 to my thumb drive, too.
Moving the files
With everything necessary downloaded, I ferried the files to the Mac Mini. I put the files on the Desktop, but you could put them anywhere.
Setting up a web server
Earlier, I mentioned that the firmware downloads a file during installation. Specifically, it tries to download a file from this URL:
http://www.lwfinger.com/b43-firmware/broadcom-wl-5.100.138.tar.bz2
It can’t do that without internet access, so we’ll have to set up a fake web server.
First, I edited /etc/hosts
so we could lie about where www.lwfinger.com
lives, pretending it lived on my machine. I added the following entry with sudo vi /etc/hosts
:
127.0.0.1 www.lwfinger.com
Next, I started a fake web server. You can start a web server in many different ways, but Python’s built-in worked for me. Here’s what I did to set that up:
cd ~/Desktop
# Set up the folder structure
mkdir -p server/b43-firmware
mv broadcom-wl-5.100.138.tar.bz2 server/b43-firmware
# Start the Python web server
cd server
sudo python3 -m http.server 80
I visited http://www.lwfinger.com
in the browser and verified that it was serving the file correctly, and from the correct path.
I left this running and opened a new Terminal tab, and undid this work when I was all done.
Installing the packages
Everything was now set up, and I just needed to install the packages.
I don’t know the details, but apt
is a “frontend” for dpkg
, Debian’s package manager. So I just used dpkg
to install things.
I installed the dependency package first:
sudo dpkg --install ~/Desktop/b43-fwcutter_GARBAGE_amd64.deb
Then I installed the main package:
sudo dpkg --install ~/Desktop/firmware-b43-installer_GARBAGE_all.deb
The hard part was out of the way: I’d successfully installed the firmware. Now to tweak a couple of settings.
Changing some settings
The Ubuntu guide I roughly followed mentions two additional things, which I’m regurgitating here.
Edit
/etc/modprobe.d/blacklist.conf
and add the following line:blacklist ndiswrapper
Create
/etc/pm/config.d/modules
and block some modules:SUSPEND_MODULES="b43 bcma"
I used sudo
to accomplish all of this.
I don’t know what either of these do, but my vague understanding is that these prevent certain parts of the driver from running.
With all that done, I restarted the machine and voilĂ ! I was online.
If you’ve read up to this point, you can stop reading. I hope this has helped you!
If you want a quick-and-dirty summary, read on.
Quick-and-dirty summary
You’ll need an online computer with apt
on it (i.e., not your Mac Mini). You might need to do some extra work if this computer doesn’t have a 64-bit Intel processor.
On the online computer, put the dependencies on an external drive.
- Run
sudo apt install --download-only firmware-b43-installer
to download the package and its dependency. - Copy
/var/cache/apt/archives/b43-fwcutter_*_amd64.deb
to your external drive. - Copy
/var/cache/apt/archives/firmware-b43-installer_*_all.deb
to your external drive. - Download
https://www.lwfinger.com/b43-firmware/broadcom-wl-5.100.138.tar.bz2
and put it on the external drive.
- Run
Move the external drive to your Mac Mini and copy all 3 files to the Desktop. (These instructions assume you put things on the Desktop, but you can put them anywhere.)
On the Mac Mini, install the wireless driver.
- Tell the installer to look at your “fake” web server by running
echo '127.0.0.1 www.lwfinger.com' | sudo tee --append /etc/hosts
. - Create the folder structure for your server by running
mkdir -p ~/Desktop/server/b43-firmware
, thenmv ~/Desktop/broadcom-wl-5.100.138.tar.bz2 ~/Desktop/server/b43-firmware
. - Start the server by running
cd ~/Desktop/server && sudo python3 -m http.server 80
. Leave this running - Open a new Terminal tab.
- Install the dependency by running
sudo dpkg --install ~/Desktop/b43-fwcutter_*.deb
. - Install the firmware by running
sudo dpkg --install ~/Desktop/firmware-b43-installer_*.deb
.
- Tell the installer to look at your “fake” web server by running
Update a couple of settings on the Mac Mini.
echo 'blacklist ndiswrapper' | sudo tee --append /etc/modprobe.d/blacklist.conf
sudo mkdir -p /etc/pm/config.d
echo 'SUSPEND_MODULES="b43 bcma"' | sudo tee --append /etc/pm/config.d/modules
Restart the Mac Mini. Your Wi-Fi should now work!
I hope this guide helps anyone in a similar situation!