January 12, 2024 - Putting Linux Mint with XFCE on a 14 year old laptop - Toshiba M645
Its dirty, but otherwise in great condition and now running Linux Mint XFCE
I rehabilitated a ~14 year old laptop, the Toshiba Satellite M645 I bought for graduate school, with Linux Mint XFCE, but getting it to work was at least 36 hours of trial and error.
My motivation to put Linux on it was that original OEM packaged Windows7 was a security risk, and the free upgrade to Windows10, while viable, is expected to be EOL soon anyway. Plus with the enshittification of Windows in general, has motivated me to get familiar with Linux for a full switch anyway.
I tried installing all the popular and approachable Linux distros first and kept getting stuck due to the installer freezing or getting a black screen during boot.
SPOILER: The trick to solving my problems was a little discussed Linux kernel boot parameter:
acpi=off
I'm embarrassed how much time I spent on getting this to work, but much of it was in parallel while waiting for an ISO to be burned to a USB stick or waiting for the OS to install, etc.
The issue I kept banging my head on, was why really old distributions would work ok (eg Ubuntu 11), but not ones after that. I quickly found my way to doing two reproducibly helpful things after I learned how to modify the GRUB boot commands:
- add
nomodeset
to the Linux kernel boot command - remove
gfxmode $linux_gfx_mode
from the GRUB boot config
Unfortunately, these solutions left me booting into a 4:3 screen resolutions when my laptop has a 16:9 screen resolution. So the fix was temporary in any case.
One of the Linux distributions I tried was Pop!OS which correctly booted on into a Live environment via USB without installing the OS, but the performance was unusable and left many screen artifacts present and desktop application windows rendered but un-painted.
I also found some old CDs I had burned with Puppy Linux and Damn Small Linux about 13 or 14 years ago when I was trying to rehabilitate a free 2005-ish IBM Thinkpad my workplace had decommissioned. Puppy Linux worked great but really wasn't an environment I'd be able to use my laptop for anything usable. Still, it showed that getting a Linux to run correctly on my laptop was viable, if with older distributions.
This is when I started turning a corner from merely trying various Linux distributions to realizing there was something going on with the Linux kernel. I started incrementally working my way from older Ubuntu distributions to newer ones. Through this trial-and-error process, I learned that somewhere around Linux kernel ~3.19 is when something changed that made distributions not work with my laptop. I would have been happy to stay on a Linux distribution that uses an old kernel version if any had current support. However, when I tried to apt update
on Ubuntu 11, I got a long series of errors, even after changing the repository source to the archive URL. This means modern software wouldn't work out of the box and there were likely security risks I wasn't willing to accept.
I started investigating changes to the Linux kernel between versions and eventually realized that there were at least a half dozen (probably more) Linux kernel command line options that changed behavior with regard to video cards. I also learned during this process that the Toshiba M645 has dual graphics "cards": an integrated Intel chip and a dedicated Nvidia GT330M with "Optimus" technology, which introduces its own idiosyncrasies to resolving the issue. Fortunately, through this process, I learned a few Linux CLI commands like lshw -c video
which was helpful in telling me what the OS thought it had going on for video hardware and drivers.
I started collecting a list and writing down my hypotheses, tests, results and the URLs of information sources in my notes app for all the different command line configuration changes I could make:
parameter | result |
---|---|
nomodeset | ✅⚠ |
i915.modeset=0 | ❌ |
i915.modeset=1 | ❌ |
nouveau.modeset=0 | ❌ |
nouveau.modeset=1 | ❌ |
nosplash | ❌ |
nolapic | ❌ |
remove 'quiet' | ❌ |
nouveau.noaccel=1 | ❌ |
nouveau.noaccel=0 | ❌ |
noapic noacpi nosplash irqpoll | ❌ |
[etc] | |
...and many other combinations including tests that merely changed boot configurations.
In only one single blog article did I find the magical incantation which would result in a both a good boot into the GUI and also get the screen resolution correctly:
acpi=off
Of course, by this point I hadn't realized whether it was this alone, or its usage in combination with another parameter that resulted in a successful boot. I did have, at least, and usable OS that I could begin doing something productive with on my ancient laptop.
I still have to try tweaking my BIOS settings and a few more boot parameters, but I'm taking that part slow since I have a fairly usable OS on old hardware that is in really good condition - usable for a kid's laptop, home media server, test bench, or just browsing the web. In any case, I can keep this laptop from becoming e-waste and defer buying anything I might need an extra compute resource for. I also learned a ton in the process, which may be helpful in the future.
I keep asking myself: what process would a more knowledgeable person have followed to troubleshoot and solve? How was I supposed to have known and discovered the acpi=off
parameter to fix my problem? How could the Linux kernel developers (or Linus), or Linux distribution developers use the answers to those questions to create a more streamlined user experience and help save tens of thousands of people-hours and e-waste?