浪人
DE | EN
Linux on the Surface Go — Touch, Pen & Tablet Mode
tech

Linux on the Surface Go — Touch, Pen & Tablet Mode

Back to Blog
2 min read

Linux on the Surface Go — Touch, Pen & Tablet Mode

With the linux-surface kernel, the hardware is already largely working — but for a device that’s supposed to be both laptop and tablet at the same time, that’s not quite enough. Touchpad behavior, auto-rotate, on-screen keyboard, and pen input need some attention. And one of these turned out to be surprisingly stubborn.

The Touchpad Problem

After rebooting into the surface kernel, the Type Cover’s touchpad suddenly stopped working. Only the touchscreen and pen functioned — even though the touchpad had worked perfectly in the live system during Phase 1.

Troubleshooting turned into a longer debugging session, eventually solved with AI assistance and systematic log analysis. The first step was installing libinput-tools and checking the device list:

sudo apt install libinput-tools
sudo libinput list-devices

The kernel recognized the touchpad without issue — that was the crucial piece of information. The problem was one level higher: libinput was classifying the device as a generic pointer gesture device instead of a touchpad. This meant GNOME’s input stack never treated it as a touchpad — no cursor, no gestures, nothing.

The first attempted solution was a udev rule to manually tag the device with ID_INPUT_TOUCHPAD. It worked initially but proved unstable: the Type Cover reconnects as a USB device after every boot, the event number shifts during that process, and the rule applied too late — libinput had already misclassified the device before the rule took effect.

The correct and stable solution is a libinput quirks file — the modern way to permanently override device classifications:

sudo nano /usr/share/libinput/50-surface-typecover.quirks

With the following content:

[Microsoft Surface Type Cover Touchpad]
MatchName=Microsoft Surface Type Cover Touchpad
MatchBus=usb
MatchVendor=0x045E
MatchProduct=0x096F
ModelTouchpad=1

Log out and log back in — the touchpad returned and has remained stable across all reboots and Type Cover reconnects since then.

Adjusting Touchpad Behavior

With a working touchpad, here are two settings that make it feel more natural under Linux:

# Corner zones for right/middle click instead of two/three-finger tap
gsettings set org.gnome.desktop.peripherals.touchpad click-method "areas"

# Enable tap-to-click
gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click true

Auto-Rotate

Since the Surface Go is used equally as a tablet and laptop, auto-rotate is essential. The iio-sensor-proxy package lets GNOME read the accelerometer and automatically rotate the display when the device is rotated:

sudo apt install iio-sensor-proxy
sudo reboot

In practice, this was already working after the surface kernel — the package was apparently already installed. Rotating the device rotates the display correctly between portrait and landscape.

On-Screen Keyboard

Without the Type Cover, you need a screen keyboard. Squeekboard — the touch-optimized recommendation — has no installation candidate on Ubuntu 24.04. The built-in GNOME keyboard works as a solid alternative:

Settings → Accessibility → Typing → On-Screen Keyboard → On

It appears automatically as soon as you tap a text field in tablet mode.

Surface Pen

The pen works without additional configuration. iptsd — already installed in Phase 2 — handles multitouch and pen input including pressure sensitivity natively under Wayland. For note-taking and drawing, everything you need is there. Tools like OpenTabletDriver are designed for standalone drawing tablets and aren’t necessary here.

Hardware Status After Phase 3

HardwareStatus
Type Cover Keyboard✅ Working
Type Cover Touchpad✅ Working (libinput quirks fix)
Touchscreen✅ Working
Display / Scaling✅ Working
Auto-Rotate✅ Working
WiFi✅ Working
Audio✅ Working
Surface Pen✅ Working
On-Screen Keyboard✅ Working (GNOME built-in)
IR Camera / Face Login🔲 Coming in Phase 4

The hardware is now fully operational — with one exception. And the next article is simultaneously the most honest one in the entire series.