WiFi Driver Installation Without Ethernet (Qubes 4.1.1, Realtek RTL8821CE)

In short, I am unable to connect to WiFi on a brand new Qubes install, likely due to a driver issue. I have been working on an issue for a good amount of time now without success. I am hoping my struggles will be helpful for other new users who have limited Linux experience. For reference, I also posted this question to Reddit, but felt it might be better addressed in this forum.

I recently installed Qubes R4.1.1 (fedora-36) by following the official Qubes Installation Guide on a brand new laptop with the following specs:

  • ASUS R565E, Intel i5-1135G7, Windows 11 64bit
  • 256GB SSD PCIEG3, 4GB DDR4 + 4GB onboard (I know it is not ideal, but I would like to get familiar with Qubes before installing on a ThinkPad that I use as a daily personal driver)
  • Network Controller: Realtek RTL8821CE (802.11ac) PCIe Wireless Network Adapter (working properly, as I was able to connect to WiFi in Windows originally)

I worked out a few kinks with the following workarounds:

  • Disabled SecureBoot and VMD controller in UEFI
  • Changed sys-net Visualization to PV (from HVM)
  • Moved Network Controller to ‘Selected’ in sys-net ‘Qube Settings’
  • Restarted Network Manager in sys-net by running sudo systemctl restart NetworkManager
  • Restarted sys-net by running qvm-shutdown --all in dom0

My WiFi was still not detected when running sys-net, so I spent a good bit of time searching the internet for a fix. One very helpful article (found here) had a step-by-step walkthrough detailing how I should troubleshoot my “no WiFi” issue.

  • I tried running iwconfig in sys-net , but was hit with a bash: iwconfig: command not found... error (same when running with sudo )
  • I ran sudo lspci -v in sys-net , and it recognized my network controller (running on Kernel modules: rtw88_8821ce )

According to the online guide, this implies that the WiFi card is present as a PCI device in sys-net , but has a “Driver Issue.” The guide notes that "what to do is dependent on what sudo lspci -v says the card is" .

My troubleshooting narrowed down my issue to a (likely) driver problem, but this was not very helpful to me (a beginner) since I do not know how to install drivers without internet connection. So, I did some more digging, and found that a few other folks with this exact WiFi card had some issues in the past that remained unresolved; the official Qubes HCL even notes that “manual installation of the RTL8821CE wifi driver” is required for some builds. One savvy programmer produced a patch that supposedly works with Qubes (Github, tomaspinho/rtl8821ce).

This was all well and good, but my issue was that I could not connect via ethernet to do the install (otherwise I could update my driver like the user below):

Several online articles implied that I could download the git repository and unzip it to a a USB using another machine, and then transfer the data from the USB into Qubes to manually update the offending driver. I understand this conceptually, but I don’t exactly understand how to execute this in Qubes. A few questions:

  • I would like to download the driver update from Github. To do this, do I click the “Download ZIP” option and then “unzip” the .zip to a blank USB?
  • After I have the correct unzipped folder (I assume it is rtl8821ce-master) on an otherwise blank USB, what are the steps I should take to get the file into Qubes? Where exactly should I relocate the data from the USB? I am assuming it will live in Template:Fedora-36, but I don’t know the exact file location, or even the steps to achieve this file migration from USB → correct /lib/ destination
  • Once I get the file into the correct location in Qubes, what commands should I run to install and load the driver? Do I need to navigate (cd) anywhere special in terminal before executing?Note: I assume I should be running sudo ./dkms-install.sh and sudo modprobe 8821ce followed by a reboot, but I want to make sure I know exactly how to do this properly

Thank you very much for your help, and again please forgive my ignorance. Once I figure out the answer, I will append to the post some screenshots / code to make this question more of a “guide” than a long-winded question