Surface Linux Hardware Support#
Microsoft Surface devices require specialized kernel patches and drivers to function properly on Linux systems. Bluefin has declared Microsoft Surface hardware support out of scope, maintaining a stock kernel without Surface-specific modifications. The HWE (Hardware Enablement) image that previously provided Surface support has been discontinued, and users requiring Surface hardware support are directed to use Bazzite instead, which includes the necessary kernel modifications.
Surface hardware support presents unique challenges in the Linux ecosystem because the upstream Linux kernel doesn't carry the patches for Surface hardware, and there's no plan for Surface patches to go upstream. This requires ongoing third-party maintenance through projects like linux-surface. The Bluefin team built Surface images since Fedora 37, but they remained mostly unmaintained due to no team members having these devices.
Hardware Support Status#
Discontinued Support in Bluefin#
After the HWE image ceased, users moving to standard Bluefin DX experienced loss of touch display and pen input on Surface Laptop Studio and Surface Go devices. The project maintains a stock kernel and will not include Surface-specific modifications.
Surface hardware variants were deprecated and removed from Bluefin on October 21, 2025 (PR #3428), which removed the HWE images along with Surface-specific variants (surface, surface-nvidia, surface-nvidia-open). Additional cleanup added Surface image names to the registry cleanup workflow on September 12, 2025.
Migration to Bazzite#
Switching to the Bazzite version re-enables touch and pen functionality (pen only by adding the iptsd daemon as ostree override). Bazzite Surface testing images are available at ghcr.io/ublue-os/bazzite-gnome-surface:testing.
Kernel Requirements#
Linux-Surface Project#
The linux-surface project maintains all necessary patches for Surface hardware support. The linux-surface kernel contains all patches for Surface hardware. The project provides a Fedora repository at https://pkg.surfacelinux.com/fedora/linux-surface.repo.
Kernel Module Dependencies#
Critical kernel modules for Surface devices:
| Module | Function | Notes |
|---|---|---|
surface_aggregator | Main Surface hardware aggregator | Core module for device communication |
surface_serial_hub | Serial hub driver | Prone to IRQ setup failures in kernel 6.12.4 |
pinctrl_tigerlake | Intel Tiger Lake pin control | Must load before surface_aggregator |
Kernel 6.12.4 Module Loading Issue#
Resolution: Modify the module loading order by moving 'pinctrl_tigerlake' to the top of the file '/etc/modules-load.d/ublue-surface.conf'. This ensures pinctrl_tigerlake loads before surface_aggregator. Users verified this fix by removing all surface modules, reloading the pinctrl_tigerlake module, and reloading the surface modules.
Touch and Pen Input Configuration#
iptsd Daemon#
Touch and pen input on Surface devices can be restored using the iptsd daemon as an ostree override when switching to Bazzite. The iptsd package provides Intel Precise Touch & Stylus daemon for touchscreen and pen support. Bazzite testing images now layer in libwacom, iptsd, and other necessary packages for Surface device support.
Required Packages#
| Package | Purpose |
|---|---|
kernel-surface | Linux Surface kernel with hardware patches |
iptsd | Touchscreen and stylus daemon |
libwacom-surface | Surface-specific wacom tablet configuration |
Generic Tablet Support#
For non-Surface specific tablet support, Bluefin provides a ujust command for OpenTabletDriver (ujust install-opentabletdriver). This provides generic tablet/stylus support but is not Surface-specific.
Wacom Driver Conflicts#
When using OpenTabletDriver, the pre-installed Wacom driver can interfere, causing pen strokes to jitter. To permanently disable the Wacom driver:
sudo rpm-ostree kargs --append-if-missing=module_blacklist=wacom
This follows the same method Bluefin uses for other hardware tweaks.
Creating Custom Surface Images#
Modern Kernel Swapping with DNF#
Modern kernel swapping uses dnf instead of the deprecated rpm-ostree replace method. The Universal Blue image-template repository provides a foundation for creating custom images with kernel swaps.
Example Containerfile#
A working example Containerfile for Surface kernel integration:
FROM quay.io/fedora-ostree-desktops/silverblue:41
RUN dnf5 config-manager addrepo --from-repofile=https://pkg.surfacelinux.com/fedora/linux-surface.repo
RUN dnf5 -y remove kernel* && \
rm -r /root # not necessary on ublue-os/main derived images
RUN dnf5 -y install --allowerasing kernel-surface iptsd libwacom-surface
Important: DNF5 currently does not officially support kernel installations and updates on image-based/ostree systems, though it works at build time in practice, even if unsupported.
Alternative Kernel Removal#
For removing kernel packages without affecting other components:
RUN for pkg in kernel kernel-core kernel-modules kernel-modules-core ; do rpm --erase $pkg --nodeps ; done
Usage and Recommendations#
For Current Bluefin Users with Surface Devices#
- Migrate to Bazzite: Use Bazzite which provides kernel modifications for Surface support
- Use Latest Install Media: The latest install media also works if used with Ventoy in GRUB 2 mode
For Users on Legacy HWE Images#
For Advanced Users#
Community members can create custom images using the image-template with the Surface Linux kernel. See the Universal Blue image template for details.
Device-Specific Drivers#
| Component | Requirements | Notes |
|---|---|---|
| Camera | Additional camera drivers | Beyond base kernel support |
| Keyboard/Touchpad | surface_serial_hub module | Requires proper module loading order |
| Touchscreen | iptsd daemon | For touch input support |
| Stylus/Pen | iptsd + libwacom-surface | For full functionality |
Relevant Code Files#
| File Path | Repository | Description |
|---|---|---|
/etc/modules-load.d/ublue-surface.conf | N/A (system file) | Module loading configuration (no longer in Bluefin codebase) |
| CHANGELOG.md | ublue-os/akmods | Historical reference to Surface akmod support |
| apps.just | projectbluefin/common | Generic OpenTabletDriver support |
Related Topics#
- Framework Laptop Support - First-class hardware support in Bluefin demonstrating vendor-specific enablement patterns
- xone Driver - Xbox controller driver, another hardware-specific enablement example
- WiFi Driver Compatibility - Similar third-party driver integration challenges
- Bazzite - Gaming-focused image with comprehensive hardware support including Surface devices
- Custom Image Creation - Using Universal Blue image-template for specialized hardware support
- Kernel Module Management - Akmods caching layer for pre-built kernel modules