Linux on the Microsoft Surface Go

2019/06/01 linux surface go config

Believe it or not, Surface tablets have pretty good linux support, except for the webcams in newer models. These are some useful notes to get Ubuntu installed in your surface go, as of Summer 2019.

Installing the kernel

1
2
git clone --depth 1 https://github.com/jakeday/linux-surface.git ~/linux-surface
cp -a ~/linux-surface /media/<your usb>
1
2
3
cp -a /media/<your usb>/linux-surface ~/
cd ~/linux-surface/
sudo sh setup.sh

Booting ubuntu first

Switch out of Windows S mode.

Boot into the “Command Prompt”.

From Windows go to “change advanced startup options” and select “restart now”.

When it reboots, choose the “Troubleshoot” option, then choose the “Advanced options” option, and finally choose the “Command Prompt” option.

After the device reboots, login to the command prompt and then you should see a terminal with X:\windows\system32>

At the prompt, check your UEFI entries:

1
bcdedit /enum firmware

Copy UEFI entry of “Windows Boot Manager” to create a new entry for Ubuntu: bcdedit /copy {bootmgr} /d “Ubuntu”

Copy the printed GUID number including the braces {} using Ctrl+C

Set file path for the new Ubuntu entry. Replace {guid} with the returned GUID of the previous command (Ctrl+V). bcdedit /set {guid} path \EFI\ubuntu\grubx64.efi

Set Ubuntu as the first/ entry in the boot sequence. Again replace {guid} with the returned GUID of the copy command.

1
bcdedit /set {fwbootmgr} displayorder {guid} /addfirst

Check your UEFI entries again: bcdedit /enum firmware You should see something like this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10

Firmware Boot Manager
---------------------
identifier              {fwbootmgr}
displayorder            {3510232e-f8eb-e811-95ce-9ecab3f9d1c4}
                        {bootmgr}
                        {2148799b-f8eb-e811-95ce-9ecab3f9d1c4}
                        {312e8a67-c2f6-e811-95ce-3c1ab3f9d1de}
                        {312e8a68-c2f6-e811-95ce-3c1ab3f9d1de}
timeout                 0

Make sure the GUID you copied is the first one listed in displayorder. Then type exit, turn off the PC and turn it back on. After this my surface go is automatically booting to the grub bootloader which lets me choose between Windows and Ubuntu but defaults to Ubuntu after ten seconds.