PNG  IHDR* pHYs+ IDATx]n#; cdLb Ǚ[at¤_:uP}>!Usă cag޿ ֵNu`ݼTâabO7uL&y^wFٝA"l[|ŲHLN밪4*sG3|Dv}?+y߉{OuOAt4Jj.u]Gz*҉sP'VQKbA1u\`& Af;HWj hsO;ogTu uj7S3/QzUr&wS`M$X_L7r2;aE+ώ%vikDA:dR+%KzƉo>eOth$z%: :{WwaQ:wz%4foɹE[9<]#ERINƻv溂E%P1i01 |Jvҗ&{b?9g=^wζXn/lK::90KwrюO\!ջ3uzuGv^;騢wq<Iatv09:tt~hEG`v;3@MNZD.1]L:{ծI3`L(÷ba")Y.iljCɄae#I"1 `3*Bdz>j<fU40⨬%O$3cGt]j%Fߠ_twJ;ABU8vP3uEԑwQ V:h%))LfraqX-ۿX]v-\9I gl8tzX ]ecm)-cgʒ#Uw=Wlێn(0hPP/ӨtQ“&J35 $=]r1{tLuǮ*i0_;NƝ8;-vݏr8+U-kruȕYr0RnC]*ެ(M:]gE;{]tg(#ZJ9y>utRDRMdr9㪩̞zֹb<ģ&wzJM"iI( .ꮅX)Qw:9,i좜\Ԛi7&N0:asϓc];=ΗOӣ APqz93 y $)A*kVHZwBƺnWNaby>XMN*45~ղM6Nvm;A=jֲ.~1}(9`KJ/V F9[=`~[;sRuk]rєT!)iQO)Y$V ی ۤmzWz5IM Zb )ˆC`6 rRa}qNmUfDsWuˤV{ Pݝ'=Kֳbg,UҘVz2ﴻnjNgBb{? ߮tcsͻQuxVCIY۠:(V뺕 ٥2;t`@Fo{Z9`;]wMzU~%UA蛚dI vGq\r82iu +St`cR.6U/M9IENDB` REDROOM
PHP 5.6.40
Preview: install_dell_bios_exe.py Size: 3.44 KB
//usr/share/fwupd/install_dell_bios_exe.py

#!/usr/libexec/platform-python
#
# Copyright (C) 2019 Mario Limonciello <mario.limonciello@dell.com>
#
# SPDX-License-Identifier: LGPL-2.1+

import dbus
import os.path
import sys
import tempfile
import gi

try:
    gi.require_version("Fwupd", "2.0")
except ValueError:
    print("Missing gobject-introspection packages.  Try to install gir1.2-fwupd-2.0.")
    sys.exit(1)
from gi.repository import Fwupd  # pylint: disable=wrong-import-position
from simple_client import install, check_exists
from add_capsule_header import add_header
from firmware_packager import make_firmware_metainfo, create_firmware_cab


class Variables:
    def __init__(self, device_guid, version):
        self.device_guid = device_guid
        self.developer_name = "Dell Inc"
        self.firmware_name = "New firmware"
        self.firmware_summary = "Unknown"
        self.firmware_description = "Unknown"
        self.firmware_homepage = "https://support.dell.com"
        self.contact_info = "Unknown"
        self.release_version = version
        self.release_description = "Unknown"
        self.update_protocol = "org.uefi.capsule"
        self.version_format = "dell-bios"


def parse_args():
    """Parse arguments for this client"""
    import argparse

    parser = argparse.ArgumentParser(description="Interact with fwupd daemon")
    parser.add_argument("exe", nargs="?", help="exe file")
    parser.add_argument("deviceid", nargs="?", help="DeviceID to operate on(optional)")
    args = parser.parse_args()
    return args


def generate_cab(infile, directory, guid, version):
    output = os.path.join(directory, "firmware.bin")
    ret = add_header(infile, output, guid)
    if ret:
        sys.exit(ret)
    variables = Variables(guid, version)
    make_firmware_metainfo(variables, directory)
    create_firmware_cab(variables, directory)
    cab = os.path.join(directory, "firmware.cab")
    print("Generated CAB file %s" % cab)
    return cab


def find_uefi_device(client, deviceid):
    devices = client.get_devices()
    for item in devices:
        # match the device we were given
        if deviceid:
            if item.get_id() != deviceid:
                continue
        # internal
        if not item.has_flag(1 << 0):
            continue
        # needs reboot
        if not item.has_flag(1 << 8):
            continue
        # return the first hit for UEFI plugin
        if item.get_plugin() == "uefi" or item.get_plugin() == "uefi_capsule":
            print("Installing to %s" % item.get_name())
            return item.get_guid_default(), item.get_id(), item.get_version()
    print("Couldn't find any UEFI devices")
    sys.exit(1)


def prompt_reboot():
    print("An update requires a reboot to complete")
    while True:
        res = input("Restart now? (Y/N) ")
        if res.lower() == "n":
            print("Reboot your machine manually to finish the update.")
            break
        if res.lower() != "y":
            continue
        # reboot using logind
        obj = dbus.SystemBus().get_object(
            "org.freedesktop.login1", "/org/freedesktop/login1"
        )
        obj.Reboot(True, dbus_interface="org.freedesktop.login1.Manager")


if __name__ == "__main__":
    ARGS = parse_args()
    CLIENT = Fwupd.Client()
    check_exists(ARGS.exe)
    directory = tempfile.mkdtemp()
    guid, deviceid, version = find_uefi_device(CLIENT, ARGS.deviceid)
    cab = generate_cab(ARGS.exe, directory, guid, version)
    install(CLIENT, cab, deviceid, True, True)
    prompt_reboot()

Directory Contents

Dirs: 3 × Files: 5

Name Size Perms Modified Actions
metainfo DIR
- drwxr-xr-x 2025-03-30 04:15:30
Edit Download
quirks.d DIR
- drwxr-xr-x 2025-03-30 04:15:30
Edit Download
remotes.d DIR
- drwxr-xr-x 2025-03-30 04:15:30
Edit Download
2.47 KB lrwxr-xr-x 2024-03-07 11:38:43
Edit Download
5.12 KB lrwxr-xr-x 2024-03-07 11:38:43
Edit Download
3.44 KB lrwxr-xr-x 2024-03-07 11:38:43
Edit Download
4.91 KB lrwxr-xr-x 2024-03-07 11:38:47
Edit Download
1.56 MB lrw-r--r-- 2024-03-07 11:39:14
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).
© 2026 REDROOM — Secure File Manager. All rights reserved. Built with ❤️ & Red Dark UI