diff --git a/pages/Nvidia/_index.md b/pages/Nvidia/_index.md index 23689b5..d715d38 100644 --- a/pages/Nvidia/_index.md +++ b/pages/Nvidia/_index.md @@ -5,8 +5,8 @@ title: NVidia # Foreword -There is no _official_ Hyprland support for Nvidia hardware. However, you might -make it work properly following this page. +There is no _official_ Hyprland support for Nvidia hardware. However, many people +have had success with the instructions on this page. You can choose between the proprietary [Nvidia drivers](https://wiki.archlinux.org/title/NVIDIA) or the open source @@ -15,66 +15,83 @@ proprietary Nvidia drivers category, there are 3 of them: the current driver named 'nvidia' (or 'nvidia-dkms' to use with custom linux kernels) which is under active development, the legacy drivers 'nvidia-3xxxx' for older cards which Nvidia no longer actively supports, and the 'nvidia-open' driver which is -currently an alpha stage attempt to open source a part of their close source +currently an alpha stage attempt to open source a part of their closed source driver for newer cards. -You may want to use the proprietary Nvidia drivers in some cases, for example: -if you have a new Nvidia GPU model, if you want more performance, if you want to -play video games, if you need a wider feature set (for example, better power -consumption on recent GPUs), etc. However, keep in mind that if the proprietary -Nvidia drivers do not work properly on your computer, the Nouveau driver might -work fine while not having as much features or performance. For -[older cards](https://wiki.archlinux.org/title/NVIDIA#Unsupported_drivers), in -order to use Hyprland, you will probably need to use the Nouveau driver which -actively supports them. +If your card is supported by the proprietary nvidia drivers, there is a very +high chance that you will most likely want to use those. Benefits include but +are not limited to: -Below are some tips to try to make the proprietary Nvidia driver work with -Hyprland properly: +- (Much) better gaming performance +- Better power management on recent GPUs -## How to get Hyprland to possibly work on Nvidia +However, keep in mind that if the proprietary Nvidia drivers do not work +properly on your computer, the Nouveau driver might work fine. This will +most likely be the case for +[older cards](https://wiki.archlinux.org/title/NVIDIA#Unsupported_drivers) + +## How to get Hyprland to possibly run on Nvidia (Proprietary) + +Install the correct headers package for your current kernel. For the example of +the `linux-zen` kernel on Arch Linux, this package would be `linux-zen-headers`. + +Install the required nvidia packages. For most cases, this would be `nvidia-dkms` +(or `nvidia-open-dkms` for the open source ones), +and `nvidia-utils`. If you'd like to game via Wine or even natively, it would be +in your best interest to also install `lib32-nvidia-utils`. + +{{< callout >}} + +Even if your GPU is listed as supported by the `nvidia-open-dkms` driver, at this +point in time, it is still not up to feature parity with the proprietary drivers. +One issue with the open drivers is that it could cause problems with suspend in +general, let that be closing the lid on your laptop or by manually triggering one. +Overall, you'd be better off with `nvidia-dkms` right now, but Hyprland should work +similarly between the two. + +{{< /callout >}} + +Next up, you need to enable modeset for nvidia, this can be done via editing +the kernel paramaters for your bootloader. -Install the `nvidia-dkms` driver and add it to your initramfs & kernel -parameters.\ For people using [systemd-boot](https://wiki.archlinux.org/title/systemd-boot) -you can do this adding `nvidia_drm.modeset=1` to the end of -`/boot/loader/entries/arch.conf`. For people using -[grub](https://wiki.archlinux.org/title/GRUB) you can do this by adding +you can do this by adding `nvidia_drm.modeset=1` to the end of +`/boot/loader/entries/arch.conf`. + +For people using +[GRUB](https://wiki.archlinux.org/title/GRUB) you can do this by adding `nvidia_drm.modeset=1` to the end of `GRUB_CMDLINE_LINUX_DEFAULT=` in -`/etc/default/grub`, then run `# grub-mkconfig -o /boot/grub/grub.cfg` For -others check out +`/etc/default/grub`, then running `sudo grub-mkconfig -o /boot/grub/grub.cfg`. + +For others check out [kernel parameters](https://wiki.archlinux.org/title/Kernel_parameters) and how to add `nvidia_drm.modeset=1` to your specific bootloader. +{{< callout >}} + +There has been a lot of debate on which of `nvidia_drm` or `nvidia-drm` +is correct for this kernel parameter. It has been confirmed that either +of these will work. + +{{< /callout >}} + in `/etc/mkinitcpio.conf` add `nvidia nvidia_modeset nvidia_uvm nvidia_drm` to your `MODULES` -run -`# mkinitcpio --config /etc/mkinitcpio.conf --generate /boot/initramfs-custom.img` -(make sure you have the `linux-headers` package installed first) +For example, a clean `MODULES` line would now look like this: +```sh +MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm) +``` -add a new line to `/etc/modprobe.d/nvidia.conf` (make it if it does not exist) -and add the line `options nvidia-drm modeset=1` +Now, run `sudo mkinitcpio -P`. This will regenerate the initcpios for all kernels +currently installed on the system. If you see any errors here about missing +nvidia modules, it is highly probable that you forgot to install the correct +headers package. Make sure you install the headers package for your kernel and +run this command again. More information is available here: [https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting](https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting) -{{< callout >}} - -If your GPU is listed as supported by the `nvidia-open-dkms` driver, use that -one instead. Note that on a laptop, it could cause problems with the suspended -state when closing the lid, so you might be better off with `nvidia-dkms`. - -{{< /callout >}} - -{{< callout >}} - -To get multi monitor to work properly on a hybrid graphics device (a laptop with -both an Intel and an Nvidia GPU), you will need to remove the `optimus-manager` -package if installed (disabling the service does not work). You also need to -change your BIOS settings from hybrid graphics to discrete graphics. - -{{< /callout >}} - Export these variables in your hyprland config: ```sh @@ -85,38 +102,142 @@ env = __GLX_VENDOR_LIBRARY_NAME,nvidia env = WLR_NO_HARDWARE_CURSORS,1 ``` -{{< callout >}} +Lastly, you also need to install a few packages to get some apps +to function natively with Wayland. Have a look at [the Master Tutorial](https://wiki.hyprland.org/Getting-Started/Master-Tutorial/#force-apps-to-use-wayland). -If you encounter crashes in Firefox, remove the line -`env = GBM_BACKEND,nvidia-drm`. - -{{< /callout >}} - -{{< callout >}} - -If you face problems with Discord windows not displaying or screen sharing not -working in Zoom, remove or comment the line -`env = __GLX_VENDOR_LIBRARY_NAME,nvidia`. - -{{< /callout >}} - -Install `qt5-wayland`, `qt5ct` and `libva`. Additionally -`libva-nvidia-driver-git` (AUR) to fix crashes in some Electron-based -applications, such as Unity Hub. - -Reboot your computer +Reboot your computer. Launch Hyprland. It _should_ work now. -## Fixing random flickering, (nuclear method) +## VA-API hardware video acceleration -Do note though that this forces performance mode to be active, resulting in -increased power-consumption (from 22W idle on a RTX 3070TI, to 74W). +We can achieve VA-API acceleration on Nvidia and Wayland with the help of the +[nvidia-vaapi-driver](https://github.com/elFarto/nvidia-vaapi-driver). This may +solve certain issues in Electron apps, and it will also allow for GPU decoding +for videos on the web, with benefits including higher performance video playback +and also higher power efficiency during video playback. -This may not even be needed for some users, only apply these 'fixes' if you -in-fact do notice flickering artifacts from being idle for ~5 seconds. +Its install instructions are available in the README, however, a quick guide will +be given here: + +- Install the package. On Arch, this is `libva-nvidia-driver` in the official + repos. + +- export this variable in your hyprland config: + ```sh + env = NVD_BACKEND,direct + ``` + see [here](https://github.com/elFarto/nvidia-vaapi-driver?tab=readme-ov-file#upstream-regressions) + for more information on this environment variable. + +- Enable the services `nvidia-suspend.service`, `nvidia-hibernate.service` and +`nvidia-resume.service` + +- Add `nvidia.NVreg_PreserveVideoMemoryAllocations=1` to your kernel parameters if +you don't have it already. This will solve issues with corrupted desktop / videos +after waking. + +- You can check the README to get it working for Firefox. + +## Other issues to look out for + +### Regarding environment variables + +- If you encounter crashes in Firefox, remove the line +`env = GBM_BACKEND,nvidia-drm`. + +- If you face problems with Discord windows not displaying or screen sharing not +working in Zoom, first try running them in Native Wayland (more details below). +Otherwise, remove or comment the line +`env = __GLX_VENDOR_LIBRARY_NAME,nvidia`. + +### How to possibly get multi-monitor working with hybrid graphics + +On a hybrid graphics device (a laptop with +both an Intel and an Nvidia GPU), you will need to remove the `optimus-manager` +package if installed (disabling the service does not work). You also need to +change your BIOS settings from hybrid graphics to discrete graphics. + +### Fixing flickering in Electron / CEF apps + +This flickering is likely caused by these apps running in XWayland. +To fix the flickering, try running the apps with native Wayland instead. + +For most Electron apps, you should be fine just adding this +environment variable to your config: + +```sh +env = ELECTRON_OZONE_PLATFORM_HINT,auto +``` + +This has been confirmed to work on Vesktop, VSCodium and Obsidian and will probably +work on other Electron apps as well. + +For other apps, including CEF apps, you will need to launch them with these flags: + +```sh +--enable-features=UseOzonePlatform --ozone-platform=wayland +``` + +To do this easily for Spotify, Arch Linux has a `spotify-launcher` packages +in their official repos. You should use that instead of the `spotify` +package in the AUR. Then, enable the Wayland backend in +`/etc/spotify-launcher.conf` by uncommenting this line: + +```sh +extra_arguments = ["--enable-features=UseOzonePlatform", "--ozone-platform=wayland"] +``` + +Some CEF / Electron apps may also have a respective flags file in ~/.config. +For example, for VSCodium, you can add the flags to `~/.config/codium-flags.conf` +and for Obsidian, you can add the flags to `~/.config/obsidian/user-flags.conf`. + +{{< callout >}} + +On earlier Nvidia driver versions, including 535, you may have to also include +the `--disable-gpu` and `--disable-gpu-sandbox` flags, but, as the names suggest, +you will lose hardware acceleration for whichever app is run with these flags. + +{{< /callout >}} + +With NixOS, you can also try setting the `NIXOS_OZONE_WL` environment variable +to `1`, which should automatically configure Electron / CEF apps to run with native +Wayland for you. + +While it is best to have as many things as possible running natively in +wayland, the root cause of the flickering will likely be solved +in the 555 series of nvidia driver updates. + +### Fixing flickering in XWayland games specifically + +The symptoms of this widespread issue include XWayland games flickering in +a way which makes them unplayable. Repeated frames, random presenting of +black frames, and overall weirdness. This is a result of a multitude of +issues which will be solved soon via Nvidia driver updates, but for now +you have a few possible fixes: + +- Install xorg-xwayland-git (AUR). This git package includes this [PR](https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/967) + which implements the "Explicit Sync" protocol. + This will fix it in some, if not all cases. However if it doesn't, + try the next solution. Once the 555 series of drivers are released, this + should completely fix the issue. + +- Install older nvidia drivers which do not exhibit this problem. The + last ones which would work will be the 535xx series of drivers. These + can be installed easily on Arch via [these AUR packages](https://aur.archlinux.org/packages?O=0&K=535xx) + +More info about explicit sync is available +[on this blog](https://planet.kde.org/xavers-blog-2024-04-05-explicit-sync/). + +### Fixing other random flickering (nuclear method) + +Do note that this forces performance mode to be active, resulting in +increased power-consumption (from 22W idle on an RTX 3070TI, to 74W). + +This is probably not needed for most users, so only apply these 'fixes' if +you in-fact do notice flickering artifacts from being idle for ~5 seconds. Make a new file at `/etc/modprobe.d/nvidia.conf` and paste this in: @@ -130,14 +251,10 @@ If it does not, try: - lowering your monitors' refresh rate, as this can stop the flickering altogether -- installing the 535xx versions of the drivers, as later (545, 550) can cause - flickering with XWayland - - these are available for arch via - [the AUR here](https://aur.archlinux.org/packages?O=0&K=535xx) - using the [Nouveau driver](https://wiki.archlinux.org/title/Nouveau) as mentioned above -## Fixing suspend/wakeup issues +### Fixing suspend/wakeup issues Enable the services `nvidia-suspend.service`, `nvidia-hibernate.service` and `nvidia-resume.service`, they will be started by systemd when needed. @@ -147,7 +264,7 @@ you don't have it already. {{< callout >}} -Suspend functions are currently broken on `nvidia-open-dkms` +As previously mentioned, suspend functions are currently broken on `nvidia-open-dkms` [due to a bug](https://github.com/NVIDIA/open-gpu-kernel-modules/issues/472), so make sure you're on `nvidia-dkms`. @@ -165,3 +282,9 @@ hardware.nvidia.powerManagement.enable = true; # Making sure to use the proprietary drivers until the issue above is fixed upstream hardware.nvidia.open = false; ``` + +## Still having issues? + +If you're still having issues after following this guide, you can join the +[Hyprland Discord](https://discord.gg/hypr) and ask for help in the +`#hyprland-nvidia` channel. Hopefully someone will be able to help you out.