These are my notes for getting Linux working on the Surface Laptop 7 (ARM).
Based on the Ubuntu Concept image
Disclaimer: I have no experience with upstreaming patches, the patch review process, Linux coding conventions, etc. at all, so for now I'm just documenting everything here in the hope that more knowledgeable people can help!
| Feature | Working? | Notes |
|---|---|---|
| NVMe | ✅ | |
| Graphics | ✅ | Requires firmware |
| Backlight | ✅ | |
| USB | ✅ | USB-A and USB-C ports are working. Have not tested USB over Surface Connector |
| USB-C display output | ✅ | #11 |
| Wi-Fi | ✅ | Requires firmware and either the ELLX prebuilt kernel or the manual rfkill patch below |
| Bluetooth | ✅ | Requires firmware #6 |
| Audio | ✅ | #2 |
| Touchscreen | ❌ | #13 |
| Touchpad | ✅ | Works with the ELLX iptsd package - custom calibration may be required, see below. |
| Keyboard | ✅ | |
| Lid switch/suspend | ✅ | #7 (comment) |
| Camera | ✅ | Requires device tree patches 0004 & 0005 - #4 — see config/OV02C10-camera for libcamera tuning |
| RTC | ✅ | #8 |
Warning
Without installing the firmware, many hardware components will be broken!
Tested working on the Ubuntu concept image for Ubuntu 26.04. The easiest setup right now is the community-maintained ELLX prebuilts for the Surface Laptop 7 X1 Elite at https://public.hgci.org/software/ELLX/. They are built for Ubuntu 26.04 and should also work on Debian.
These prebuilts currently cover:
- Wi-Fi
- Bluetooth
- Trackpad
- GPU
Important
Keep your Windows install if you can. If the trackpad gets into a bad state, the easiest known reset right now is to reboot into Windows and then back into Linux.
Steps:
- Allocate disk partition space for dual booting (highly recommended with bleeding-edge unsupported Linux).
- Install Ventoy to a USB and drag and drop the ISO afterwards. Ventoy is required to enable keyboard support in GRUB.
- Reboot, select the ISO with Ventoy, and install Ubuntu.
- Download the latest matching kernel packages from
https://public.hgci.org/software/ELLX/kernels/. At the time of writing these are:kernels/7.0.0-rc4-11/linux-headers-7.0.0-rc4+_7.0.0~rc4-gc0ce08f6e526-42_arm64.debkernels/7.0.0-rc4-11/linux-image-7.0.0-rc4+_7.0.0~rc4-gc0ce08f6e526-42_arm64.deb
- Install the kernel packages:
sudo apt install ./*.deb- Install the firmware from
surface-laptop-7-firmware/proprietary-firmware.tar.gz:
sudo tar -xf proprietary-firmware.tar.gz -C /- Install
iptsdfrom iptsd/alex-lentz_iptsd/iptsd_3.1.0-1_arm64.deb and reboot. - Calibrate the trackpad:
# Take note of your hidraw# - most commonly hidraw1
sudo ./etc/scripts/iptsd-foreach -t touchpad -- echo {}
# Calibrate using the hidraw# from the previous command
sudo iptsd-calibrate /dev/<YOUR_HIDRAW#>
# Track your finger _everywhere_ around the trackpad. Ctrl+C -> configuration should be saved.- Lastly, if you notice any problems recovering the trackpad or graphics after resuming from sleep, check out these useful fixes here
Sources:
- ELLX kernel source: https://github.com/ProgrammerIn-wonderland/ELLX-Kernel
- ELLX prebuilts / fixes: https://public.hgci.org/software/ELLX
iptsdsource: https://github.com/alex-lentz/iptsd
Note
Trackpad support is much better with this setup, but suspend can still leave it in a broken state.
If you want to build the kernel yourself instead of using the ELLX prebuilts, the older manual notes are below.
- Download and automatically repack board-2.bin by running fix-board-2-wifi.sh
chmod +x fix-board-2-wifi.sh
./fix-board-2-wifi.sh- Build kernel and install 0001-wifi-rfkill-hack.patch
# Install dependencies
sudo apt install git build-essential fakeroot devscripts equivs flex bison bc libssl-dev libelf-dev dwarves dpkg-dev debhelper rsync kmod cpio fakeroot
# Clone most recent concept kernel
git clone git.launchpad.net/~ubuntu-concept/ubuntu/+source/linux/+git/resolute -b qcom-x1e-7.0
patch -p1 < 0001-wifi-rfkill-hack.patch
# Build & install
fakeroot .debian/rules binary-qcom.x1e
sudo apt install ./*.deb
sudo rebootIf you experience any issues with Firefox, try switching from snap to the .deb or flatpak package.
- dwhinham for readme template and patches from Surface Pro 11: https://github.com/dwhinham/linux-surface-pro-11
- qzed from linux-surface: https://github.com/linux-surface/linux-surface
- everyone from the ubuntu-concept issue thread: https://bugs.launchpad.net/ubuntu-concept/+bug/2084951