Skip to content
Linux Kernel for Surface Devices
Branch: master
Clone or download
qzed Update patches
    - Rebase onto 5.5.4
    - Update IPTS module (filter singletouch input for gen7)

    - Rebase onto 5.4.20

    - Rebase onto 4.19.104
Latest commit ab2c76b Feb 17, 2020
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Add an issue template. Dec 30, 2019
firmware/intel/ipts Update links due to repo move Dec 28, 2019
keys Add GPG key Sep 28, 2019
patches Update patches Feb 17, 2020
root sleep-script: IPTS: fix paths change Jan 18, 2020 README: add Surface 3 to the Supported Devices list Feb 8, 2020 Stop automatically installing packages. Jan 8, 2020

Linux Surface

Linux running on the Microsoft Surface devices. Follow the instructions below to install the latest kernel and config files.

Supported Devices

  • Surface Book
  • Surface Book 2
  • Surface 3
  • Surface Go
  • Surface Laptop
  • Surface Laptop 2
  • Surface Laptop 3
  • Surface Pro 3
  • Surface Pro 4
  • Surface Pro 2017
  • Surface Pro 6
  • Surface Pro 7
  • Surface Studio

Features / What's Working

See the feature matrix for more information about each device.


  • For the most part, things are tested on a Surface Book 2. While most things are reportedly fully working on other devices, your mileage may vary. Please look at the issues list for possible exceptions.

Installation and Setup

For a more detailed installation and setup guide, please refer to the corresponding Wiki page. There, you may also find device-specific caveats. A short overview of the process is provided below.

Releases are provided for both Debian and Arch Linux based distributions, but if you're running Arch, you may want to consider looking at this project instead, or here if you're running Fedora. These releases can be found here:

You may also want to consider setting up one of the package repositories to obtain automatic updates. After the installation, you should have a look at the post-installation notes, specifically you may want to set up secure-boot and install the proprietary firmware package (usually named linux-firmware) if you have not done so already.

  1. Before you can actually start, you will need to install some required packages. On Debian based distributions, you can do this by simply running

    sudo apt install git
  2. Clone this repository. To save some time, you can use the --depth 1 flag.

    git clone --depth 1

    If you want to update this git repository later on, e.g. for re-running the script, you can simply run git pull inside the repository.

  3. Next, change into the linux-surface directory (cd linux-surface) and run the setup script via

    sudo ./

    Follow the instructions and make your choices.

  4. Download and install the required packages. You can use one of the package repositories to install the kernel and libwacom package.

    Alternatively, you can also install them manually via (for Debian) after downloading these files from the releases section of this repo.

    sudo dpkg -i linux-headers-[VERSION].deb linux-image-[VERSION].deb linux-libc-dev-[VERSION].deb
  5. Finally, you will need to re-boot your system and boot into the linux-surface kernel. Please make sure that you actually boot in the right kernel via uname -a before opening any issues. This should give you a version string containing surface. If not, you may need to configure your bootloader. For this, please refer to the instructions provided by your bootloader and/or distribution.

If you want to compile the kernel yourself (e.g. if your distribution is not supported), please have a look at the wiki.

Additional Information


  • If you are getting stuck at boot when loading the ramdisk, you need to install the Processor Microcode Firmware for Intel CPUs (usually found under Additional Drivers in Software and Updates).
  • Do not install TLP! It can cause slowdowns, laggy performance, and occasional hangs! You have been warned.
  • If you want to use hibernate instead of suspend, you need to create a swap partition or file, please follow your distribution's instructions (or here).


If you have questions or need support, please use our Gitter Community! For development related questions and discussions, please consider joining our IRC channel on freenode (freenode/##linux-surface) or the equivalent Matrix bridge.

You can’t perform that action at this time.