mirror of
https://github.com/hyprwm/hyprland-wiki.git
synced 2024-11-22 12:45:59 +01:00
NVidia: Partial rewrite, Explicit sync, Add missing information (#601)
This commit is contained in:
parent
daa05cbc8e
commit
ae05fa7d56
1 changed files with 197 additions and 74 deletions
|
@ -5,8 +5,8 @@ title: NVidia
|
||||||
|
|
||||||
# Foreword
|
# Foreword
|
||||||
|
|
||||||
There is no _official_ Hyprland support for Nvidia hardware. However, you might
|
There is no _official_ Hyprland support for Nvidia hardware. However, many people
|
||||||
make it work properly following this page.
|
have had success with the instructions on this page.
|
||||||
|
|
||||||
You can choose between the proprietary
|
You can choose between the proprietary
|
||||||
[Nvidia drivers](https://wiki.archlinux.org/title/NVIDIA) or the open source
|
[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
|
named 'nvidia' (or 'nvidia-dkms' to use with custom linux kernels) which is
|
||||||
under active development, the legacy drivers 'nvidia-3xxxx' for older cards
|
under active development, the legacy drivers 'nvidia-3xxxx' for older cards
|
||||||
which Nvidia no longer actively supports, and the 'nvidia-open' driver which is
|
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.
|
driver for newer cards.
|
||||||
|
|
||||||
You may want to use the proprietary Nvidia drivers in some cases, for example:
|
If your card is supported by the proprietary nvidia drivers, there is a very
|
||||||
if you have a new Nvidia GPU model, if you want more performance, if you want to
|
high chance that you will most likely want to use those. Benefits include but
|
||||||
play video games, if you need a wider feature set (for example, better power
|
are not limited to:
|
||||||
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.
|
|
||||||
|
|
||||||
Below are some tips to try to make the proprietary Nvidia driver work with
|
- (Much) better gaming performance
|
||||||
Hyprland properly:
|
- 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)
|
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
|
you can do this by adding `nvidia_drm.modeset=1` to the end of
|
||||||
`/boot/loader/entries/arch.conf`. For people using
|
`/boot/loader/entries/arch.conf`.
|
||||||
[grub](https://wiki.archlinux.org/title/GRUB) you can do this by adding
|
|
||||||
|
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
|
`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
|
`/etc/default/grub`, then running `sudo grub-mkconfig -o /boot/grub/grub.cfg`.
|
||||||
others check out
|
|
||||||
|
For others check out
|
||||||
[kernel parameters](https://wiki.archlinux.org/title/Kernel_parameters) and how
|
[kernel parameters](https://wiki.archlinux.org/title/Kernel_parameters) and how
|
||||||
to add `nvidia_drm.modeset=1` to your specific bootloader.
|
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
|
in `/etc/mkinitcpio.conf` add `nvidia nvidia_modeset nvidia_uvm nvidia_drm` to
|
||||||
your `MODULES`
|
your `MODULES`
|
||||||
|
|
||||||
run
|
For example, a clean `MODULES` line would now look like this:
|
||||||
`# mkinitcpio --config /etc/mkinitcpio.conf --generate /boot/initramfs-custom.img`
|
```sh
|
||||||
(make sure you have the `linux-headers` package installed first)
|
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)
|
Now, run `sudo mkinitcpio -P`. This will regenerate the initcpios for all kernels
|
||||||
and add the line `options nvidia-drm modeset=1`
|
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:
|
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)
|
[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:
|
Export these variables in your hyprland config:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
@ -85,38 +102,142 @@ env = __GLX_VENDOR_LIBRARY_NAME,nvidia
|
||||||
env = WLR_NO_HARDWARE_CURSORS,1
|
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
|
Reboot your computer.
|
||||||
`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
|
|
||||||
|
|
||||||
Launch Hyprland.
|
Launch Hyprland.
|
||||||
|
|
||||||
It _should_ work now.
|
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
|
We can achieve VA-API acceleration on Nvidia and Wayland with the help of the
|
||||||
increased power-consumption (from 22W idle on a RTX 3070TI, to 74W).
|
[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
|
Its install instructions are available in the README, however, a quick guide will
|
||||||
in-fact do notice flickering artifacts from being idle for ~5 seconds.
|
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:
|
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
|
- lowering your monitors' refresh rate, as this can stop the flickering
|
||||||
altogether
|
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
|
- using the [Nouveau driver](https://wiki.archlinux.org/title/Nouveau) as
|
||||||
mentioned above
|
mentioned above
|
||||||
|
|
||||||
## Fixing suspend/wakeup issues
|
### Fixing suspend/wakeup issues
|
||||||
|
|
||||||
Enable the services `nvidia-suspend.service`, `nvidia-hibernate.service` and
|
Enable the services `nvidia-suspend.service`, `nvidia-hibernate.service` and
|
||||||
`nvidia-resume.service`, they will be started by systemd when needed.
|
`nvidia-resume.service`, they will be started by systemd when needed.
|
||||||
|
@ -147,7 +264,7 @@ you don't have it already.
|
||||||
|
|
||||||
{{< callout >}}
|
{{< 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
|
[due to a bug](https://github.com/NVIDIA/open-gpu-kernel-modules/issues/472), so
|
||||||
make sure you're on `nvidia-dkms`.
|
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
|
# Making sure to use the proprietary drivers until the issue above is fixed upstream
|
||||||
hardware.nvidia.open = false;
|
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.
|
||||||
|
|
Loading…
Reference in a new issue