Getting Jammy Jellyfish Working with a 2010 17″ MacBook Pro
Did you ever get that machine that you just love, and hate the idea of planned obsolescence or just plain old age keeping you from using it?
I covered this in a previous article, but it still stands. I use Scrivener 3 in a Wine implementation for my writing, and as a daily driver for Dotnet Core or Java development, it’s still highly viable.
I initially upgraded from 20.04 to 22.04 “Jammy Jellyfish,” and things worked fine at first, but I was finding problems with the Nouveau NVIDIA drivers, and things were just sluggish. Suspend in particular was no longer working…it just did not like the video drivers.
I tried a reinstall, and it was only picking up the Intel HD video card (this MacBook Pro model had both Intel graphics and the GPU-equipped NVIDIA GeForce 330M). The system would frequently stall on any slightly intense GUI operations. I forgot the steps I took to get it working under 20.04, too, so there were a couple of installations and a little gnashing of teeth.
So, with that, I went ahead and checked the Personal Package Archive (PPA) of user “kelebek333,” who has done a great job bringing along legacy drivers to current versions of Ubuntu, and sure enough, he had ported the 340 NVIDIA drivers to “Jammy Jellyfish.”
Step 1: Prep the setpci Objective
Before you do anything with the drivers, this is the step that matters. If you have other machines that may have different graphics adapters, you’ll want to check before you just blandly copy what I have above.
$ sudo lshw -businfo -class bridge -class display
You’ll want to make note of the Bus info for the GT 330M (or your graphics card) and the PCI Bridge immediately above it in the list. You’ll take the {00:00.0} characters at the far right of that field, and replace those in the /etc/grub.d/01_enable_vga.conf file you create.
After you’ve created the file, run the following two commands:
$ sudo chmod 755 /etc/grub.d/01_enable_vga.conf
$ sudo update-grub
After that, reboot, and test your PCI settings with the following commands:
$ sudo setpci -s "00:01.0" 3e.b
$ sudo setpci -s "01:00.0" 04.b
In the case of the 3e.b value, mine returns 0a and not 08, but it still works, so whatever.
Step 2: PPA and Adding the Nvidia Drivers
Now and only now do I add kelebek333’s PPA to our repos, as well as the update and a mod to X module paths that’s necessary in any kernel version greater than or equal to 5.11.x.
$ sudo add-apt-repository ppa:kelebek333/nvidia-legacy
$ sudo apt-get update
$ sudo apt-get install xorg-modulepath-fix
After this, the proprietary driver should be available in your Ubuntu Software & Updates app. If it’s not already selected at this point, do so, and it’ll work.
Endstate?
Is it perfect? No. There are some weird artifacts here and there, but suspend works and I no longer have the kinds of deleterious hangs that make working impossible.
Jammy Jellyfish is incredibly performant. I am primarily running a couple of pieces, the latest version of Eclipse with Java 17, MySQL, Postman, Visual Studio Code, and Oracle’s MySQL Workbench. I occasionally use Docker for some of my Dotnet Core dev, particularly MS SQL and the Azure Cosmos DB emulator.
MongoDB v5 and above don’t run, something I mentioned before, because of processor requirements.
Being a Linux user does, from time to time, demand a little more of users than other operating systems, but it is lovely to free myself from the shorter purchasing cycles of Apple in particular. The day will come when my 2017 iMac is similarly orphaned, and though I’ll have to figure out how to make that Fusion Drive work with it, Linux will be the answer there, too.
UPDATE: You should note, in the process of adding more stability to this system, it does use X11 instead of Wayland. Since I’m using older, proprietary drivers, I suspect that there will never be support of Wayland in the cards for this machine. I’ll keep eyes on this, and if that should change, I’ll update accordingly. I’m a programmer, not a gamer, and X11 renders quickly enough for me.