linux-surface/README.md
2019-03-07 15:01:05 -05:00

145 lines
4.4 KiB
Markdown

# 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