Laptop screen showing firmware update progress with cloud data connections
|

Updating BIOS and Firmware from the Command Line on Linux Mint

Summary: Use fwupdmgr to refresh, check, and apply BIOS and firmware updates on Linux Mint directly from the terminal — no Windows, no USB stick, no bootable ISO required.

Example Values Used in This Tutorial

KeyValue
Example deviceThinkPad X395 T495s
Pre-update firmware version0.1.35
Post-update firmware version0.1.36
OS targetLinux Mint (any recent version, UEFI mode)

0. Prerequisites

Three things to confirm before you begin.

1. You must be booted in UEFI mode (not Legacy/BIOS)

Run this check:

test -d /sys/firmware/efi && echo "UEFI OK" || echo "Legacy BIOS — fwupd will not flash"Code language: Bash (bash)

If you see Legacy BIOS, capsule updates via fwupd will not work on your system. You would need the vendor’s bootable update ISO instead.

2. Plug in AC power

fwupd refuses to flash firmware on battery alone. Connect your charger before proceeding.

3. Confirm fwupd is installed

fwupd ships pre-installed on Linux Mint. If it’s missing for any reason:

sudo apt update && sudo apt install fwupdCode language: Bash (bash)

1. How fwupd works

fwupd is a daemon that manages firmware updates for Linux. Its command-line client is fwupdmgr. Vendors publish signed firmware capsules to LVFS (the Linux Vendor Firmware Service), and your machine downloads them through fwupdmgr.

For BIOS/UEFI updates, the actual flash happens on the next reboot via the UEFI capsule update mechanism. Your OS stages the firmware file; the firmware applies it before handing control back to Linux.

Well-supported vendors include Lenovo, Dell (business lines), HP, Framework, Star Labs, System76, Logitech (peripherals), and Intel. If your vendor does not publish to LVFS, fwupdmgr will show no available updates even if updates exist on the vendor’s website.


2. Refresh the LVFS metadata

Pull the latest list of available firmware from LVFS:

sudo fwupdmgr refresh --forceCode language: Bash (bash)
Updating lvfs Successfully downloaded new metadata: 3 local devices supported

The --force flag bypasses the cache to ensure you are working with current data.


3. Check for available updates

sudo fwupdmgr get-updatesCode language: Bash (bash)

The output groups your devices into three categories:

  • Devices with no available firmware updates — nothing on LVFS for them
  • Devices already running the latest available firmware version
  • Devices with available updates — listed with current version, new version, urgency, and changelog

Example output for a device with a pending update:

└─System Firmware: │ Current version: 0.1.35 └─ThinkPad X395 T495s System Update: New version: 0.1.36 Urgency: High Description: • Enhancement to address security vulnerability.

Note: If get-updates shows nothing, it does not necessarily mean you are up to date — it means LVFS has nothing newer for your specific device. Cross-check against the vendor’s support page if currency matters.


4. Apply the updates

sudo fwupdmgr updateCode language: Bash (bash)

For each available update you see the changelog and a confirmation prompt. Type y to proceed.

Two types of updates behave differently:

  • Live updates (fingerprint readers, peripherals, some SSDs) apply immediately, in seconds.
  • Staged updates (System Firmware/BIOS, Embedded Controller) queue for the next reboot. After confirming all staged updates, fwupd prompts:
An update requires a reboot to complete. Restart now? [y|N]:

Type y to reboot.

Warning: Do not close the lid, unplug AC power, or power-cycle the machine during the firmware flash. The vendor splash screen may show a progress bar, or you may see a black screen for up to several minutes. Multiple automatic reboots are normal. The machine will return to Mint on its own when finished.


5. Verify the update succeeded

After Mint comes back up, check the firmware version:

sudo dmidecode -s bios-versionCode language: Bash (bash)

This should show the new version number. You can also re-run get-updates — the device should now appear under “latest available firmware version”:

sudo fwupdmgr get-updatesCode language: Bash (bash)

Note: If the version string looks different between dmidecode and fwupdmgr get-devices, both tools may be reporting the same firmware formatted differently. This is a display difference, not a sign the update failed.


6. Useful commands

List every device fwupd knows about, with current versions and capabilities:

fwupdmgr get-devicesCode language: Bash (bash)

See the history of past updates applied through fwupd:

fwupdmgr get-historyCode language: Bash (bash)

Get full update details in machine-readable format before installing:

fwupdmgr get-updates --jsonCode language: Bash (bash)

Downgrade firmware if a newer version introduced a regression and the vendor allows it:

sudo fwupdmgr downgradeCode language: Bash (bash)

Install a GUIgnome-firmware works on Cinnamon/Mint, not just GNOME:

sudo apt install gnome-firmwareCode language: Bash (bash)

Mint’s Update Manager also surfaces firmware updates alongside package updates in recent versions.


7. Caveats and limitations

  • LVFS coverage varies by vendor. If get-updates shows nothing for your device, check the vendor’s support page — they may publish updates only to their Windows download portal.
  • LVFS versions may lag behind vendor releases. A vendor might publish version 1.46 on their website while only 1.40 appears on LVFS. The vendor’s site is the authoritative check.
  • Older machines stop receiving updates. A ThinkPad X395 (2019), for example, received its last system firmware update in August 2021. No further fixes will appear through fwupdmgr.
  • Secure Boot is generally fine. fwupd uses signed shim/capsule updates compatible with Secure Boot enabled.
  • Never flash on a weak power setup. Charge to at least 50% before flashing even with AC connected. A power disruption mid-flash can brick the machine.

8. Troubleshooting

fwupdmgr says my device is updatable but no update appears

Run sudo fwupdmgr refresh --force to ensure the metadata is current. Some vendors publish updates to LVFS with a delay after the initial release date.

Update applied successfully but the version did not change

Compare fwupdmgr get-devices output with dmidecode -s bios-version. The two tools may format the same firmware version string differently. If both match the expected new version, the update succeeded.

Capsule flash failed or the firmware updater hung

If the machine boots normally after a failed flash, run fwupdmgr get-history to see the failure record, then contact the vendor. Hard power-off (hold the power button for 10 seconds) only as a last resort — on Lenovo, repeated boot attempts may invoke the embedded recovery to roll back automatically.


Summary

You verified UEFI mode, refreshed the LVFS catalogue, identified pending updates, applied them with fwupdmgr update, rebooted through the firmware flash, and confirmed the new version with dmidecode.

Quick reference:

# Confirm UEFI mode
test -d /sys/firmware/efi && echo "UEFI OK"

# Refresh, check, apply
sudo fwupdmgr refresh --force
sudo fwupdmgr get-updates
sudo fwupdmgr update

# Reboot when prompted — do not interrupt the firmware flash

# Confirm new version
sudo dmidecode -s bios-versionCode language: Bash (bash)

Similar Posts

Leave a Reply