Documents
Surface Linux Hardware Support
Surface Linux Hardware Support
Type
Topic
Status
Published
Created
Mar 1, 2026
Updated
Mar 1, 2026
Created by
Dosu Bot
Updated by
Dosu Bot
Template

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:

ModuleFunctionNotes
surface_aggregatorMain Surface hardware aggregatorCore module for device communication
surface_serial_hubSerial hub driverProne to IRQ setup failures in kernel 6.12.4
pinctrl_tigerlakeIntel Tiger Lake pin controlMust load before surface_aggregator

Kernel 6.12.4 Module Loading Issue#

Surface device keyboards and touchpads stopped working after kernel 6.12.4, with errors related to the surface_serial_hub module showing 'error -EINVAL: failed to setup IRQ' and 'probe with driver surface_serial_hub failed with error -22'. Affected models:

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#

PackagePurpose
kernel-surfaceLinux Surface kernel with hardware patches
iptsdTouchscreen and stylus daemon
libwacom-surfaceSurface-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#

  1. Migrate to Bazzite: Use Bazzite which provides kernel modifications for Surface support
  2. Use Latest Install Media: The latest install media also works if used with Ventoy in GRUB 2 mode

For Users on Legacy HWE Images#

If remaining on existing HWE images, ensure pinctrl_tigerlake loads before surface_aggregator by modifying /etc/modules-load.d/ublue-surface.conf.

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#

ComponentRequirementsNotes
CameraAdditional camera driversBeyond base kernel support
Keyboard/Touchpadsurface_serial_hub moduleRequires proper module loading order
Touchscreeniptsd daemonFor touch input support
Stylus/Peniptsd + libwacom-surfaceFor full functionality

Relevant Code Files#

File PathRepositoryDescription
/etc/modules-load.d/ublue-surface.confN/A (system file)Module loading configuration (no longer in Bluefin codebase)
CHANGELOG.mdublue-os/akmodsHistorical reference to Surface akmod support
apps.justprojectbluefin/commonGeneric OpenTabletDriver support
  • 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

See Also#