Microsoft Surface Go + Ubuntu 18

Feb 09, 2019

Recently got myself the very portable Microsoft Go 8GB / 128GB. I went through the trouble of dual booting it and wanted to share how I got it working.

Get the Device Ready

First go buy a Microsoft Surface Go (8GB Ram / 128 GB SSD)

Then while it's completely shutdown, hold the "volume+" button and push the power button to turn it on. This will get you into the Bios where you'll want to:

Use windows to shrink your partition and make room for Ubuntu. I shrunk it by 60GB.

Install Ubuntu

Of course go download Ubuntu and burn it to the thumb drive.

The Surface Go only has a USB-C port, so you may need to buy an adapter if you don't already have a thumb usb-c drive. I had to flip this thing around until it booted from the thumb drive. It didn't work both ways. Experiment and figure it out.

Then go through the usual install process. I had to pick the "manual" option for selecting a partition, create a swap partition of 8GB and the rest as a root partition. Then the install proceeded normally.


If you reboot you'll notice it doesn't bring up the grub menu and you end up in Windows again. Run a windows command prompt as Administrator and issue this command to get grub working

bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi

You will also need to disable bitlocker or it will grief you for a long security key every time you boot. Now reboot and notice you can pick Ubuntu or Windows from the usual Grub menu.


The Surface Go has the usual Qualcomm Atheros QCA6174 rev 32 issues I've seen in the past. It will seem to recognize the wifi, but wont find any networks.

First you'll need to download this board.bin file and put it on a USB you can access under your currently offline Surface Go Ubuntu device.

Remove board*.bin from any folder in /lib/firmware/ath10k/QCA6174

Copy the board.bin file you downloaded into this folder and any of it's child folders /lib/firmware/ath10k/QCA6174/

create a file /etc/modprobe.d/ath10k.conf with the following contents

options ath10k_core skip_otp=y

reboot and you've got wifi.