Linux on the Surface Go — Windows Hello & Howdy
Linux on the Surface Go — Windows Hello & Howdy
This is the most honest article in this series. Not because the others are dishonest — but because this one is about an attempt that didn’t work. And it’s worth documenting that just as openly as the successes.
The Goal
The Surface Go Gen1 has an IR camera that’s responsible for Windows Hello facial recognition on Windows. The Linux equivalent is Howdy — an open-source PAM module that retrofits facial recognition for login, sudo, and lock screen. Windows Hello is one of the features I really liked in Windows, so this was a clear goal for the migration.
The Problem
Installing Howdy itself is straightforward. The real problem emerges as soon as you try to set up the camera — and that’s where things get complicated.
The Surface Go operates its cameras entirely through Intel’s IPU3 pipeline. Instead of providing a simple /dev/videoX device that applications can read directly, all 14 video devices on the system are either ipu3-cio2 (raw sensor input) or ipu3-imgu (image processor) nodes. These require libcamera — a more complex userspace camera stack that handles pipeline configuration.
Howdy expects a simple V4L2 camera device that it can open and read from. Howdy doesn’t have libcamera support. The two are fundamentally incompatible — without a custom libcamera-to-V4L2 bridge in between, which would be a significant effort with no stable available solution.
After extensive research and several attempts, it became clear: This isn’t a configuration problem that can be solved with a quirks file or a udev rule. It’s a structural incompatibility between what Howdy expects and what the IPU3 hardware provides.
Not a Dealbreaker
That’s unfortunate — face unlock is a feature I really grew to appreciate in Windows. But it’s not an obstacle to taking Linux seriously as a daily driver. Password login works, and the rest of the system runs so well that this one missing feature doesn’t taint the overall picture.
For anyone trying the same thing: This is a known limitation of the IPU3 camera stack under Linux, not specific to this device or this setup. It’s not worth investing a lot of time there.
Hardware Status after Phase 4
| Hardware | Status |
|---|---|
| Type Cover Keyboard | ✅ Works |
| Type Cover Touchpad | ✅ Works |
| Touchscreen | ✅ Works |
| Display / Scaling | ✅ Works |
| Auto-Rotate | ✅ Works |
| WiFi | ✅ Works |
| Audio | ✅ Works |
| Surface Pen | ✅ Works |
| On-Screen Keyboard | ✅ Works |
| IR Camera / Face Login | ❌ Not possible (IPU3 pipeline) |
The hardware story is now complete. The next article will cover what actually makes the device usable in everyday life — the apps.