--- creation date: 2022-09-02 tags: [surface,linux,sp8,microsoft] --- # Surface A guide for the [Surface Pro 8](https://github.com/linux-surface/linux-surface/wiki/Surface-Pro-8). Based on https://github.com/linux-surface/linux-surface/wiki. This guide is for [ArchLinux](https://archlinux.org/) and improves the instructions to be more structured and suited for the SP8. ## Prerequisites * USB adapter cable for USB A to USB C * USB Drive, see [[KB/Linux/Desktop/Archinstall]] for getting an ISO onto USB * External keyboard, because Type Cover will not work without custom kernel ## Prepare * If Windows is still on disk, boot into it and update everything, so Surface firmware gets updated * Head into BIOS to _change boot order_ and disable _Secure Boot_ * Shut down device * Press and hold _Volume up_ and in parallel hit power button once until boot logo appears * Keep _Volume up_ pressed * Disable Secure Boot entirely * Change boot order by drag'n'drop USB Drive to first position, maybe uncheck all other options ## Install Boot from USB drive and edit ISO live boot options to copy USB drive contents to RAM, because you need to plug in an external keyboard for installation * Press _e_ during selection of Arch ISO * Add `copytoram=y` as option * Exit with CTRL+x Proceed with install like you would usually do. [[KB/Linux/Desktop/Archinstall]] is an easy way with little configuration to get an install up and running. This installation uses `systemd-boot` as bootloader. Your experience of the tutorial may vary if you pick another one. In generel, you should pick wayland. It has much better touch, gesture and pen support. ## Post install After you've successfully booted into your installation, some additional steps need to be performed to get your Type Cover and touchpad etc. working. Disclaimer: Don't mix the `iptsd` of the official repository with the `iptsd` mentioned here, they're different and may soon get merged. ### pacman repository Let's add the the official _pacman_ repository of _linux-surface_ ```shell curl -s https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/keys/surface.asc sudo pacman-key --add - sudo pacman-key --finger 56C464BAAC421453 sudo pacman-key --lsign-key 56C464BAAC421453 ``` Edit `/etc/pacman.conf`: ```shell [linux-surface] Server = https://pkg.surfacelinux.com/arch/ ``` Refresh by invoking `sudo pacman -Syu` ### Install required packages Install the following packages, some of them are also in the [AUR](https://aur.archlinux.org/). ```shell # the actual kernel and their headers linux-surface linux-surface-headers # SP 8 is an Intel device intel-ucode # needed for later compiling modules dkms meson ``` ### Make touchpad work and allow Type Cover during early boot (luks) Touchpad will _not_ work out of the box. The SP8 needs a different touchpad module and the _proper_ `iptsd`, not the one from the official linux-surface repository. Ensure that `dkms` and `meson` are installed. 1. Clone `git clone https://github.com/quo/ithc-linux` 1. `cd ithc-linux` 2. Execute `sudo make dkms-install` 2. Clone `git clone https://github.com/quo/iptsd` 1. `cd iptsd` 2. Execute the following commands in order ```shell meson build --wrap-mode=forcefallback --buildtype=debugoptimized -Dmarch=native ninja -C build sudo build/src/daemon/iptsd sudo ninja -C build install sudo systemctl daemon-reload sudo systemctl enable iptsd.service ``` * For _ ithc_ to load properly, you need to edit kernel parameters in your `entries/....conf` file and add `intremap=nosid`. Add a `.conf` for the SP8 if not already present. * You also need to edit the `MODULES` in your `/etc/mkinitcpio.conf` so that type cover will also work during early [encryption](https://github.com/linux-surface/linux-surface/wiki/Disk-Encryption) dialog ```shell MODULES=(btrfs i915 surface_aggregator surface_aggregator_registry surface_aggregator_hub surface_hid_core 8250_dw surface_hid surface_kbd intel_lpss intel_lpss_pci pinctrl_tigerlake) ``` * Regenerate initramfs with `mkinitcpio -P` * Reboot, you should no longer need your external keyboard ### pen Install `libwacom-surface` from the [AUR](https://aur.archlinux.org/). ### screen rotation Install `iio-sensor-proxy`. ### 120hz display Follow instructions [here](https://github.com/linux-surface/linux-surface/wiki/Surface-Pro-8#enable-120hz-and-solve-screen-flickering) to extract the EDID. Ensure you're in X.org. Afterwards, your `entries/....conf` systemd-boot entry could look like ```shell title Arch Linux (linux-surface) linux /vmlinuz-linux-surface initrd /intel-ucode.img initrd /initramfs-linux-surface.img options ... intremap=nosid drm_kms_helper.edid_firmware=eDP-1:edid/edid.bin ``` In addition, your `/etc/mkinitcpio.conf` needs `FILES=(/usr/lib/firmware/edid/edid.bin)` and ensure you re-generate initramfs with `mkinitcpio -P`. ### Fix Type Cover suspend If suspended via Type Cover, Touch might not work. Prevent this by editing `/etc/libinput/local-overrides.quirks` and add the following contents ```shell [Microsoft Surface Cover] MatchName=*Microsoft Surface *Cover* MatchDMIModalias=dmi:*svnMicrosoftCorporation:* AttrKeyboardIntegration=internal ModelTabletModeNoSuspend=1 ``` Reboot. ## Recommended software [[KB/Linux/GNOME]] has wonderful support for touch devices. You should probably use it. Useful GNOME extensions * improved gestures `gestureImprovements@gestures` (https://extensions.gnome.org/extension/4245/gesture-improvements/) * improved on screen keyboard `improved-osk` (https://extensions.gnome.org/extension/4413/improved-osk/) List of extensions personally used: ```json [ "appindicatorsupport@rgcjonas.gmail.com", "dash-to-dock@micxgx.gmail.com", "gestureImprovements@gestures", "improvedosk@nick-shmyrev.dev", "launch-new-instance@gnome-shell-extensions.gcampax.github.com", "workspace-indicator@gnome-shell-extensions.gcampax.github.com" ] ``` `xournal` is a wonderful program for you pen.