Testers needed: The Garuda Hardware Tool and the modern Garuda Hardware Profiles

So I decided to replace mhwd entirely on a whim today after garuda-settings-manager once again broke and prevented new ISO builds. The only reason we have garuda-settings-manager at all anymore is because of mhwd, so this kills two (non-eagle) birds with one stone! (Another relic of the early Garuda Linux days falls beneath the sands of time!)

garuda-hardware-tool

Available in the repos as long as supplies last, this script automatically detects if any extra drivers are needed (currently detects nvidia, virtual machines) and installs them automatically. Additionally, it also detects if all of your connected GPUs support nvidia-open and installs it instead (because it’s the official recommendation by Nvidia)

Usage: garuda-hardware-tool [OPTIONS]
Options:
--help, -h            Show this help message.
--nonfree             Install non-free drivers.
--free                Install free drivers only.
--noconfirm           Do not prompt for confirmation during installation.
Either --nonfree or --free must be specified.

We’re live!

I also completely tore out mhwd from our live boot setup and made sure garuda-hardware-tool handles driver installation correctly in a live session! Also, we make more liberal use of systemd targets, allowing drivers and other tools such as VM services to be reliably started now without any hacky logic like before!

The modern garuda-hardware-profile-* (s)

The new hardware profiles embrace one simple concept: The driver knows what’s best. We used to try and micromanage what the Nvidia driver for example does. Now we take a hands off approach while setting some reasonable defaults!

This should in general make things more robust and future proof, completely sidestepping the “how do we apply config updates to existing activated mhwd hardware profiles” problem.

The tough decision to exclude the archaic Nvidia 470 drivers from the official hardware profiles was made too, meaning graphics cards older than 2014 will no longer have drivers autoinstalled. I hope the need for this is understandable for everyone :face_with_peeking_eye:

Where is this going?

The short/medium term goal is for garuda-hardware-tool and the garuda-hardware-profiles to replace mhwd entirely via pacman replaces statements. ISOs will start using these new components starting now, as it was necessary for fixing the ISO builds.

I’m only here for the testing!

Two ways you can help:

  1. Simply installing garuda-hardware-tool and using it. It’ll probably have some conflicts with nvidia-open and nvidia in there somewhere, that’s expected though given that your system still has legacy mhwd hardware configuration packages!
  2. Testing ISOs!! Especially on Nvidia!
    Full Installations are not necessarily necessary, but it would be nice. A simple boot up and to running glxgears/verifying vendor via glxinfo should be good enough.

Thanks!!

16 Likes

Also I should point out real quick that the setup assistant not working is expected right now, it depends on mhwd. It’ll be fixed when the time to fully switch to garuds-hardware-tool comes.

8 Likes

Tested the live USB using Ventoy, selecting Grub2, and using the proprietary Nvidia driver option (on my spare parts PC). All seems good I think as far as the graphics driver goes I think? If you need additional information, let me know.

╭─garuda@garuda in ~ as 🧙 took 0s
╰─λ glxinfo | grep vendor
server glx vendor string: SGI
client glx vendor string: NVIDIA Corporation
OpenGL vendor string: NVIDIA Corporation
╭─garuda@garuda in ~ as 🧙 took 0s
╰─λ glxgears
Running synchronized to the vertical refresh.  The framerate should be
approximately the same as the monitor refresh rate.
302 frames in 5.0 seconds = 60.347 FPS
300 frames in 5.0 seconds = 59.989 FPS
300 frames in 5.0 seconds = 60.000 FPS
300 frames in 5.0 seconds = 59.998 FPS
301 frames in 5.0 seconds = 60.013 FPS
300 frames in 5.0 seconds = 59.988 FPS

Garuda-inxi just in case :grin:

