Turn your old laptop into low-end gaming machine
Table of Contents
Typical low-end laptop specs⌗
10+ years old jank from a budget line-up.
- CPU: Mid-tier/limited (even back when it was released), likely from Haswell era
- RAM: 8Gb, ancient and unupgradable
- GPU: iGPU + NVIDIA M-something
- STORAGE: ~256Gb SATA HDD, that is still somehow works
This post was "inspired" by experience with potatoes like that.
Why Windows is a NO-GO for an old laptops⌗
but Linux do the job.
- Expectations:
OS detects and drives all your hardware properly
- Reality: Sometimes there just no drivers for your old crap (especially on Wndows 10+). Sometimes drivers are buggy or/and limited, ex. lacking Vulkan implementation for your old GPU, since manufacturer stopped care many years ago. In contrast, linux kernel most likely has driver for your device + some extra fixes, since community still care.
- Expectations:
OS runs stable
- Reality: Old hardware are well known source of random BSODs on modern Windows. Linux typically behave much better.
- Expectations:
OS receives updates regularly and installs them in non-intrusive way
- Reality: You know how it is 🙈
- Expectations:
OS has low overhead
- Reality: Windows always gonna do a lot of stuff in the background (even when you cripple it by “de-bloating”). It’s almost impossible to make Windows do ONLY that ONE particular thing that YOU want. Linux distro can do a great job of standing out of your way.
Other reasons
- Windows installation can be a total p-i-a, since your old buddy probably lacking TPM and other things that Windows 10+ so desperately needs.
- Steam dropped support for Windows <= 10 (and Windows 10 will reach EOL in 2025).
- Using unsupported Windows version is a security hazard.
- Windows is not free of charge. Obviously.
Choosing the right Linux distro⌗
avoid following the hype.
Grabbing SteamOS and shoving it into your poor potato most likely not gonna end well! Despite being “gaming oriented OS” it is quite HEAVY AND HARDWARE-SPECIFIC. Popular full blown desktop distros like Pop!_OS are also sub-optimal for low-end devices, because of their full blown fat DEs.
Lubuntu can be a quite decent choice, it only takes about 500(Mb!!!) of you RAM and do almost nothing in a background. To my knowledge it is the lightest distro available, that is still easy to install and use. It runs really fast and feels like something from XP era, thanks to LXQt desktop environment.
Further topics are based on experience with Lubuntu 24.04 LTS (Noble Numbat).
Installation notes⌗
- LTS version will provide packages that are more stable.
- Minimal installation option is an obvious choice for our use-case.
- You’ll probably want to opt-out from full disk encryption, since it’s gonna take its toll on performance.
Configuration⌗
We are not going to use Snap or Flatpack for this setup, otherwise we introduce noticeable overheads, as well as some hard to trace issues
sudo systemctl stop var-snap-*
sudo apt remove --purge snapd
echo '
Package: snapd
Pin: release a=*
Pin-Priority: -10
' | sudo tee /etc/apt/preferences.d/nosnap
sudo apt update
Install proprietary drivers if you need to (ex. for an old NVIDIA GPU)
sudo ubuntu-drivers devices | grep recommended
sudo ubuntu-drivers install nvidia:XXX
sudo prime-select nvidia
Install some packages
sudo apt install procps featherpad partitionmanager qdirstat exfatprogs lm-sensors fancontrol smartmontools mesa-utils libd3dadapter9-mesa libd3dadapter9-mesa:i386 vdpau-driver-all mesa-vdpau-drivers:i386 ffmpeg vlc qbittorrent gamemode
featherpad: lightweight Qt-based text editor.
partitionmanager: Qt version of GParted partition manager.
qdirstat: light and blazing fast disk analyzer (shows where your disk space has gone and help you to clean it up). I wonder why it wasn’t included in Lubuntu by default.
exfatprogs: contain all of the standard utilities for creating, fixing and debugging exfat filesystem on Linux. Also wondering why it’s not out of the box.
lm-sensors: (Linux monitoring sensors) provides tools and drivers for monitoring temperatures, voltage, and fans.
fancontrol: can be used to control the speed of CPU fan.
smartmontools: allows to read S.M.A.R.T. values from most modern ATA/SATA, SCSI/SAS and NVMe disks. In many cases this will provide advanced warning of disk degradation and failure.
mesa-utils: contains essential mesa utilities like glxgears.
vdpau-driver-all: Video Decode and Presentation API for Unix, provides hardware acceleration.
libd3dadapter9-mesa: Gallium3D state tracker that implements the Direct3D9 API. Combined with the gallium-nine branch of Wine or Steam Proton, programs using D3D9 can achieve native (or better) graphics performance.
ffmpeg: a complete cli solution to record, convert and stream audio and video.
vlc: multimedia player and framework that plays most multimedia files as well as DVDs, Audio CDs, VCDs, and various streaming protocols.
qbittorrent: fast and reliable Qt-based BitTorrent client.
gamemode: a daemon/lib combo that allows games to request a set of optimizations be temporarily applied to the host OS and/or a game process.
- Official Firefox .deb package for Debian-based distributions
- Official Steam .deb package for Ubuntu LTS
- Official Retroarch PPA
The only service that is somewhat worth disabling is CUPS (since you’ll probably never gonna use it on gaming machine)
sudo systemctl disable cups.service
sudo systemctl disable cups-browsed.service
sudo systemctl disable cups.socket
sudo systemctl disable cups.path
sudo systemctl disable cups-browsed.socket
What to expect⌗
let’s be realistic.
Expecting drastic FPS increase would be silly. The main benefits here are uninterrupted gameplay and lower latencies, as well as OS that works with your antique stuff and still actively supported. Sometimes you can get moderate boosts for certain titles, but there is obviously no way around hardware bottlenecks. Anyway, here is a very basic representation of what can be achieved:
Environment | Average performance increase vs Windows |
---|---|
Native | 5%-15% |
Translated with Steam Proton* | 5%-10% |
Emulation | 5%-10% |
Steam Proton is a way to go for Windows games. Not everything gonna work well, or even launch. But in a lot of cases if it runs, it runs on a par with Windows configuration or better.
Side-notes⌗
- Get an SSD.
- It’s preferable to use wired (since most old bluetooth chips are crap) gamepads that has drivers implemented directly in linux kernel (ex. 8BitDo Pro 2).
- Things that do software rendering and other CPU-intense stuff (ex. emulators), don’t take frequency spikes that well. If you have a very old Intel CPU consider disabling things like Speedstep (current implementation is fine, but back in the early days it was a mess).
- Try Lakka if you only looking for emulation and want an easy turn-key setup. It is optimized to run on Raspberry Pi and other SMBCs.
- Lutris can help with an installation of games that are not available on Steam.
- gamemode provides some additional optimizations on demand, this can be useful when we launching something local from Steam (ex. Retroarch).
gamemoderun %command%
- XanMod Kernel looks interesting, but overall performance increase vs potential stability, security and support issues making it a questionable choice.
- Useful resources
Steam⌗
- By default Proton utilizing DXVK which requires Vulkan support.
- If your GPU doesn’t support Vulkan you can switch to WineD3D by adding launch option
PROTON_USE_WINED3D=1
. - If your GPU has partial Vulkan support (< 1.3), you can try to downgrade to older Proton versions (<= 7), or try special fork called Proton-Sarek.
- You can also try Gallium Nine (DirectX 9 only). Proton launch options:
PROTON_USE_GALLIUM_NINE=1 PROTON_GALLIUM_NINE_MODULEPATH="/usr/lib/i386-linux-gnu/d3d/d3dadapter9.so.1:/usr/lib/x86_64-linux-gnu/d3d/d3dadapter9.so.1"
.
- If your GPU doesn’t support Vulkan you can switch to WineD3D by adding launch option
- Try to experiment with custom Proton builds like proton-ge-custom, you can manage them in ProtonUp-Qt.
- You can enable autologin + autostart Steam in Big Picture Mode for “console-ish experience”.
Retroarch⌗
- Use Vulkan or GLCore as display drivers if you can.
- Use preemptive frames with auto detection to battle input lag.
- In case you wanna play some retro games that was designed to be played on CRT TVs: try crt-lottes or crt-guest shaders which looks and runs great even on slowest potatoes (use fast or fastest presets).