Skip to content

Garuda Hardware Tool

Garuda Hardware Tool (garuda-hardware-tool) is a shell script that finds the graphics cards of your system and installs the matching hardware profile packages. It replaces the older MHWD tool. The tool has no window. It runs in a terminal, and garuda-health suggests it when the NVIDIA driver is missing.

It is for anyone who installs or repairs the graphics drivers of a Garuda Linux system. The NVIDIA profiles need the --nonfree option. The tool does not install drivers for other hardware classes.

The package has no menu entry. Start it from a terminal.

Terminal window
sudo garuda-hardware-tool --nonfree

The tool must run as root, except with --check. Without --nonfree or --free it prints its usage and exits.

PackageNotes
garuda-hardware-toolFrom pkgbuilds/garuda-hardware-tool, version 1.2.1 in the PKGBUILD. Depends on pciutils, coreutils and grep. It installs /usr/bin/garuda-hardware-tool.
garuda-hardware-profilesFrom pkgbuilds/garuda-hardware-profiles, version 2.0.1 release 3. It is a split package with the five profiles described below.

The PKGBUILD of garuda-hardware-tool replaces mhwd-garuda, mhwd-garuda-git, mhwd-amdgpu, mhwd-ati, mhwd-nvidia, mhwd-nvidia-390xx, mhwd-nvidia-470xx, mhwd-db-garuda, and mhwd-db-garuda-git. Its comment reads Replaces all of MHWD.

OptionEffect
--nonfreeInstall the NVIDIA profile that fits the detected card. Needed for NVIDIA drivers.
--freeInstall open source profiles only. NVIDIA cards are skipped with a message.
--noconfirmPass --noconfirm to pacman.
--checkPrint the profile packages that are missing, without installing them. Runs without root.
--syncRun pacman -Sy before the install.
--pacmanconfig <file>Pass a pacman configuration file with --config.
--help, -hPrint the usage.

garuda-health runs garuda-hardware-tool --nonfree --check to decide whether it reports a missing profile (garuda-health, function that checks the drivers).

The tool reads the PCI devices of class 03xx with lspci. It then applies these rules.

ConditionResult
/usr/bin/Xorg existsBase profile garuda-hardware-profile-standard-x11. Otherwise garuda-hardware-profile-standard.
systemd-detect-virt -q succeedsAdds garuda-hardware-profile-vm.
NVIDIA card with chip family GV, GP or GMWith --nonfree, adds garuda-hardware-profile-nvidia-580xx.
NVIDIA card with any other chip family except GT, GF and GKWith --nonfree, adds garuda-hardware-profile-nvidia.
NVIDIA card with chip family GT, GF or GKNo NVIDIA profile. The script comment says Older than Maxwell, no support.

The packages that are not installed yet are passed to pacman --needed -S. Packages that are already installed are skipped.

PackageWhen it is selectedMain dependencies (from the PKGBUILD)
garuda-hardware-profile-standardAlways, as the base for every profileMesa and Intel drivers, Vulkan and VA-API drivers, with their 32-bit versions
garuda-hardware-profile-standard-x11Always on systems with Xorggaruda-hardware-profile-standard, xf86-video-ati, xf86-video-amdgpu, xf86-video-nouveau
garuda-hardware-profile-vmVirtual machinegaruda-hardware-profile-standard, xf86-video-fbdev, virtualbox-guest-utils, open-vm-tools, xf86-input-vmmouse, spice-vdagent, qemu-guest-agent, gtkmm3
garuda-hardware-profile-nvidiaNVIDIA card, not GV, GP, GM, GT, GF or GK, with --nonfreegaruda-hardware-profile-standard, egl-wayland, nvidia-utils>=590, opencl-nvidia>=590, nvidia-open-dkms>=590, nvidia-prime and 32-bit versions
garuda-hardware-profile-nvidia-580xxNVIDIA card in the GV, GP or GM families, with --nonfreegaruda-hardware-profile-standard, egl-wayland, nvidia-580xx-utils, opencl-nvidia-580xx, nvidia-580xx-dkms, nvidia-prime and 32-bit versions