╭─garuda@garuda in ~ as 🧙 took 32s
[⚡] × garuda-inxi
System:
Kernel: 6.15.3-zen1-1-zen arch: x86_64 bits: 64 compiler: gcc v: 15.1.1
clocksource: tsc avail: hpet,acpi_pm
parameters: BOOT_IMAGE=/boot/vmlinuz-x86_64 lang=en_US keytable=us tz=UTC
misobasedir=garuda root=miso:LABEL=GARUDA_DR460NIZED_BROADWING quiet
systemd.show_status=1 checksum=y driver=nonfree nouveau.modeset=0
i915.modeset=1 radeon.modeset=1 rdinit=/vtoy/vtoy
Desktop: KDE Plasma v: 6.4.1 tk: Qt v: N/A info: frameworks v: 6.15.0
wm: kwin_wayland vt: 1 dm: SDDM Distro: Garuda base: Arch Linux
Machine:
Type: Desktop System: Micro-Star product: MS-7C35 v: 1.0
serial: <superuser required>
Mobo: Micro-Star model: MEG X570 ACE (MS-7C35) v: 1.0
serial: <superuser required> uuid: <superuser required> UEFI: American
Megatrends LLC. v: 1.P0 date: 07/17/2024
CPU:
Info: model: AMD Ryzen 9 3900X bits: 64 type: MT MCP arch: Zen 2 gen: 2
level: v3 note: check built: 2020-22 process: TSMC n7 (7nm)
family: 0x17 (23) model-id: 0x71 (113) stepping: 0 microcode: 0x8701034
Topology: cpus: 1x dies: 1 clusters: 1 cores: 12 threads: 24 tpc: 2
smt: enabled cache: L1: 768 KiB desc: d-12x32 KiB; i-12x32 KiB L2: 6 MiB
desc: 12x512 KiB L3: 64 MiB desc: 4x16 MiB
Speed (MHz): avg: 1746 min/max: 563/4674 boost: enabled scaling:
driver: amd-pstate-epp governor: powersave cores: 1: 1746 2: 1746 3: 1746
4: 1746 5: 1746 6: 1746 7: 1746 8: 1746 9: 1746 10: 1746 11: 1746 12: 1746
13: 1746 14: 1746 15: 1746 16: 1746 17: 1746 18: 1746 19: 1746 20: 1746
21: 1746 22: 1746 23: 1746 24: 1746 bogomips: 182392
Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm
Vulnerabilities: <filter>
Graphics:
Device-1: NVIDIA TU104 [GeForce RTX 2080 SUPER] vendor: ASUSTeK
driver: nvidia v: 575.64 alternate: nouveau,nvidia_drm non-free: 550-570.xx+
status: current (as of 2025-04; EOL~2026-12-xx) arch: Turing code: TUxxx
process: TSMC 12nm FF built: 2018-2022 pcie: gen: 3 speed: 8 GT/s
lanes: 16 ports: active: none off: HDMI-A-1 empty: DP-1, DP-2, HDMI-A-2,
Unknown-2 bus-ID: 2d:00.0 chip-ID: 10de:1e81 class-ID: 0300
Device-2: Sunplus Innovation Depstech webcam MIC
driver: snd-usb-audio,uvcvideo type: USB rev: 2.0 speed: 480 Mb/s lanes: 1
mode: 2.0 bus-ID: 1-2:2 chip-ID: 1bcf:28c4 class-ID: 0102 serial: <filter>
Display: wayland server: X.org v: 1.21.1.18 with: Xwayland v: 24.1.8
compositor: kwin_wayland driver: X: loaded: nvidia
unloaded: modesetting,nouveau alternate: fbdev,nv,vesa
gpu: nvidia,nvidia-nvswitch display-ID: 0
Monitor-1: HDMI-A-1 model: V505-J09 built: 2021 res: mode: 1920x1080
hz: 60 scale: 100% (1) dpi: 89 gamma: 1.2 size: 1096x616mm (43.15x24.25")
diag: 1257mm (49.5") ratio: 16:9 modes: max: 3840x2160 min: 640x480
API: EGL v: 1.5 hw: drv: nvidia platforms: device: 0 drv: nvidia device: 2
drv: swrast gbm: drv: nvidia surfaceless: drv: nvidia wayland: drv: nvidia
x11: drv: nvidia inactive: device-1
API: OpenGL v: 4.6.0 compat-v: 4.5 vendor: nvidia mesa v: 575.64
glx-v: 1.4 direct-render: yes renderer: NVIDIA GeForce RTX 2080
SUPER/PCIe/SSE2 memory: 7.81 GiB display-ID: :1.0
API: Vulkan v: 1.4.313 layers: 7 device: 0 type: discrete-gpu name: NVIDIA
GeForce RTX 2080 SUPER driver: nvidia v: 575.64 device-ID: 10de:1e81
surfaces: N/A device: 1 type: cpu name: llvmpipe (LLVM 20.1.6 256 bits)
driver: mesa llvmpipe v: 25.1.4-arch1.1 (LLVM 20.1.6)
device-ID: 10005:0000 surfaces: N/A
Info: Tools: api: clinfo, eglinfo, glxinfo, vulkaninfo
de: kscreen-console,kscreen-doctor gpu: nvidia-settings,nvidia-smi
wl: wayland-info x11: xdpyinfo, xprop, xrandr
Audio:
Device-1: NVIDIA TU104 HD Audio vendor: ASUSTeK driver: snd_hda_intel
v: kernel pcie: gen: 3 speed: 8 GT/s lanes: 16 bus-ID: 2d:00.1
chip-ID: 10de:10f8 class-ID: 0403
Device-2: Advanced Micro Devices [AMD] Starship/Matisse HD Audio
vendor: Micro-Star MSI driver: snd_hda_intel v: kernel pcie: gen: 4
speed: 16 GT/s lanes: 16 bus-ID: 2f:00.4 chip-ID: 1022:1487 class-ID: 0403
Device-3: Sunplus Innovation Depstech webcam MIC
driver: snd-usb-audio,uvcvideo type: USB rev: 2.0 speed: 480 Mb/s lanes: 1
mode: 2.0 bus-ID: 1-2:2 chip-ID: 1bcf:28c4 class-ID: 0102 serial: <filter>
Device-4: Beibinghe driver: hid-generic,snd-usb-audio,usbhid type: USB
rev: 1.1 speed: 12 Mb/s lanes: 1 mode: 1.1 bus-ID: 3-3:2 chip-ID: 3206:0861
class-ID: 0300 serial: <filter>
API: ALSA v: k6.15.3-zen1-1-zen status: kernel-api tools: N/A
Server-1: PipeWire v: 1.4.5 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
Network:
Device-1: Intel I211 Gigabit Network vendor: Micro-Star MSI driver: igb
v: kernel pcie: gen: 1 speed: 2.5 GT/s lanes: 1 port: e000 bus-ID: 26:00.0
chip-ID: 8086:1539 class-ID: 0200
IF: enp38s0 state: down mac: <filter>
Device-2: Realtek RTL8125 2.5GbE vendor: Micro-Star MSI driver: r8169
v: kernel pcie: gen: 2 speed: 5 GT/s lanes: 1 port: d000 bus-ID: 27:00.0
chip-ID: 10ec:8125 class-ID: 0200
IF: enp39s0 state: up speed: 1000 Mbps duplex: full mac: <filter>
Device-3: Intel Wi-Fi 6 AX200 driver: iwlwifi v: kernel pcie: gen: 2
speed: 5 GT/s lanes: 1 bus-ID: 28:00.0 chip-ID: 8086:2723 class-ID: 0280
IF: wlo1 state: down mac: <filter>
Info: services: NetworkManager, systemd-timesyncd, wpa_supplicant
Bluetooth:
Device-1: Intel AX200 Bluetooth driver: btusb v: 0.8 type: USB rev: 2.0
speed: 12 Mb/s lanes: 1 mode: 1.1 bus-ID: 1-4:3 chip-ID: 8087:0029
class-ID: e001
Report: btmgmt ID: hci0 rfk-id: 0 state: up address: N/A
Drives:
Local Storage: total: 2.79 TiB used: 0 KiB (0.0%)
SMART Message: Unable to run smartctl. Root privileges required.
ID-1: /dev/nvme0n1 maj-min: 259:0 vendor: Sabrent model: Rocket 4.0 1TB
size: 931.51 GiB block-size: physical: 512 B logical: 512 B speed: 63.2 Gb/s
lanes: 4 tech: SSD serial: <filter> fw-rev: RKT401.1 temp: 34.9 C
scheme: GPT
ID-2: /dev/nvme1n1 maj-min: 259:2 vendor: Seagate
model: WDS200T1X0E-00AFY0 size: 1.82 TiB block-size: physical: 512 B
logical: 512 B speed: 63.2 Gb/s lanes: 4 tech: SSD serial: <filter>
fw-rev: 611100WD temp: 33.9 C scheme: GPT
ID-3: /dev/sda maj-min: 8:0 vendor: Verbatim model: STORE N GO
size: 58.2 GiB block-size: physical: 512 B logical: 512 B type: USB rev: 3.1
spd: 5 Gb/s lanes: 1 mode: 3.2 gen-1x1 tech: N/A serial: <filter>
fw-rev: 1100 scheme: MBR
SMART Message: Unknown USB bridge. Flash drive/Unsupported enclosure?
Partition:
Message: No partition data found.
Swap:
Kernel: swappiness: 133 (default 60) cache-pressure: 100 (default) zswap: no
ID-1: swap-1 type: zram size: 31.25 GiB used: 0 KiB (0.0%) priority: 100
comp: zstd avail: lzo-rle,lzo,lz4,lz4hc,deflate,842 dev: /dev/zram0
Sensors:
System Temperatures: cpu: 37.5 C mobo: 29.9 C
Fan Speeds (rpm): N/A
Info:
Memory: total: 32 GiB available: 31.25 GiB used: 5.43 GiB (17.4%)
Processes: 427 Power: uptime: 19m states: freeze,mem,disk suspend: deep
avail: s2idle wakeups: 0 hibernate: platform avail: shutdown, reboot,
suspend, test_resume image: 12.47 GiB services: org_kde_powerdevil,
power-profiles-daemon, upowerd Init: systemd v: 257 default: graphical
tool: systemctl
Packages: pm: pacman pkgs: 1254 libs: 311 tools: octopi,paru Compilers:
gcc: 15.1.1 Shell: garuda-inxi default: fish v: 4.0.2 running-in: konsole
inxi: 3.3.38
warning: database file for 'garuda' does not exist (use '-Sy' to download)
warning: database file for 'core' does not exist (use '-Sy' to download)
warning: database file for 'extra' does not exist (use '-Sy' to download)
warning: database file for 'multilib' does not exist (use '-Sy' to download)
warning: database file for 'chaotic-aur' does not exist (use '-Sy' to download)
Garuda (2.7.2-1):
System install date:     2025-06-26
Last full system update: 2025-06-26 ↻
Is partially upgraded:   No
Relevant software:       snapper NetworkManager dracut
Windows dual boot:       <superuser required>
Failed units:            snapper-cleanup.service
3 Likes

What about normal mode/without grub2 mode? I never understood why we needed grub2 mode honestly.

1 Like

Ventoy doesn’t work without it anymore since a while.

It’s always worked fine for me, even last release. I’ve actually used ventoy to test this very ISO myself actually. Normal mode.

1 Like

Well there are countless examples of not booting systems which were booting on grub2 mode. We even added it to recommendations on the download page due to that.

That’s good and all, but without being able to reproduce it, I can’t exactly fix it

I’ve never understood why it was necessary at all honestly

1 Like

Hmm. I’m hoping this is one of the issues that magically fixes itself in the new ISO release haha.

@dr460nf1r3 would you be okay with me global pinning this for a while so I can get some attention to it? I’m impatient, I know, but I’d hate to have a poorly implemented script ruin an ISO refresh :stuck_out_tongue:

4 Likes

Sure! Need to take it out of that category in this case however, iirc it’s TL3 only.

I changed it to allow TL1 and above to comment here. This is publicly readable (without an account) as well. More participation in development stuff is always good for transparency!

4 Likes

At the moment not possible to install.

[đź”´] Ă— sudo pacman -S garuda-hardware-tool
Abhängigkeiten werden aufgelöst …
Nach in Konflikt stehenden Paketen wird gesucht …

Paket (1)                    Neue Version  Netto-Veränderung  Größe des Downloads

garuda/garuda-hardware-tool  0.1.2-1                0,00 MiB             0,00 MiB

Gesamtgröße des Downloads:             0,00 MiB
Gesamtgröße der installierten Pakete:  0,00 MiB

:: Installation fortsetzen? [J/n] j
:: Pakete werden empfangen …
garuda-hardware-tool-0.1.2-1-x86_64.pkg.tar.zst konnte nicht heruntergeladen werden
Fehler: Konnte Datei 'garuda-hardware-tool-0.1.2-1-x86_64.pkg.tar.zst' nicht von cdn-mirror.chaotic.cx ĂĽbertragen : The requested URL returned error: 404
Fehler: Konnte Datei 'garuda-hardware-tool-0.1.2-1-x86_64.pkg.tar.zst' nicht von geo-mirror.chaotic.cx ĂĽbertragen : The requested URL returned error: 404
Fehler: Konnte Datei 'garuda-hardware-tool-0.1.2-1-x86_64.pkg.tar.zst' nicht von de-2-mirror.chaotic.cx ĂĽbertragen : The requested URL returned error: 404
Fehler: Konnte Datei 'garuda-hardware-tool-0.1.2-1-x86_64.pkg.tar.zst' nicht von de-4-mirror.chaotic.cx ĂĽbertragen : The requested URL returned error: 404
Fehler: Konnte Datei 'garuda-hardware-tool-0.1.2-1-x86_64.pkg.tar.zst' nicht von fr-mirror.chaotic.cx ĂĽbertragen : The requested URL returned error: 404
Fehler: Konnte Datei 'garuda-hardware-tool-0.1.2-1-x86_64.pkg.tar.zst' nicht von es-mirror.chaotic.cx ĂĽbertragen : The requested URL returned error: 404
Warnung: Konnte einige Dateien nicht ĂĽbertragen
Fehler: Der Vorgang konnte nicht durchgefĂĽhrt werden (Konnte manche Dateien nicht ĂĽbertragen)
Fehler sind aufgetreten, keine Pakete wurden aktualisiert.

You’ll have to update your pacman database.

garuda-update
1 Like

Right, last update was yesterday :innocent:

I’ve just tested normal mode twice with USB being Ventoy version 1.0.98 and the latest 1.1.05 ; no issues to report there. Seems the same as doing Grub 2 for me.

1 Like

Oh, up to date iso, me like, time to test it out. I have a question about this garuda-hardware-tool, do you need to run it again after it gets updated, like for example garuda-hadware-tool --nonfree ?

No. You would only have to do that if new hardware profile are added. Updates to existing hardware profiles are rolled out via the package manager. (which is one of the major advantages of this compared to MHWD)

3 Likes

Seems garuda rani is not launching with this new garuda mokka iso

Can you post the terminal output when you try to run Rani from the terminal?