Things I've learned having a shitty laptop

So, in my infinite quest of hopping between friends with little funds, I have learned to cherish the shitty devices that I have and make the best of them

This also means I've learned a trick or two about optimizing the resource usage of my laptop to make it...well, usable.

Don't get me wrong, it is in no way good, my phone is faster; But it IS usable.

I got an Asus X551CAP for 20€ off of (eBay) Kleinanzeigen, because some woman fucked up the windows install beyond recognition and thought it was broken. Luckily for me, it actually just needed a re-install

(Part of this blogpost is also just so I remember in the future should I ever have to setup a craptop again)

#1: Modern Windows just...won't cut it

Very short section but, as if I didn't already prefer to run Linux on my devices anyways, I pretty quickly learned that Windows 10 and 11 very obviously would not work on this thing. It has 4G of RAM, and when your desktop shell is written in react native (which I remember the W11 one being), you'll have a bad time on a device with such specs. Windows 10 did not really fare that much better, at least no recent version of Windows 10. I did not and do not intend to test LTSC or other non-user-facing builds.

#2: Use Compressed Swap on RAM, AKA ZRAM

Once I had Linux installed, I quickly learned that even slapping an SSD in, swapping to disk simply took too much time. So instead, I set up zram.

Zram allows you to, instead of swapping to a disk, swap to a compressed region of memory. So, instead of swapping to a swapfile or partition, the swap data gets compressed on-the-fly and moved into RAM. With algorithms like zstd, this compression is incredibly efficient.

At the time of writing, with (Ungoogled) Chromium, Strawberry (music player) and a foot terminal open, I store 1.1G of data in 341.4M of RAM. This means the compressed data takes up only roughly a third of the original size. Because my (sad, pathetic DDR3) memory is a lot faster than my SSD, swapping to Zram is still faster and ends up giving me a better experience than swapping to disk.

...And don't get me started on when I still had an HDD in this thing, it was unusable to swap to disk 🫠

#3: Minimize the amount of services that are running

Distributions like Fedora or Ubuntu come with lots of services out-of-the-box, which is great to enable all kinds of functionality, but can also hurt you if your goal is e.g quick boot times or trying desperately to save on memory so you can have 2 Firefox tabs open

Initially, I had installed Arch Linux on this laptop, which was actually the first time I ran mainline arch and not some downstream distribution. I then later (and now, still) installed Void Linux and have been using that since.

One nice thing about Void is that, generally speaking, when installing a package any services that it ships are not automatically enabled. So, instead of installing e.g sddm and all the dependency services automatically get enabled, I can decide myself what to enable and what not. This is how I ended with a total of just 19 system services, and 7 user services:

Alt Text: A listing of all system and user services on my system. System and users services in order, with system and user separated by a semicolon and starting with system services: NetworkManager, agetty-tty 1-6, avahi-daemon, cupsd, dbus, docker, nanoklogd, polkitd, sddm, socklog-unix, turnstiled, udevd, zramen; dbus, gomuks, pipewire, pipewire-pulse, syncthing, turnstile-ready, wireplumber

All things considered this makes my system pretty lightweight, although I could still probably strip back some of them by not having e.g gomuks autostart, or by not using plymouth and instead just living without a boot splash – although it has barely made a dent in boot times, if at all.

#4: No Firefox for Low-Memory systems

Despite it's reputation, in my experience Firefox tends to perform worse on low-memory devices, like this laptop which only has 4G of Non-Upgradable DDR3 RAM.

Especially with it's “Memory Saver” option enabled, modern chromium blows Firefox out of the water in terms of performance, and especially keeping that performance as you open more tabs.

This is disappointing to me personally, as I generally prefer running Firefox or Librewolf, but this is a compromise I've now come to terms with, and is also why I'm writing this very post in Ungoogled Chromium and not Firefox.

#5: Set up an Out-Of-Memory mechanism!

With so little memory to work with, you are inevitably going to hit some limits when running multiple things at once. Especially if you try and run e.g Discord and a few browser tabs next to one another you will suffer issues with hitting the high 80's or even 90-95% memory usage.

As such, it is VITAL that you set up some sort of OOM Mechanism. Whether that is in-kernel, or something like systemd-oomd, or another mechanism. It really does not matter, but to recover from low-memory situations something like this is worthwhile to have.

#6: Choice of Desktop matters

Generally, I've learned two things: 1. Try and avoid GNOME. The GJS runtime is quite heavy, together with the shell in general. Especially if you have a slow GPU you'll probably rarely hit 60 fps 2. Wayland desktops or compositors tend to perform better than X, even on hardware that doesn't do (full) Vulkan, or only Vulkan 1.1 – e.g you can't use any of the fancy vulkan renderers of these compositors.

This does limit you, but if what runs well on this shitty laptop is anything to go by, this is probably a good approach to take.

Funny how I am saying this whilst running a full KDE Plasma 6 desktop, which you would think is not particularly lightweight either, but it runs much better than GNOME or even some X desktops I tried. The only thing that was quicker on this so far was some standalone Wayland compositors, e.g sway or niri

#7: Try to stick to native apps where possible

Sure, native apps can be slow too, but with RAM this limited it means having multiple instances of Chromium/Electon will quickly slow your computer to a halt.

Pretty self-explanatory overall. Something that uses a native toolkit will generally be more lightweight, as a rule of thumb.

#8: Proton-Sarek and PROTON_USE_WINED3D=1 are your friends

If you too do not have Vulkan 1.3 support, or even your VK 1.1 support is broken, not using vkd3d-proton or using something like Proton-Sarek will definitely be your friend in trying to get games running

I've successfully played through Half-Life 2, Portal and Portal 2 on my shitty laptop with the Linux native builds and openGL, and then later played the windows builds through Proton-Sarek (with...DXGL? Which is a thing apparently?) as most Workshop content for Half-Life 2 does not run under the Linux builds beyond just swapping the viewmodel of some weapon.

Generally speaking there is options to get things running on crappy devices, you just gotta know where to look :P


If you wanna support me, check out my Ko-Fi! → https://ko-fi.com/cyrneko