Stylized image of NVIDIA's logo.
Published Nov 12, 2022
762

The Pitfalls of NVIDIA on Linux

NVIDIA's proprietary support and drivers on Linux is, well, not great to say the least. Ever since I got my hybrid GPU laptop with integrated Intel graphics and a 1650 Ti, and made the switch from Windows 10, my experience with using the nvidia GPU has been rather bumpy. The question is, since I have a hybrid laptop, why not exclusively use the Intel GPU? The problem for me comes in when I have to use an external monitor. From my research, I've found that the HDMI port seems to be somehow directly hardwired to the dedicated GPU, meaning that on Intel, an external monitor connected to my laptop isn't even recognized.

Yet another annoyance, I am forced to use the more outdated X11 over Wayland on NVIDIA. Although I have gotten past the login manager with NVIDIA + Wayland, my second monitor runs at effectively 2 frames per second with the configuration, rendering it unusable. But with just my laptop display, the Intel experience is great, and on Wayland it's flawless.

Optimus Manager

Optimus Manager is the only program I've found for GPU switching that actually works. I've also installed optimus-manager-qt, which allows me to switch GPUs from the system tray. These of course come with their own set of problems, on multiple occasions after full system upgrades optimus would just not start. This was usually due to the nvidia kernel module not loading since the corresponding nvidia package for the kernel was absent in the repositories for whatever reason. Not really the fault of optimus, but still a problem I've had to fix multiple times. On Arch-based distros, the corresponding packages for kernel 6.0 would be linux60 linux60-nvidia linux60-headers linux60-acpi_call. The nvidia-dkms packages have not worked for me at all. Aside from setup instructions dependent on your login manager, that's basically it for optimus-manager.

KDE and X11

I switched from Gnome to KDE some time ago, and so far I'm enjoying the experience much more. Some time after switching, my external 1080p monitor died (I had it for about 2 years), and I was forced to get a new one. I decided I would go for a 4K monitor this time, thinking that the sharp resolution and DPI would work much better for me.

What I immediately realized though, since I'm forced to use X11 with HDMI, is that there was no good way for me to configure the DPI properly. Since X11 does not support per-display scaling, I either change no settings and have everything on the monitor be tiny and unusable, or be forced to set the global scale to 175%. The global scale would make the laptop screen now way too zoomed in, making that unusable. How terrific.

It could be worse though, Gnome doesn't support any sort of fractional scaling as of right now. This is, yet again, another thing to deal with when NVIDIA has virtually no Wayland support.

Screen Tear

I haven't had to deal with screen tear now that I'm on KDE, but on Gnome this command would immediately fix things for me. If the issue occurs often, I recommend creating a login script that runs it automatically or even creating a keybinding whenever you start to notice tearing.

sh
sudo nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"

The Good Things

On a good day, with my 4K monitor active and my laptop lid closed, I've found that the experience is actually rather smooth. There's no lag or tearing whenever I drag around windows, which was a problem I would always have on Gnome. All of the animations appear to be seamless, even the overview performs excellently. It's a slightly different story if my laptop screen is active however, which makes things noticeably choppier on the primary display. The good news is, with a single 4K monitor active with NVIDIA on X11, things are perfectly fine, and that configuration is enough to get me by.

The way I have things set up now is my default start up mode for Optimus is set to the integrated Intel GPU, as I restart my laptop more often when it's not docked. The 175% global scale only applies on X11, and I use Wayland on Intel so it's not a problem for me. If I want to connect my laptop to my monitor, I change to the dedicated GPU and switch to X11. Not ideal, but convenient enough.

It is certainly frustrating that I have to be surprised when there's no stuttering for things like dragging windows around. For a Windows or Mac user, the notion of having a problem like that is laughable. Oftentimes, I just want things to work, and to be able to move on from these stupid desktop issues and get stuff done.

Future

I'm optimistic about the future of NVIDIA on Linux, as they just recently open-sourced their GPU kernel modules, definitely a step in the right direction. I hope that in a year or two from now we'll be at a point where support will be comparable to that of AMD or Intel, and yet another major vendor will be ticked off on the list.

We have a long way to go, but looking back it's honestly pretty incredible that I'm able to rely almost entirely on free and open source software as I'm writing this: Linux, Manjaro KDE, Visual Studio Code, Vivaldi (not entirely open source, but Chromium is), and all of the software powering this site (React, Remix, Sanity, etc.) If you were to tell this to someone 20 years ago, that it isn't necessary to purchase and license proprietary software to achieve something like this, I'd bet they'd be shocked.

Previous Post

DevTooling Discord

Next Post

Writing A Blog