The two NVIDIA profiles conflict with each other. Both provide GARUDA-HARDWARE-PROFILE-NVIDIA.

PathInstalled by
/usr/lib/modules-load.d/garuda-nvidia.confNVIDIA profiles
/usr/lib/modprobe.d/garuda-nvidia.confNVIDIA profiles
/usr/lib/modprobe.d/garuda-nvidia-prime-powersaving.confNVIDIA profiles
/usr/lib/udev/rules.d/90-nvidia-prime-powermanagement.rulesNVIDIA profiles
/usr/lib/systemd/system/garuda-nvidia-live.serviceNVIDIA profiles, linked into ght-live.target.wants
/usr/lib/systemd/system/garuda-virtualmachine-guest-config.targetVM profile, enabled by its install script and linked into ght-live.target.wants
/usr/lib/systemd/system/garuda-virtualbox-live.serviceVM profile, linked into ght-live.target.wants

The profiles load the NVIDIA modules and start the VM services automatically in a live session. The changelog entry for garuda-hardware-profiles says Load nvidia modules and virtualmachine services automatically when in live session.

The modern profiles replace the MHWD packages. The replaces and provides arrays of garuda-hardware-profiles define the mapping.

Old packageNew packageNote
garuda-video-linux-configgaruda-hardware-profile-standard-x11The x11 profile is the default because the installed drivers are unknown.
garuda-virtualmachine-guest-configgaruda-hardware-profile-vm
garuda-nvidia-config, garuda-nvidia-prime-config, garuda-hardware-profile-nvidia-primegaruda-hardware-profile-nvidia
garuda-hardware-profile-nvidia-closed, garuda-hardware-profile-nvidia-prime-closedgaruda-hardware-profile-nvidia-580xxThe closed packages map to the 580xx profile, not to the modern NVIDIA profile.
mhwd-nvidia-470xxNoneListed only in the replaces array of garuda-hardware-tool. No profile exists for it.

The 470xx NVIDIA driver has no conversion. The tool does not detect cards that need it, and no profile package provides it.

WhatPathNotes
Tool/usr/bin/garuda-hardware-toolThe script itself.
Update notice library/usr/lib/garuda/garuda.shlibSourced by the install file to add an update notice (garudalib_add_update_notice).
Tool logNoneThe tool prints to the terminal only (print_log, print_error).
Package manager log/var/log/pacman.logUNCONFIRMED for this tool. The code only calls pacman, the log path is the pacman default.

The tool writes no configuration file of its own. The profiles write the files listed above.

  • Kepler, Fermi and Tesla NVIDIA cards (GK, GF, GT) get no profile (garuda-hardware-tool, detection code).
  • The --check mode prints the packages that would be installed and installs nothing (garuda-hardware-tool, CHECK_ONLY).
  • The post_upgrade notice names garuda-hardware-profiles-nvidia-closed. The profile package in the PKGBUILD is garuda-hardware-profile-nvidia-closed, and it is replaced by garuda-hardware-profile-nvidia-580xx (garuda-hardware-tool.install, garuda-hardware-profiles PKGBUILD).
  • The post_upgrade notice tells users to run sudo garuda-hardware-tool --nonfree after they remove the closed profile. The notice is shown only for upgrades older than 1.2.0-2 (garuda-hardware-tool.install).
  • The MHWD packages are not shipped anymore. The changelog entry Remove garuda-settings-manager, mhwd. Replace with garuda-hardware-tool and garuda-hardware-profiles. marks the change (changelogs/Past changelogs/260819.md).
  1. Check which profile packages are missing. Run garuda-hardware-tool --nonfree --check. The tool prints the missing packages and installs nothing.
  2. Install the missing profiles as root. Run sudo garuda-hardware-tool --nonfree. Use --free instead on a system where you do not want proprietary drivers.
  3. Read the output for the detected GPU lines. Each detected card prints its PCI ID and vendor ID.