This is for a later model Surface, not the early release that requires jailbreaking.
The 'nonfree' drivers will be necessary for functionality like wifi, so it would be wise to use the "unofficial" iso: https://cdimage.debian.org/images/unofficial/non-free/images-including-firmware/
Free up some space by using Windows' built-in partition tool.
In Windows:
After reboot:
Assuming your Surface has 1 USB port, if you're also running this install off of a USB, you're going to have to install a lot of dependencies post-install. If you have a dual-USB adapter (so you can run 2 USBs at once), you can skip a lot of post-install steps.
If you've installed via USB + kept the ethernet adapter plugged in, your setup should work as-expected, out of the box (except for wifi)
The new install should have installed Grub and will boot straight into Debian.
Check for network interfaces:
ip a
If you only see:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
lo is the loopback/localhost interface. If its the sole interface, grab a Microsoft ethernet adapter and stick it in the USB port (the Mac USB adapters did not work). Re-running the command should then show the presence of eth0 (but renamed, to something like: enxf01dbcf51610) – general rule of thumb: ‘e' = ethernet, 'w’ = wifi
If you see the wifi interface, skip all of the below!
Now that the ethernet is present:
- Configure the ethernet networking
bash pico /etc/network/interfaces
Add the following:
auto enxf01dbcf51610 allow-hotplug enxf01dbcf51610 iface enxf01dbcf51610 inet static address 172.16.1.21 netmask 255.255.255.0 gateway 172.16.5.1
If you want to have dhcp rather than static, on line 3 change static to dhcp and omit lines 4-6.
Test it:
ping 1.1.1.1
user@debian# ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=9.47 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=56 time=9.89 ms
.. network connectivity is active; but no DNS (try pinging a ‘friendly’ name)
Add DNS capability:
pico /etc/resolv.conf
Append the following:
nameserver [your dns ip here] nameserver [your failover dns ip here] search [your dns domain]
Test it:
ping [your dns domain]
PING your dns domain 56(84) bytes of data.
Total network capabilities are now active (except wifi). ... if you had a dual adapter, you could have installed them during setup!
To fix that, we needed the network connectivity so we can use apt. But first, we need to figure out what drivers were needed:
- Check the kernel logs
su -
and switch to root user (assuming the sudo package isn’t installed, of course. Either/or will work)dmesg | grep wifi
You'll see logs referencing missing firmware, the important component is the piece referencing the firmware binary the kernel is looking for: mrvl/xxx_uapsta.bin (Changed as I don't know if all models use the same firmware, so do your own legwork on this part)
With that info, plop it into a search engine: xxx uapsta debian and you'll encounter this page: https://packages.debian.org/buster/firmware-libertas - CNTRL +F the page for the above filename and when found, you’ll know this is the missing package you need.
Adding the Proper APT Repo
For whatever reason, the initial install only had the security repos in /etc/apt/sources.list which would prevent us from ever downloading the drivers (the nonfree repos aren't there).
Simple fix:
pico /etc/apt/sources.list
Append the following:
deb http://ftp.us.debian.org/debian/ buster main non-free contrib deb-src http://ftp.us.debian.org/debian/ buster main non-free contrib
Check your Debian version! If you are not running buster (10.x), then you need to adjust the codename from buster to whatever OS version you have (stretch is 9.x, for example).
Do not ever mix OS repos unless you want a broken system!
Don't add Ubuntu repos, either. Ubuntu and Debian are not the same, despite Ubuntu being based on Debian.
After the apt list is saved, update the apt cache:
apt update
You’ll see the repo’s now being pulled in.
- Install the missing wifi firmware
The firmware-libertas package located earlier is now ready to be installed via apt:
apt install firmware-libertas
The firmware is loaded at boot time, so do a simple
reboot
of the OS.When it loads back up:
ip a
3: wlp3s0: mtu 1500 qdisc mq state UP group default qlen 1000
Wifi interface is now active!