Linux on the Surface Go — Installation & First Impressions
Linux on the Surface Go — Installation & First Impressions
Before anything can be installed, you need a bootable USB stick. The classic approach is the one described in the official Ubuntu installation guide — download the ISO, flash it to the stick using a tool like Rufus or balenaEtcher, done.
I decided to go with Ventoy instead. Ventoy prepares the stick once, and after that you can copy as many ISO files as you want via drag & drop — no re-flashing needed. Since I planned to test multiple live systems, this was the more practical choice. A separate article on this will follow, but in short: Ventoy was already prepared, I simply copied the Ubuntu 24.04 LTS ISO onto it, done.
Why Ubuntu — and why not CachyOS
My first attempt actually wasn’t Ubuntu. A colleague from the makerspace had introduced CachyOS — an Arch-based distribution with a strong focus on performance optimizations. Through Docker containers, I already had some experience with Arch, and the idea of squeezing every possible bit of performance out of the little Pentium Gold 4415Y was tempting.
The problem: CachyOS and the linux-surface kernel — which is essential for reasonable Surface hardware support — couldn’t work together. After some tinkering, it became clear: this wasn’t a viable foundation for this project.
So back to the original question. My criteria were:
- Debian-based, because I’m familiar with it from Raspberry Pi and servers
- A major distribution for community support and available packages
- Wayland instead of X11 — a modern display server with better touch integration
- linux-surface support as a hard requirement
Ubuntu 24.04 LTS meets all of these. The linux-surface project uses Ubuntu as its primary target distribution and provides ready-made packages for it. Plus, I was already familiar with Ubuntu to some degree. The decision was made quickly.
Setting up UEFI — Secure Boot and Boot Order
Before you can boot from the USB stick, two things need to be done in the UEFI. You access the UEFI on the Surface Go by holding down Volume Up and then pressing Power.
Disable Secure Boot: While it’s possible in principle to run Linux with Secure Boot enabled, in combination with the linux-surface kernel and Ventoy it’s unnecessary complexity. It’s simpler to completely disable Secure Boot in the UEFI. The setting is found under Security → Secure Boot.
Adjust Boot Order: By default, the Surface Go boots from the internal SSD. Since I plan to experiment frequently with different live systems in the future, I’ve permanently set USB as the first boot option. The setting is found under Boot Configuration. If no USB stick is plugged in, the system automatically falls back to the internal SSD — that’s not a problem.
After making the changes, go to Exit → Restart and continue.
Booting from the USB Stick
With the changed boot order, the Ventoy stick starts automatically as soon as it’s plugged in. Alternatively, you can access the boot menu at any time by holding Volume Down and then pressing Power — the stick will also appear there as an option.
The Live System — a First Impression
Before the actual installation, I poked around in the live system a bit to see what works and what doesn’t.
The first impression was: somewhat sluggish. The live system runs entirely from the USB stick and has no swap — you notice that. So as a preview of the installed system, it’s only partially useful.
When checking the hardware, there was a pleasant surprise: The Type Cover worked immediately — both keyboard and touchpad without any configuration needed. That was far from guaranteed; Surface hardware is considered difficult under Linux.
Less impressive was the touchscreen. It technically worked, but the feel was strange — sluggish, imprecise, not what you’d expect from a modern touch display. The Surface Pen also didn’t respond as expected. Both are known issues and solvable, but that will be covered in a later article.
The display size on the 10-inch screen without scaling was expectedly tiny. That’s solvable too.
Installation
Nothing spectacular — the standard Ubuntu installer. The relevant decisions:
- Normal installation with third-party software and updates during installation
- Erase disk and install Ubuntu — no dual boot, the device belongs to Linux
After completion and reboot, first thing: a full system update:
sudo apt update && sudo apt upgrade -y
sudo reboot
Setting Up Fractional Scaling
The 1800×1200 display on 10 inches is sharp, but without scaling everything is unreadably tiny. GNOME supports fractional scaling but hides the option behind an experimental flag:
gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"
After that, under Settings → Displays → Scale you’ll see options beyond 100% and 200%. 150% or 175% hits the sweet spot for this screen.
Hardware Status After Phase 1
| Hardware | Status |
|---|---|
| Type Cover Keyboard | ✅ Works |
| Type Cover Touchpad | ✅ Works |
| Touchscreen | ✅ Works (feel not yet optimal) |
| Display / Scaling | ✅ Works |
| WiFi | ✅ Works |
| Surface Pen | 🔲 Not yet ready for use |
| IR Camera / Face Login | 🔲 Needs linux-surface kernel |
| Audio | 🔲 Needs linux-surface kernel |
The foundation is in place — but the truly important part comes next: the linux-surface kernel.