You are not logged in.
Hi!
I own a 2021 ASUS Zephyrus G14 (GA401QH), which has both an AMD integrated graphics card & a discrete NVIDIA GeForce GTX 1650 graphics card.
My goal for the past week has been to finally utilize my laptop’s NVIDIA GPU on my Arch OS with Wayland & GNOME 48. And here are the steps I've taken:
1. Installed nvidia-open-dkms & its complimentary packages via pacman (as seen on this Arch guide)
sudo pacman -S nvidia-open-dkms nvidia-settings nvidia-utils
2. Verified that Y is returned to verify NVIDIA DRM is enabled from here:
https://wiki.archlinux.org/title/NVIDIA … de_setting
3. Loaded early these NVIDIA modules in /etc/mkinitcpio.conf based on this Arch article:
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
4. From that same file, I removed kms from initramfs hooks for noveau to never load again, making it the following:
HOOKS=(base udev autodetect microcode modconf keyboard keymap consolefont block filesystems resume fsck)
Now my /etc/mkinitcpio.conf looks like this:
# vim:set ft=sh
# MODULES
# The following modules are loaded before any boot hooks are
# run. Advanced users may wish to specify all system modules
# in this array. For instance:
# MODULES=(usbhid xhci_hcd)
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
# BINARIES
# This setting includes any additional binaries a given user may
# wish into the CPIO image. This is run last, so it may be used to
# override the actual binaries included by a given hook
# BINARIES are dependency parsed, so you may safely ignore libraries
BINARIES=()
# FILES
# This setting is similar to BINARIES above, however, files are added
# as-is and are not parsed in any way. This is useful for config files.
FILES=()
# HOOKS
# This is the most important setting in this file. The HOOKS control the
# modules and scripts added to the image, and what happens at boot time.
# Order is important, and it is recommended that you do not change the
# order in which HOOKS are added. Run 'mkinitcpio -H <hook name>' for
# help on a given hook.
# 'base' is _required_ unless you know precisely what you are doing.
# 'udev' is _required_ in order to automatically load modules
# 'filesystems' is _required_ unless you specify your fs modules in MODULES
# Examples:
## This setup specifies all modules in the MODULES setting above.
## No RAID, lvm2, or encrypted root is needed.
# HOOKS=(base)
#
## This setup will autodetect all modules for your system and should
## work as a sane default
# HOOKS=(base udev autodetect modconf block filesystems fsck)
#
## This setup will generate a 'full' image which supports most systems.
## No autodetection is done.
# HOOKS=(base udev modconf block filesystems fsck)
#
## This setup assembles a mdadm array with an encrypted root file system.
## Note: See 'mkinitcpio -H mdadm_udev' for more information on RAID devices.
# HOOKS=(base udev modconf keyboard keymap consolefont block mdadm_udev encrypt filesystems fsck)
#
## This setup loads an lvm2 volume group.
# HOOKS=(base udev modconf block lvm2 filesystems fsck)
#
## This will create a systemd based initramfs which loads an encrypted root filesystem.
# HOOKS=(base systemd autodetect modconf kms keyboard sd-vconsole sd-encrypt block filesystems fsck)
#
## NOTE: If you have /usr on a separate partition, you MUST include the
# usr and fsck hooks.
#HOOKS=(base udev autodetect microcode modconf keyboard keymap consolefont block filesystems fsck)
HOOKS=(base udev autodetect microcode modconf keyboard keymap consolefont block filesystems resume fsck)
#HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block filesystems resume fsck)
# COMPRESSION
# Use this to compress the initramfs image. By default, zstd compression
# is used for Linux ≥ 5.9 and gzip compression is used for Linux < 5.9.
# Use 'cat' to create an uncompressed image.
#COMPRESSION="zstd"
#COMPRESSION="gzip"
#COMPRESSION="bzip2"
#COMPRESSION="lzma"
#COMPRESSION="xz"
#COMPRESSION="lzop"
#COMPRESSION="lz4"
# COMPRESSION_OPTIONS
# Additional options for the compressor
#COMPRESSION_OPTIONS=()
# MODULES_DECOMPRESS
# Decompress loadable kernel modules and their firmware during initramfs
# creation. Switch (yes/no).
# Enable to allow further decreasing image size when using high compression
# (e.g. xz -9e or zstd --long --ultra -22) at the expense of increased RAM usage
# at early boot.
# Note that any compressed files will be placed in the uncompressed early CPIO
# to avoid double compression.
#MODULES_DECOMPRESS="no"
5. Installed the following packages to enable NVIDIA hardware video acceleration from this Arch guide:
sudo pacman -S mesa libva-nvidia-driver
-----
After regenerating my initramfs & rebooting, everything had gone very smoothly… Until I tried hibernating with systemctl hibernate, from which I started getting 2 specific errors when entering that state:
nvidia-modeset: ERROR: GPU:0: Failed to determine display capabilities
nvidia-modeset: ERROR: GPU:0: Failed to tear down Disp
(For context: I run a 24GB swap partition for my Arch install, corresponding to the 24GB RAM installed on my laptop, and I regularly hibernate my device when not in use & to return to my previous quickly upon each boot, hence I have a resume hook on my mkinitcpio.conf.)
Thus, I tried the following steps to hopefully resolve my issue:
1. From the ASUS Linux Arch package repo, I installed a dedicated kernel for the Zephyrus G14 with the following:
sudo pacman -S linux-g14 linux-g14-headers
2. I moved on to following this Arch guide to have NVIDIA support suspend or hibernate states
- https://wiki.archlinux.org/title/NVIDIA#Suspend_support
- https://wiki.archlinux.org/title/GDM#Wa … DIA_driver (though I only use nvidia-open-dkms & use GNOME 48 & later versions after this post has been published)
- https://wiki.archlinux.org/title/NVIDIA … om_suspend
After the following, my systemd-boot entry with the G14 kernel looks like this:
title Arch Linux (G14 Mod)
linux /EFI/arch_linux/vmlinuz-linux-g14
initrd /EFI/arch_linux/amd-ucode.img
initrd /EFI/arch_linux/initramfs-linux-g14.img
options root=UUID=uuid_of_root_partition rw resume=UUID=uuid_of_swap_partition NVreg_PreserveVideoMemoryAllocations=1 acpi_osi="Windows 2015"
------
After regenerating my initramfs & rebooting, everything had gone very smoothly… Until I tried hibernating with systemctl hibernate AGAIN! This time a slew of errors emerged, from which I haven’t been able to resolve myself. It’ll be great if anyone here can help me.
I’ve attached here the latest journal txt file from my previous boot (when all those errors emerged) for you to have a closer look, and hopefully take a better look on my laptop’s behavior.
(Link here to my Proton Drive for the log file as Pastebin finds the journal txt file of 193MB to be too large to be uploaded)
Thanks again in advance to those who've helped! (I pray.)
Last edited by ryanbarillos (2025-06-04 04:04:23)
Offline
P.S.: I've also tried installing nvidia-dkms to see if my issue persists, and it still does!
Offline