Changing/Enabling the OS logo in the MoBo boot screen

Hey there,

You have probably seen this boot animation embedded into the bios, which is generally used by windows, but various linux distributions can also do that, like zorin os, or in the following image, ubuntu.



Now I'm wondering: How does the bios handle this? How can I embed an image there? Does the motherboard/bios need specific support for such a feature?


  Kernel: 6.1.23-1-lts arch: x86_64 bits: 64 compiler: gcc
    v: 12.2.1
    parameters: root=PARTUUID=fec66b8f-995b-8043-94b0-fcc9535362ba
    rw add_efi_memmap [email protected]
    [email protected]\boot\amd-ucode.img rd.udev.log_priority=3
    vt.global_cursor_default=0 systemd.unified_cgroup_hierarchy=1
    loglevel=3 sysrq_always_enabled=1 iommu=soft
  Desktop: Hyprland info: waybar vt: 1 dm: greetd
    Distro: Garuda Linux base: Arch Linux
  Type: Desktop System: Gigabyte product: AX370-Gaming 3 v: N/A
    serial: <superuser required>
  Mobo: Gigabyte model: AX370-Gaming 3-CF v: x.x
    serial: <superuser required> UEFI: American Megatrends v: F50a
    date: 11/27/2019
  Info: model: AMD Ryzen 5 2600X bits: 64 type: MT MCP arch: Zen+
    gen: 2 level: v3 note: check built: 2018-21 process: GF 12nm
    family: 0x17 (23) model-id: 8 stepping: 2 microcode: 0x800820D
  Topology: cpus: 1x cores: 6 tpc: 2 threads: 12 smt: enabled
    cache: L1: 576 KiB desc: d-6x32 KiB; i-6x64 KiB L2: 3 MiB
    desc: 6x512 KiB L3: 16 MiB desc: 2x8 MiB
  Speed (MHz): avg: 2951 high: 4183 min/max: 2200/3600
    boost: enabled scaling: driver: acpi-cpufreq governor: schedutil
    cores: 1: 4183 2: 1860 3: 2149 4: 1862 5: 4179 6: 4143 7: 4174
    8: 1969 9: 2793 10: 1857 11: 4048 12: 2200 bogomips: 86256
  Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2
    sse4a ssse3 svm
  Vulnerabilities: <filter>
  Device-1: AMD Baffin [Radeon RX 550 640SP / 560/560X]
    vendor: ASUSTeK driver: amdgpu v: kernel arch: GCN-4
    code: Arctic Islands process: GF 14nm built: 2016-20 pcie:
    gen: 3 speed: 8 GT/s lanes: 8 ports: active: DVI-D-1,HDMI-A-1
    empty: DP-1 bus-ID: 08:00.0 chip-ID: 1002:67ff class-ID: 0300
    temp: 41.0 C
  Device-2: Logitech Webcam C270 type: USB
    driver: snd-usb-audio,uvcvideo bus-ID: 3-3.4:6
    chip-ID: 046d:0825 class-ID: 0102 serial: <filter>
  Display: wayland server: Xwayland v: 23.1.1
    compositor: Hyprland driver: X: loaded: amdgpu
    unloaded: modesetting,radeon alternate: fbdev,vesa
    dri: radeonsi gpu: amdgpu display-ID: 1
  Monitor-1: DVI-D-1 model: Apple Cinema HD Display
    serial: <filter> built: 2003 res: 1920x1200 dpi: 99 gamma: 1.2
    size: 495x310mm (19.49x12.2") diag: 584mm (23") ratio: 16:10
    modes: max: 1920x1200 min: 640x480
  Monitor-2: HDMI-A-1 model: Samsung SyncMaster serial: <filter>
    built: 2007 res: 1680x1050 dpi: 90 gamma: 1.2
    size: 474x296mm (18.66x11.65") diag: 559mm (22") ratio: 16:10
    modes: max: 1680x1050 min: 720x400
  Message: No known Wayland EGL/GBM data sources. API: EGL/GBM
  Device-1: AMD Baffin HDMI/DP Audio [Radeon RX 550 640SP /
    560/560X] vendor: ASUSTeK driver: snd_hda_intel v: kernel
    bus-ID: 1-1:2 pcie: chip-ID: 0d8c:9700 class-ID: 0300 gen: 3
    speed: 8 GT/s serial: <filter> lanes: 8 bus-ID: 08:00.1
    chip-ID: 1002:aae0 class-ID: 0403
  Device-2: AMD Family 17h HD Audio vendor: Gigabyte
    driver: snd_hda_intel v: kernel pcie: gen: 3 speed: 8 GT/s
    lanes: 16 bus-ID: 0a:00.3 chip-ID: 1022:1457 class-ID: 0403
  Device-3: C-Media USB Microphone type: USB
    driver: hid-generic,snd-usb-audio,usbhid
  Device-4: Logitech Webcam C270 type: USB
    driver: snd-usb-audio,uvcvideo bus-ID: 3-3.4:6
    chip-ID: 046d:0825 class-ID: 0102 serial: <filter>
  API: ALSA v: k6.1.23-1-lts status: kernel-api
    tools: alsamixer,amixer
  Server-1: sndiod v: N/A status: off
    tools: aucat,midicat,sndioctl
  Server-2: PipeWire v: 0.3.68 status: active with:
    1: pipewire-pulse status: active 2: wireplumber status: active
    3: pipewire-alsa type: plugin 4: pw-jack type: plugin
    tools: pactl,pw-cat,pw-cli,wpctl
  Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet
    vendor: Gigabyte driver: r8169 v: kernel pcie: gen: 1
    speed: 2.5 GT/s lanes: 1 port: f000 bus-ID: 03:00.0
    chip-ID: 10ec:8168 class-ID: 0200
  IF: eno1 state: up speed: 1000 Mbps duplex: full mac: <filter>
  Device-1: Broadcom BCM20702A0 Bluetooth 4.0 type: USB
    driver: btusb v: 0.8 bus-ID: 3-4.2:7 chip-ID: 0a5c:21e8
    class-ID: fe01 serial: <filter>
  Report: bt-adapter ID: hci0 rfk-id: 0 state: up
    address: <filter>
  Local Storage: total: 2.96 TiB used: 2.03 TiB (68.4%)
  SMART Message: Unable to run smartctl. Root privileges
  ID-1: /dev/sda maj-min: 8:0 vendor: Samsung
    model: SSD 860 EVO 1TB size: 931.51 GiB block-size:
    physical: 512 B logical: 512 B speed: 6.0 Gb/s type: SSD
    serial: <filter> rev: 4B6Q scheme: GPT
  ID-2: /dev/sdb maj-min: 8:16 vendor: Samsung
    model: SSD 860 EVO 250GB size: 232.89 GiB block-size:
    physical: 512 B logical: 512 B speed: 6.0 Gb/s type: SSD
    serial: <filter> rev: 1B6Q scheme: GPT
  ID-3: /dev/sdc maj-min: 8:32 vendor: Western Digital
    model: WD20EFRX-68EUZN0 size: 1.82 TiB block-size:
    physical: 4096 B logical: 512 B speed: 6.0 Gb/s type: HDD
    rpm: 5400 serial: <filter> rev: 0A82 scheme: GPT
  ID-4: /dev/sdd maj-min: 8:48 type: USB vendor: Intenso
    model: Rainbow Line size: 7.5 GiB block-size: physical: 512 B
    logical: 512 B type: N/A serial: <filter> rev: 8.07
    scheme: MBR
  SMART Message: Unknown USB bridge. Flash drive/Unsupported
  ID-1: / raw-size: 195.03 GiB size: 195.03 GiB (100.00%)
    used: 61.62 GiB (31.6%) fs: btrfs dev: /dev/sda1 maj-min: 8:1
  ID-2: /home raw-size: 736.18 GiB size: 736.18 GiB (100.00%)
    used: 182.59 GiB (24.8%) fs: btrfs dev: /dev/sda3 maj-min: 8:3
  ID-3: /var/log raw-size: 195.03 GiB size: 195.03 GiB (100.00%)
    used: 61.62 GiB (31.6%) fs: btrfs dev: /dev/sda1 maj-min: 8:1
  ID-4: /var/tmp raw-size: 195.03 GiB size: 195.03 GiB (100.00%)
    used: 61.62 GiB (31.6%) fs: btrfs dev: /dev/sda1 maj-min: 8:1
  Kernel: swappiness: 133 (default 60)
    cache-pressure: 100 (default)
  ID-1: swap-1 type: zram size: 31.3 GiB used: 12.3 MiB (0.0%)
    priority: 100 dev: /dev/zram0
  System Temperatures: cpu: 47.2 C mobo: N/A gpu: amdgpu
    temp: 41.0 C
  Fan Speeds (RPM): N/A gpu: amdgpu fan: 1498
  Processes: 365 Uptime: 7h 53m wakeups: 4 Memory: 31.3 GiB
  used: 6.14 GiB (19.6%) Init: systemd v: 253 default: graphical
  tool: systemctl Compilers: gcc: 12.2.1 clang: 15.0.7 Packages:
  pm: nix-default pkgs: 0 pm: nix-sys pkgs: 0 pm: nix-usr pkgs: 0
  pm: pacman pkgs: 1718 libs: 491 tools: yay Shell: Zsh v: 5.9
  running-in: alacritty inxi: 3.3.26
