Unable to update device firmware: fwupdx64.efi cannot be found

I can’t remember ever having an issue with updating the firmware of my XPS 13 7390 on Ubuntu. Today, however, Ubuntu 21.10 (Impish Indri) decided to throw an ugly-looking warning in my face after proudly proclaiming that it had a new device firmware update ready to be installed. To add insult to injury, Ubuntu told me to reboot the system to install the new firmware, after GNOME Software correctly informed me that it had failed.

GNOME Software: fwupdx64.efi and fwupdx64.efi.signed cannot be found.

fwupd

fwupd is an open-source telemetry service daemon for managing the installation of firmware updates on Linux-based systems.

Source: Wikipedia

After reinstalling fwupd, and running the command fwupdmgr update to manually apply the firmware update from the terminal, the result was the same: fwupdx64.efi and fwupdx64.efi.signed were not available under /usr/libexec/fwupd/efi/

Unable to update: /usr/libexec/fwupd/efi/fwupdx64.efi and /usr/libexec/fwupd/efi/fwupdx64.efi.signed cannot be found.

fwupd-efi

Looking at the fwupd github page, I noticed a repository aptly named fwupd-efi with the following description:

EFI executable for fwupd This repository contains the source used for the fwupd project to generate a UEFI binary for installing updates using the UpdateCapsule runtime service. It was originally imported from the combined fwupd project, and is now maintained separately to allow fwupd userspace releases and fwupd-efi UEFI executable releases to follow a different cadence.

Apparently, Ubuntu ships fwupd 1.6.x and newer without the built-in fwupd EFI binary. A quick apt search for fwupd related packages turned up fwupd-signed and fwupd-unsigned, for signed and unsigned EFI binaries. After installing the packages, fwupdx64.efi and fwupdx64.efi.signed were added to the expected location.

Issuing the command fwupdmgr update from the terminal again provided the desired result:

Updating device firmware manually using fwupd.

It’s somewhat surprising that the fwupd package doesn’t pull in fwupd-efi as a dependency. Anyhow, everything worked out in the end.