XPS13 wifi for linux

⇠ Back to Blog:Tech

Dell became a big pile of shit regarding linux. It used to be a company that had great support for this operating system. In fact, you still find them at the top of several lists, in particular for the XPS model, which is the one I use profusely. That is precisely why, years ago, I went from HP to this company instead. But as time passes by, they offer more and more negligent, and now even broken down service for Linux as well as idiotic support (lecturing you on how appropriate drivers are not guaranteed to work on Linux, etc.) I'm speaking here of the wifi problem you get on some XPS models due to their horrid choice of the, aptly named, killer wifi controller.

These are the possible options:

  1. return the computer for another model: Dell doesn't let you do this because they say that it's a personalised-built, tailored on purpose (the thing is that it has 32GiB of memory instead of the standard 16, which is what they call a personalised model!)
  2. change the wifi card for the usual, working and, seemingly in all respects, superior intel model. If you do this yourself, some people reported that the chip was soldered and thus not easy if at all possible to replace.
    Screenshot 20210409 215352.png
    Dell's technical support will also refuse to do that themselves, because the machine is working (with Windows) so it's not a problem. Even if you want them to do it as a surplus, retributed, operation, although the first excuse above is that the machine was custom-built (it wasn't), they will now say that they don't put something else than what they normally do. As I said: Dell is shit.
  3. use a forefront kernel version that supports the "killer" piece of crap. I tried to find a distribution that comes with advanced-enough (developer) versions. Arch, for instance, supposedly does that, but it didn't work for me. I tried various other distributions including knoppix (used to do wonders), debian, etc., all to no avail. I tried that a couple of weeks ago. I've just read that Ubuntu 21.04 beta may work.
  4. use a wifi dongle. That's the method I could make work and will document below. I went for the AC1200 model from Aigital:
Screenshot 20210409 163030.png

Then to have this little fellow working! The main problem when your access to the internet doesn't work, is that your solutions are precisely to be grabbed from the internet. So good luck for those wanting to compile a full kernel! The vast majority of guidelines I could find started with apt update and apt get...

In our case, we need the driver for the dongle, which is to be found from:

git clone https://github.com/RinCat/RTL88x2BU-Linux-Driver

as I figured out from lsmod and googling what matched by new USB device.

The git-cloning I did from another (internet-enabled) computer (Wulfrun2, one of my XPS linux-computers). I passed it (Bluetooth and/or USB sticks are options) to the other computer, hostnamed covid by the way. But, one needs make, which, interestingly, is not installed by default. It was on the ISO image I downloaded to install Linux, though, but this didn't make it to the permanent install.

I therefore got the relevant packages to set up the module independently, from the live disk itself, I went:

apt-get -y install --print-uris dkms

since I initially wanted to have the module set up in the kernel dynamically. It appears this may have been unnecessary though, but this generated in any case the list of dependencies of other packages I need, including make (and gcc, etc.) This is, incidentally, the list:

Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu build-essential dpkg-dev
  fakeroot g++ g++-10 gcc gcc-10 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan6 libatomic1
  libbinutils libc-dev-bin libc6-dev libcrypt-dev libctf-nobfd0 libctf0
  libfakeroot libgcc-10-dev libitm1 liblsan0 libnsl-dev libstdc++-10-dev
  libtirpc-dev libtsan0 libubsan1 linux-libc-dev make manpages-dev patch
  rpcsvc-proto
Suggested packages:
  binutils-doc menu debian-keyring g++-multilib g++-10-multilib gcc-10-doc
  gcc-multilib autoconf automake libtool flex bison gcc-doc gcc-10-multilib
  gcc-10-locales glibc-doc libstdc++-10-doc make-doc diffutils-doc
The following NEW packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu build-essential dkms
  dpkg-dev fakeroot g++ g++-10 gcc gcc-10 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan6 libatomic1
  libbinutils libc-dev-bin libc6-dev libcrypt-dev libctf-nobfd0 libctf0
  libfakeroot libgcc-10-dev libitm1 liblsan0 libnsl-dev libstdc++-10-dev
  libtirpc-dev libtsan0 libubsan1 linux-libc-dev make manpages-dev patch
  rpcsvc-proto
0 upgraded, 36 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/40.2 MB of archives.
After this operation, 172 MB of additional disk space will be used.
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/b/binutils/binutils-common_2.35.1-1ubuntu1_amd64.deb' binutils-common_2.35.1-1ubuntu1_amd64.deb 211740 MD5Sum:11b7be1ba852c117084392ae09c6809e
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/b/binutils/libbinutils_2.35.1-1ubuntu1_amd64.deb' libbinutils_2.35.1-1ubuntu1_amd64.deb 481080 MD5Sum:3b7d83efdd3d6bbd30bbc636a267490f
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/b/binutils/libctf-nobfd0_2.35.1-1ubuntu1_amd64.deb' libctf-nobfd0_2.35.1-1ubuntu1_amd64.deb 48052 MD5Sum:57c6d2919a616db8e4fa634feffd5ad2
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/b/binutils/libctf0_2.35.1-1ubuntu1_amd64.deb' libctf0_2.35.1-1ubuntu1_amd64.deb 47600 MD5Sum:3207043075905dd734d7e50e38d37ba9
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/b/binutils/binutils-x86-64-linux-gnu_2.35.1-1ubuntu1_amd64.deb' binutils-x86-64-linux-gnu_2.35.1-1ubuntu1_amd64.deb 1645092 MD5Sum:3e37148e319441fe5174f70e8f688dde
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/b/binutils/binutils_2.35.1-1ubuntu1_amd64.deb' binutils_2.35.1-1ubuntu1_amd64.deb 3380 MD5Sum:1c08ed30c001767bec12eadb47d23575
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/gcc-10/libitm1_10.2.0-13ubuntu1_amd64.deb' libitm1_10.2.0-13ubuntu1_amd64.deb 26332 MD5Sum:f2e48379c20765012eb90744ceae4df8
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/gcc-10/libatomic1_10.2.0-13ubuntu1_amd64.deb' libatomic1_10.2.0-13ubuntu1_amd64.deb 9288 MD5Sum:19660a55263efce10c342f67975f3d6e
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/gcc-10/libasan6_10.2.0-13ubuntu1_amd64.deb' libasan6_10.2.0-13ubuntu1_amd64.deb 344336 MD5Sum:58ef375c1cfc8d7ddf404681b813e889
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/gcc-10/liblsan0_10.2.0-13ubuntu1_amd64.deb' liblsan0_10.2.0-13ubuntu1_amd64.deb 144096 MD5Sum:29aa5ea32e7b0f9f385fc75d0a728631
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/gcc-10/libtsan0_10.2.0-13ubuntu1_amd64.deb' libtsan0_10.2.0-13ubuntu1_amd64.deb 319216 MD5Sum:a065f5147f3bd16933482b8de0d9fd29
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/gcc-10/libubsan1_10.2.0-13ubuntu1_amd64.deb' libubsan1_10.2.0-13ubuntu1_amd64.deb 136052 MD5Sum:66f1f7e3d35efcad04374a841d06f5f1
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/gcc-10/libgcc-10-dev_10.2.0-13ubuntu1_amd64.deb' libgcc-10-dev_10.2.0-13ubuntu1_amd64.deb 2341232 MD5Sum:50a882460075913348017ddf75bd8e0f
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/gcc-10/gcc-10_10.2.0-13ubuntu1_amd64.deb' gcc-10_10.2.0-13ubuntu1_amd64.deb 16340248 MD5Sum:71483f011c1422be60dded00af10d08f
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/gcc-defaults/gcc_10.2.0-1ubuntu1_amd64.deb' gcc_4%3a10.2.0-1ubuntu1_amd64.deb 5208 MD5Sum:a46aca38a33821ed1c8fd9ffba9a1032
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/p/patch/patch_2.7.6-6_amd64.deb' patch_2.7.6-6_amd64.deb 104988 MD5Sum:5c3598f5800967732985b28546e0294e
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/m/make-dfsg/make_4.3-4ubuntu1_amd64.deb' make_4.3-4ubuntu1_amd64.deb 166680 MD5Sum:088cf1d9c1556d94c64d193ffed6be38
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/d/dpkg/dpkg-dev_1.20.5ubuntu2_all.deb' dpkg-dev_1.20.5ubuntu2_all.deb 758052 MD5Sum:96d192b5d5dbaae1a5415d3bd1053014
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/glibc/libc-dev-bin_2.32-0ubuntu3_amd64.deb' libc-dev-bin_2.32-0ubuntu3_amd64.deb 30856 MD5Sum:e51a52dc74e72dd649b31cae9f6690d9
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/l/linux/linux-libc-dev_5.8.0-25.26_amd64.deb' linux-libc-dev_5.8.0-25.26_amd64.deb 1165576 MD5Sum:b2152338514364f6c9dbc90743015b38
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/libx/libxcrypt/libcrypt-dev_4.4.16-1ubuntu1_amd64.deb' libcrypt-dev_1%3a4.4.16-1ubuntu1_amd64.deb 104156 MD5Sum:3b2268407642db0dbcdcf0380967dac3
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/r/rpcsvc-proto/rpcsvc-proto_1.4.2-0ubuntu4_amd64.deb' rpcsvc-proto_1.4.2-0ubuntu4_amd64.deb 62836 MD5Sum:b4e71a4373e2f885f7000c89a84e4873
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/libt/libtirpc/libtirpc-dev_1.2.6-1build1_amd64.deb' libtirpc-dev_1.2.6-1build1_amd64.deb 183588 MD5Sum:2b27c17cde59981ceb7e5fe2927a138c
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/libn/libnsl/libnsl-dev_1.3.0-0ubuntu3_amd64.deb' libnsl-dev_1.3.0-0ubuntu3_amd64.deb 66360 MD5Sum:2d44eed5949d6a778abffb3447755f46
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/glibc/libc6-dev_2.32-0ubuntu3_amd64.deb' libc6-dev_2.32-0ubuntu3_amd64.deb 2130204 MD5Sum:879989b4119a73c59dbf49ba7676b207
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/gcc-10/libstdc++-10-dev_10.2.0-13ubuntu1_amd64.deb' libstdc++-10-dev_10.2.0-13ubuntu1_amd64.deb 1750180 MD5Sum:0d0e4d9bf0f29025f5ddf5300ba13ff2
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/gcc-10/g++-10_10.2.0-13ubuntu1_amd64.deb' g++-10_10.2.0-13ubuntu1_amd64.deb 9061108 MD5Sum:7f08d78d4fa51ad4c22e60b7912a63c3
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/g/gcc-defaults/g++_10.2.0-1ubuntu1_amd64.deb' g++_4%3a10.2.0-1ubuntu1_amd64.deb 1608 MD5Sum:c8c6d051d937c71bc9da252481d062b5
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/b/build-essential/build-essential_12.8ubuntu3_amd64.deb' build-essential_12.8ubuntu3_amd64.deb 4640 MD5Sum:a5f1899f55358016ff32fca73e16f870
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/d/dkms/dkms_2.8.3-4_all.deb' dkms_2.8.3-4_all.deb 67776 MD5Sum:088c8d9e72d74df06b5ed5fb52b5535b
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/f/fakeroot/libfakeroot_1.25.2-1_amd64.deb' libfakeroot_1.25.2-1_amd64.deb 26600 MD5Sum:2c52a713bdd38400e820585ecb0a79b2
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/f/fakeroot/fakeroot_1.25.2-1_amd64.deb' fakeroot_1.25.2-1_amd64.deb 62832 MD5Sum:12ee7b66e81c964f2c6a865ce54d4608
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/liba/libalgorithm-diff-perl/libalgorithm-diff-perl_1.19.03-2_all.deb' libalgorithm-diff-perl_1.19.03-2_all.deb 46616 MD5Sum:03ca4c81021ae8a591beaab3b1a8cfc8
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/liba/libalgorithm-diff-xs-perl/libalgorithm-diff-xs-perl_0.04-6_amd64.deb' libalgorithm-diff-xs-perl_0.04-6_amd64.deb 11344 MD5Sum:b5eff93d3d9865bf8f5737bb1eec3c6a
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/liba/libalgorithm-merge-perl/libalgorithm-merge-perl_0.08-3_all.deb' libalgorithm-merge-perl_0.08-3_all.deb 11992 MD5Sum:6b456963b6629af0514be1b8ccbaa7fc
'cdrom:[Kubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/pool/main/m/manpages/manpages-dev_5.08-1_all.deb' manpages-dev_5.08-1_all.deb 2289892 MD5Sum:96544a87988e051eade97fcb3a620f4a

I then regexped this to fetch these packages into a separate folder:

cp /cdrom/pool/main/b/binutils/binutils-common_2.35.1-1ubuntu1_amd64.deb ~/mydebs/
cp /cdrom/pool/main/b/binutils/libbinutils_2.35.1-1ubuntu1_amd64.deb ~/mydebs/
cp /cdrom/pool/main/b/binutils/libctf-nobfd0_2.35.1-1ubuntu1_amd64.deb ~/mydebs/
...33 other lines...

then tarred the whole thing and passed it to covid along with the driver files.

Here needs be mentioned that other ways could have been possible, including mounting from the USB image itself but as I didn't have the ISO at hand this didn't prove very easy or, what I tried first, to install it on disk from the live kernel, which proceeds roughly as follows:

mount /dev/nvme0n1p7 /mnt
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
mount --bind /run /mnt/run # if needed, as noted above
chroot /mnt
apt update
apt install dkms

But this didn't work for me, since rebooting on the installed system, these changes didn't take place. The problem there might have been related to the fact that as root I didn't have access to the apt-source list of the live disk, only as a sudo-user, but a sudo-user apparently didn't work on the chroot environment. Who knows. Anyway, I just turned to copying directly the debs onto the regular system anyway. There I installed the required components with:

sudo dpkg -i *deb

which maybe was a bit violent (as dependencies may have not been properly met and/or respected). In fact it appears some packages didn't install properly. But those needed, like make, did, and thus I could, in the RTL88x2BT-Linux-Driver directory have:

make
sudo make install

which did all that it should. Final operation:

sudo modprobe 88x2bu

and the dongle came to life, greeting me with a blue wink from its LED. Now the wifi works, but not thanks to Dell. Assholes.

Upon reboots and/or updates, the module will erratically disappear. In this case, simply reloading it doesn't work. One needs to go the full sequence:

make clean
make
sudo make install
sudo modprobe 88x2bu

Now with Internet, in principle, I suppose, one can compile a proper kernel and support the native Killer wifi card, although I found in countless places that it is a problematic chip, even for Windows user so the dongle might even be a better option. Why would Dell ever use such a crap? In any case, they can now be considered not-linux compliant or even only linux-friendly. I join a growing community of people recommending against Dell laptops for linux.

Links

  • Arch Linux has some solution at the kernel level.
  • Doing Dell's job, if you've got the guts to crack open your brand new computer. Dell will also tell you this voids the guarantee. They don't honor anything from their guarantee anyway.
  • Josh Schertz on a driver solution, although he also later changed the card, causing other problems.