# 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 Go * Surface Laptop * Surface Laptop 2 * Surface Pro 3 * Surface Pro 4 * Surface Pro 2017 * Surface Pro 6 * Surface Studio ### What's Working * Keyboard (and backlight) * Touchpad * 2D/3D Acceleration * Touchscreen * Pen * WiFi * Bluetooth * Speakers * Power Button * Volume Buttons * SD Card Reader * Cameras (partial support, disabled for now) * Hibernate * Sensors (accelerometer, gyroscope, ambient light sensor) * Battery Readings * Docking/Undocking Tablet and Keyboard * Surface Docks * DisplayPort * USB-C (including for HDMI Out) * Dedicated Nvidia GPU (Surface Book 2) ### What's NOT Working * Dedicated Nvidia GPU (if you have a performance base on a Surface Book 1, otherwise onboard works fine) * Cameras (not fully supported yet) * Connected Standby is not supported yet ### Disclaimer * For the most part, things are tested on a Surface Book. While most things are reportedly fully working on other devices, your mileage may vary. Please look at the issues list for possible exceptions. ### Download Pre-built Kernel and Headers Downloads for ubuntu based distros (other distros will need to compile from source using the included patches): https://github.com/jakeday/linux-surface/releases You will need to download the image, headers and libc-dev deb files for the version you want to install. ### Instructions 0. (Prep) Install Dependencies: ``` sudo apt install git curl wget sed ``` 1. Clone the linux-surface repo: ``` git clone --depth 1 https://github.com/jakeday/linux-surface.git ~/linux-surface ``` 2. Change directory to linux-surface repo: ``` cd ~/linux-surface ``` 3. Run setup script: ``` sudo sh setup.sh ``` 4. Reboot on installed kernel. The setup script will handle installing the latest kernel for you. You can also choose to download any version you want and install yourself: Install the headers, kernel and libc-dev (make sure you cd to your download location first): ``` sudo dpkg -i linux-headers-[VERSION].deb linux-image-[VERSION].deb linux-libc-dev-[VERSION].deb ``` ### Compiling the Kernel from Source #### For Debian-Based Systems If you don't want to use the pre-built kernel and headers, you can compile the kernel yourself following these steps: 0. (Prep) Install the required packages for compiling the kernel: ``` sudo apt install build-essential binutils-dev libncurses5-dev libssl-dev ccache bison flex libelf-dev ``` 1. Clone the mainline stable kernel repo: ``` git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git ~/linux-stable ``` 2. Go into the linux-stable directory: ``` cd ~/linux-stable ``` 3. Checkout the version of the kernel you wish to target (replacing with your target version): ``` git checkout v4.y.z ``` 4. Apply the kernel patches from the linux-surface repo (this one, and assuming you cloned it to ~/linux-surface): ``` for i in ~/linux-surface/patches/[VERSION]/*.patch; do patch -p1 < $i; done ``` 5. Use config for kernel series (may need to manually change for your distro): ``` cp ~/linux-surface/configs/[VERSION]/config .config ``` 6. Compile the kernel and headers (for ubuntu, refer to the build guide for your distro): ``` make -j `getconf _NPROCESSORS_ONLN` deb-pkg LOCALVERSION=-linux-surface ``` 7. Install the headers, kernel and libc-dev: ``` sudo dpkg -i linux-headers-[VERSION].deb linux-image-[VERSION].deb linux-libc-dev-[VERSION].deb ``` #### For Arch-Based Systems Have a look at [this](https://github.com/dmhacker/arch-linux-surface) repository. ### Signing the kernel for Secure Boot Please consult the [SIGNING.md](SIGNING.md). ### NOTES * 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. ### Support If you have an issue with the kernel, please feel free to create on issue here to track it. If you have questions or need support, please use our [Gitter Community](https://gitter.im/linux-surface)! ### Donations Appreciated! PayPal: https://www.paypal.me/jakeday42 Bitcoin: 1AH7ByeJBjMoAwsgi9oeNvVLmZHvGoQg68