I like small laptops. Years ago I got a 10-inch
Asus EeePC with an Atom processor. It wasn't very powerful, but it ran Linux. Well, mostly. The audio drivers sometimes had problems and I never got Bluetooth to work. Battery storage capacity degrades over time. The EeePC battery originally lasted over 12 hours per charge, but after nearly a decade, it would get about 2 hours. I couldn't find a replacement battery, so five years ago I decided to get a new laptop.
The replacement laptop was a little larger (13-inch), but all of the components were supposed to be compatible with Linux. It also came with Windows 10 installed. I always intended to put Linux on it, but never got around to it. Since I only used it for web browsing and remote logins (using PuTTy), upgrading was never an urgency and Win10 was good enough.
However, over the years the laptop began to develop problems:
- The network sometimes wouldn't auto-connect after waking from suspend mode. I'd have to toggle the network on and off a few times before it would work. Other people had similar problems with Win10. Their solutions didn't work for me, but it wasn't annoying enough to replace the operating system.
- The mousepad's button began losing sensitivity. Just as I had worn through the keyboard on my desktop computer, I was wearing out the trackpad's button. But it wasn't bad enough to replace the entire laptop.
- With Win10 heading toward end-of-support (EoS is October 14, 2025), I knew I needed to upgrade the operating system sooner than later.
The final straw was the most recent
Patch Tuesday. The laptop downloaded the updates, rebooted, and just sat at "Restarting". I couldn't figure out how to get past this. I'm sure there are instructions online somewhere, but I decided that it would be easier to install Linux.
(While I couldn't get back into the Windows system, I wasn't worried about backing up any files. This laptop is only used for remote access to the web and servers, and for giving presentations. All personal files already existed on my other systems.)
Intentional Procrastination
There's one reason I kept putting off installing Linux. It's not as simple as downloading the OS and installing it. (If that's all it took, I'd have done it years ago.) Rather, it usually takes a few days to customize it just the way I like it.
This time, I installed Ubuntu 24.04.2 (Noble Numbat). The hardest part was figuring out how to unlock the drive (UEFI secure boot). Otherwise, the installation was painless.
On the up side:
- The laptop is noticeably faster. (I had forgotten how much of a resource hog Win10 is.)
- The hard drive has a lot more room. (Win10 is a serious disk hog.)
- The network wakes up immediately from suspend. That was a Windows bug, and Linux handles it correctly.
- This is an older laptop. The battery originally lasted 8-9 hours under Windows, but had aged to lasting 4-6 hours from a full charge. With Linux, the same laptop and same old battery is getting closer to 10-12 hours, and that's while doing heavy computations and compiling code.
- Unexpected: The trackpad's buttons work fine under Linux. I thought I had worn out the physical contacts. Turns out, it was Win10.
On the downside, it's yet another Linux desktop, and that means learning new ways to customize it. (Linux is made by developers for developers, so the UI really lacks usability.)
Disabling Updates
My first customization was to disable updates. I know, this sounds completely backwards. However, I use my laptop when I'm traveling or giving presentations. I
do not want anything updating on the laptop while I'm out of the office. I want the laptop to be as absolutely stable and reliable as possible. (I've seen
way too many conference presentations that begin with the speaker apologizing for his computer deciding to update or failing to boot due to an auto-update.)
In the old days, there was just one process for doing updates. But today? There are lots of them, including apt, snap, and individual browsers.
- Snap: Snap accesses a remote repository and updates at least four times a day. (Seriously!) On my desktop computers, I've changed snap to update weekly. On my production servers and laptops, I completely disabled snap updates. Here are the commands to check and alter snap updates:
- To see when it last ran and will next run:
snap refresh --time --abs-time
- To disable snap auto-updates:
sudo snap refresh --hold
- To restart auto-updating:
sudo snap refresh --unhold
- To manually check for updates:
sudo snap refresh
Now the laptop only updates snap applications when I want to do the update.
- Apt: In older versions of Linux, apt used cron to update. Today, it uses system timers. To see the current timers, use:
systemctl list-timers --all
Leave the housekeeping timers (anacron, e2scrub, etc.), but remove the auto-update timers. This requires using 'stop' to stop the current timer, 'disable' to prevent it from starting after the next boot, and optionally 'mask' to prevent anything else from turning it back on. For example:
# Turn off apt's daily update.
sudo systemctl stop apt-daily-upgrade.timer
sudo systemctl disable apt-daily-upgrade.timer
sudo systemctl stop apt-daily.timer
sudo systemctl disable apt-daily.timer
# turn off motd; I don't use it.
sudo systemctl stop motd-news.timer
sudo systemctl disable motd-news.timer
But wait! There's more! You also need to disable and remove some packages and settings:
- Remove unintended upgrades:
sudo apt remove unattended-upgrades
- Edit
/etc/apt/apt.conf.d/20auto-upgrades and set APT::Periodic::Update-Package-Lists and APT::Periodic::Unattended-Upgrade to "0".
- And be sure to really disable it:
sudo systemctl disable --now unattended-upgrades
If you don't do all of these steps, then the system will still try to update daily.
- Ubuntu Advantage: Brian Krebs has his "3 Basic Rules for Online Safety". His third rule is "If you no longer need it, remove it." I have a more generalized corollary: "If you don't use it, remove it." (This is why I always try to remove bloatware from my devices.) Canonical provides Ubuntu Advantage as their commercial support, but I never use it. Following this rule for online safety, I disabled and removed it:
sudo systemctl stop ua-messaging.timer
sudo systemctl stop ua-messaging.service
sudo systemctl stop ua-timer.timer
sudo systemctl mask ua-messaging.timer
sudo systemctl mask ua-messaging.service
sudo systemctl mask ua-timer.timer
sudo rm /etc/apt/apt.conf.d/20apt-esm-hook.conf
sudo apt remove ubuntu-advantage-tools
sudo apt autoremove
- Browsers: I use both Firefox and Chrome (Chromium). The problem is, both browsers often check for updates and install them immediately. Again, if I'm traveling or giving a presentation, then I do not want any updates.
- I installed Chrome using snap. Disabling snap's auto-update fixed that problem. Now Chrome updates when I refresh snap.
- Firefox was installed using apt. Disabling the browser's auto-update requires going into about:config. Search for "app.update.auto" and set it to "false". At any time, I can go to the browser's menu bar and select Help->About to manually trigger an update check.
While I turned off auto-updates, I set a calendar event to periodically remind me to manually perform updates on all of my computers. (I may not have the latest patch within hours of it being posted, but I do update more often than Window's monthly Patch Tuesday.) To update the system, either when the calendar reminds me or before going on a trip, I use:
sudo apt update ; sudo apt upgrade ; sudo snap refresh
Phone Home
I've configured my laptop, cellphone, and every other remote device to "phone home" each time they go online, change network addresses, or have a status update. One of my servers has a simple web service that listens for status updates and records them. This way, I know which device checked in, when, and from where (IP address). I also have the option to send back remote commands to the device. (Like "Beep like crazy because I misplaced you!") It's basically the poor-man's version of Apple's "Find My" service.
Figuring out where to put the phone-home script was the hard part. With Ubuntu 24.04, it goes in:
/etc/network/if-up.d/phonehome. My basic script looks like this:
#!/bin/sh
curl 'https://myserver/my_url?status=Online' >/dev/null 2>&1
(Make sure to make it executable.) This way, whenever the laptop goes online, it pings my server. (My actual script is a little more complicated, because it also runs commands depending on the server's response.)
Desktop Background
I like a simple desktop. Few or no icons, a small task bar, and a plain dark-colored background. Unfortunately, Ubuntu has migrated away from having solid color backgrounds. Instead, Ubuntu 24.04 only has an option to use a picture. Fortunately, there are two commands that can disable the background picture and specify a solid color. (I like a
dark blue.)
gsettings set org.gnome.desktop.background picture-uri none
gsettings set org.gnome.desktop.background primary-color '#236'
These changes take effect immediately.
Terminal Colors
With such as small laptop screen, I don't want large title bars or borders around windows. However, the Ubuntu developers seem to have taken this to an extreme. I spend a lot of time using the command-line with lots of terminal windows open. The default terminal has a dark purple background (a good, solid color) and no visible border around the window. But that's a problem: If I have three terminal windows open, then there is almost no visual cue about where one terminal window ends and the next begins.
I quickly found myself constantly fiddling with title bars to figure out which terminal window was on top and wiggling the window's position to figure out where the borders were located. Even with tabbed terminal windows, there is very little visual distinction telling me which tab is active or letting me know when I've switched tabs.
After a few days of this, I came up with a workaround: I give every terminal window a different background color. Now there's a clear visual cue telling me which window and tab is active.
The default shell uses bash, which means it runs $HOME/.bash_aliases each time a new window is opened. Here's the code I added to the end of my .bash_aliases file:
##### Set terminal background color based on terminal number
# get terminal name, like: /dev/pts/0
termnum=$(tty)
# reduce the name to the number: /dev/pts/1 become 1
termnum=${termnum##*/}
# I have 10 unique colors; if more than 10 terminals, then repeat colors
((termnum=$termnum % 10))
# set the color based on the terminal number, using escape codes.
case $termnum in
0) echo -n -e "\e]11;#002\e\\" ;;
1) echo -n -e "\e]11;#010\e\\" ;;
2) echo -n -e "\e]11;#200\e\\" ;;
3) echo -n -e "\e]11;#202\e\\" ;;
4) echo -n -e "\e]11;#111\e\\" ;;
5) echo -n -e "\e]11;#220\e\\" ;;
7) echo -n -e "\e]11;#321\e\\" ;;
8) echo -n -e "\e]11;#231\e\\" ;;
9) echo -n -e "\e]11;#123\e\\" ;;
esac
Now I can have five open terminals, each with a different background color. Each terminal is easy to distinguish from any adjacent or overlapping windows.
Almost Done
It took about two hours to install the laptop. (That includes downloading Ubuntu, copying it to a thumb drive, and installing it on the laptop.) Many of my customizations, such as setting up my remote server access and setting my preferred shell preferences, were straightforward.
Switching from Windows to Ubuntu gave this older laptop a lot of new life. But with any new system, there are always little things that can be improved based on your own preferences. Each time I use the laptop, I watch for the next annoyance and try to address it. I suspect that I'll stop fiddling with configurations after a month. Until then, this is a great exercise for real-time problem solving, while forcing me to dive deeper into this new Ubuntu version.