Tools: Latest: Setting Up Dual GPU Gaming Laptops in Hyprland

Tools: Latest: Setting Up Dual GPU Gaming Laptops in Hyprland

Step 1: Set the iGPU as primary

Step 2: Fix hardware video decoding

Step 3: Switch between Hybrid and Integrated mode Gaming laptops with dual GPUs are common, and they are a pain on Linux. I run an ASUS Zephyrus G15 with an AMD integrated GPU and an NVIDIA discrete GPU. Before I fixed the setup, I dealt with broken resume from suspend, terrible battery life, overheating, and games that ran worse than they should. This is a practical guide for setting up dual GPU systems in Hyprland. Most of it applies to other Wayland compositors too. Hyprland uses the AQ_DRM_DEVICES environment variable to decide which GPU drives the display. You want the iGPU first for power efficiency and better Linux compatibility. First, find your GPUs: My output shows an RTX 3060 at 01:00.0 and an AMD Vega at 06:00.0. Create udev rules to symlink these to friendly names: /etc/udev/rules.d/igpu-device-path.rules: /etc/udev/rules.d/dgpu-device-path.rules: Then tell Hyprland to prefer the iGPU: Without hardware decoding, video playback burns CPU, drains battery, and stutters at high resolution. Check if your system already supports it: If vainfo fails or picks the wrong GPU, set the driver explicitly. For AMD, add to hyprland.conf: Common driver names: NVIDIA uses nvidia, AMD uses radeonsi, Intel uses i965 or iHD. For gaming, you want both GPUs active. For battery life, you want the dGPU completely off. That covers the essentials. I wrote a longer post with full hyprland.conf snippets, troubleshooting tips for NVIDIA-specific quirks, and screenshots of the setup: How to Setup Dual GPU Systems in Hyprland. Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse

Command

Copy

$ lspci -d ::03xx lspci -d ::03xx lspci -d ::03xx KERNEL=="card*", KERNELS=="0000:06:00.0", SUBSYSTEM=="drm", SUBSYSTEMS=="pci", SYMLINK+="dri/amd-igpu" KERNEL=="card*", KERNELS=="0000:06:00.0", SUBSYSTEM=="drm", SUBSYSTEMS=="pci", SYMLINK+="dri/amd-igpu" KERNEL=="card*", KERNELS=="0000:06:00.0", SUBSYSTEM=="drm", SUBSYSTEMS=="pci", SYMLINK+="dri/amd-igpu" KERNEL=="card*", KERNELS=="0000:01:00.0", SUBSYSTEM=="drm", SUBSYSTEMS=="pci", SYMLINK+="dri/nvidia-dgpu" KERNEL=="card*", KERNELS=="0000:01:00.0", SUBSYSTEM=="drm", SUBSYSTEMS=="pci", SYMLINK+="dri/nvidia-dgpu" KERNEL=="card*", KERNELS=="0000:01:00.0", SUBSYSTEM=="drm", SUBSYSTEMS=="pci", SYMLINK+="dri/nvidia-dgpu" -weight: 600;">sudo udevadm control --reload-rules -weight: 600;">sudo udevadm trigger -weight: 600;">sudo udevadm control --reload-rules -weight: 600;">sudo udevadm trigger -weight: 600;">sudo udevadm control --reload-rules -weight: 600;">sudo udevadm trigger env = AQ_DRM_DEVICES, /dev/dri/amd-igpu:/dev/dri/nvidia-dgpu env = AQ_DRM_DEVICES, /dev/dri/amd-igpu:/dev/dri/nvidia-dgpu env = AQ_DRM_DEVICES, /dev/dri/amd-igpu:/dev/dri/nvidia-dgpu -weight: 600;">sudo -weight: 500;">pacman -S libva-utils vainfo -weight: 600;">sudo -weight: 500;">pacman -S libva-utils vainfo -weight: 600;">sudo -weight: 500;">pacman -S libva-utils vainfo env = LIBVA_DRIVER_NAME, radeonsi env = LIBVA_DRIVER_NAME, radeonsi env = LIBVA_DRIVER_NAME, radeonsi -weight: 600;">sudo -weight: 500;">pacman -S supergfxctl supergfxctl -s # list supported modes supergfxctl -g # check current mode supergfxctl -m Integrated # iGPU only, saves battery supergfxctl -m Hybrid # both GPUs, for gaming -weight: 600;">sudo -weight: 500;">pacman -S supergfxctl supergfxctl -s # list supported modes supergfxctl -g # check current mode supergfxctl -m Integrated # iGPU only, saves battery supergfxctl -m Hybrid # both GPUs, for gaming -weight: 600;">sudo -weight: 500;">pacman -S supergfxctl supergfxctl -s # list supported modes supergfxctl -g # check current mode supergfxctl -m Integrated # iGPU only, saves battery supergfxctl -m Hybrid # both GPUs, for gaming