Garuda (2.6.16-1):
  System install date:     2023-01-08
  Last full system update: 2023-04-13 ↻
  Is partially upgraded:   No
  Relevant software:       snapper NetworkManager dracut
  Windows dual boot:       No/Undetected
  Failed units:

Now why does this tell me to reboot? I did not even update any packages. I only installed two. I think the reboot detection is broken.

Possibly relevant: [Resolved] UEFI splash screen is no longer shown when booting / Kernel & Hardware / Arch Linux Forums

bgrt_disable=0 kernel parameter
The kernel should attempt to display the bitmap stored under /sys/firmware/acpi/bgrt/

And yep, inxi tells you reboot whatever you pacman. Stay tuned.

1 Like

Oh no way, I'd be so happy if this allowed me to change this mega-ugly MoBo logo.

Is there a way to modify the files in that directory permanently? I don't think just setting file perms and overwriting the file will change anything since the boot splash is probably stored in the MoBo somewhere

No idea, I don't even have a UEFI mobo.

edit: correct. no way overwriting it with a simple sudo cp.

1 Like

according to multiple posts like this. I would need to patch the UEFI firmware for that. No idea how, so I will just try to disable the boot screen entirely via the kernel parameter you mentioned.

Edit: Disabling that did not work it seems.

Apparently something can be done though: GitHub - Metabolix/HackBGRT: Windows boot logo changer for UEFI systems (unfortunately, this is windows only... the quest begins).
Looks like it rewrites the (windows) UEFI boot loader (the .efi).

If I understand correctly, it does not replace the bitmap though, only reports a different one to the OS.

(from this reddit thread )

Also, there's an EFI app called HackBGRT, that you can boot into to have it temporarily replace the copy of the BGRT image (and associated metadata) in RAM that OSes can use, and after it does that, it chainloads any actual bootloader of your choosing. It can even get rid of the motherboard's BGRT image entirely and make OSes fallback to displaying their logo instead of the motherboard's.

So that's where the ubuntu boot screen gets its logo from.

but that is just a plymouth theme that makes use of the UEFI BGRT bitmap.
also a windows program, this apparently lets replace the bitmap in a firmware image and flash it

this is only for some Thinkpad models (do not attempt on the wrong mobo...) but some info may turn useful: How to change the BIOS bootsplash screen - ThinkWiki

Maybe can be done in UEFI Shell? But this is all alien technology for me LOL.
Doesn't seem so as far as I can tell.

There is some info here but I don't understand most of it.
UEFI-Utilities-2019/MyApps/DisplayBMP at master · fpmurphy/UEFI-Utilities-2019 · GitHub

It's worth reminding the warning in the section just above the previous arch wiki link Disable_UEFI_variable_access : :computer: :brick: :face_with_head_bandage:


1 Like

Relevant info.