[how-to] Downgrade the nvidia driver to a more stable version (arch & all derivatives)

rado84

Well-Known Member
Joined
Feb 25, 2019
Messages
1,083
Reaction score
921
Credits
8,303
Lately the nvidia drivers, especially since version 565, are going literally to hell, there's always something not working or half-working and basically the Archer has to waste time trying to find workarounds and "fix" what nvidia screwed up. So it's either that, or downgrading to an older version where things used to work smoothly. BUT!!! downgrading the nvidia driver isn't as easy as you could imagine. I suppose many of the Archers know about the CLI package named "downgrade" but it has some flaws - it doesn't download dependencies, unless you mention them. That's why in the case of dowgrading nvidia, I recommend downloading the packages and downgrading them locally/manually using pacman.

I finally learned how to properly downgrade the driver and decided to share this knowledge cuz I'm pretty sure there are people who still don't know how. Armed with this knowledge you can go back to an nvidia driver and/or kernel as old as 10 years ago, if you wanted to.

DO keep in mind: depending on how far back in time you wanna go with the driver version, you may have to download and downgrade this package as well: "libglvnd". The oldest available is from 2019, the latest one is from 2023. But I'm sure you can find even older versions than that, if you visit pkgs.org.

So here's how:
1. Personally I prefer to use the nvidia-dkms package (you need the package dkms installed) because dkms rebuilds the initial ramdisks on its own - you don't have to do anything driver post-install, except for rebooting your computer.
Also, having dkms and nvidia-dkms allows you to downgrade the kernel too, if necessary. In principle that's not mandatory but sometimes the whole system works better and smoother, if you pair a certain older version of the nvidia driver with an older kernel version.
So, if you choose to use nvidia-dkms and if you remember a driver version where everything was working flawlessly (in my case that was 555.58), you need to visit https://archive.archlinux.org/packages/ and download one by one these packages:

Code:
nvidia-dkms nvidia-utils nvidia-settings lib32-nvidia-utils libxnvctrl

When I do that I move all of them to a dir named "03 NVIDIA DRIVER" and if you keep reading, you'll find out why.
While you're in the specified link, see and remember (or copy) the date the nvidia version was released. Usually all packages are being uploaded to this link too, apart from the worldwide repositories.

2. Knowing the date the drivers were released, visit the same address only with some minor differences: https://archive.archlinux.org/packages/g/gcc/ & https://archive.archlinux.org/packages/g/gcc-libs/. You can press Ctrl+F in your browser to find the same or an earlier date. I'll give you an example with one of my favorite driver versions so far - 510.54: this driver was released on 15-Feb-2022. So the gcc & gcc-libs versions you need will be released a day or two before that: a quick search in these addresses indicates that the gcc & gcc-libs versions are 11.2.0-2, released on 09-Feb-2022.

ALTOUGH, sometimes there might discrepancies. In such cases the only way to find out which gcc version is the right one is to download and install a few and then reinstall the downloaded nvidia version. I know that this sucks because it includes repetitive actions but you can never know which gcc version nvidia has decided to use building the driver. USUALLY this applies: "So the gcc & gcc-libs versions you need will be released a day or two before that" but not always, especially not with very old drivers.

In my case using 555.58-2 which has been released on 30-Jun-2024, this gcc version works with that driver: gcc-14.2.1+r134+gab884fffe3fc-1 which makes no sense because it has been released 4 months after the driver.
So, finding the right version of gcc & gcc-libs is a bit like the lottery but there's nothing we can do about that. And it's important to find the right version because if the driver has been built with a different version of gcc, after the reboot you won't get to your desktop. Instead, it will hang at "Reached target Graphical Interface" and then the dmesg screen will start flickering.

Those two packages I would put them in a dir named "01 GCC".

3. In a similar manner with date of release, as close as possible to the nvidia driver (a few days after the nvidia release is better - to make sure that kernel has been optimized to work with that specific nvidia version you wanted, search for both rolling and LTS kernels and download them. As I said earlier, downgrading the kernel isn't mandatory but I prefer to do the whole thing properly to ensure a smooth system working. So, for 555.58-2 I downloaded rolling linux and linux-headers v6.9.7 & linux-lts and linux-lts-headers v6.6.36. You never know when you might need the LTS kernel, so you better have them both. These 4 files I've put them in a dir named "02 KERNELS".

Now, why did I name the dirs that way? The number indicates the order in which the files need to be installed - first the GCC packages, second - the kernels and finally, third - the nvidia driver. That's the proper order.
Installing the packages can be done by cd to the specific directory (or using F4 in some file managers; PCManFM has that function - F4 opens the terminal into the directory you've opened). Since I use PCManFM, pressing F4 inside the GCC dir does this and the terminal looks like this:

Picture_created_14-04-2025_17-45-04.png


4. Now it's time to downgrade the stuff. In all 3 directories in the specified order use this command:

Code:
sudo pacman -U *.zst

This command upgrades the existing packages or in our case - downgrades them. When you're finished downgrading the nvidia packages, reboot. If you've been lucky enough to "hit" the proper GCC version, you'll see your desktop.

P.S. I know it looks like A LOT of work written like this but I wanted to write it as detailed as possible and for you to have all the information for a successful downgrade. But once you get used to the process, it takes no more than 10 minutes, including the installation and reboot. But it works.

2 days ago I had the latest nvidia driver with tons of workarounds to ensure the driver starts after resuming from suspend to RAM and with the latest rolling and LTS kernels. But I got fed up with nvidia's BS, so I downgraded to nvidia 560.35.03-19 and 6.11.9 kernel but it turned out that this driver has its own issues with some of the games I play, so decided to go back even further to one of the best drivers ever released: 555.58-2. Naturally, at the first attempt I got the flickering dmesg screen I mentioned earlier. Then I remembered what I was told in the nvidia forum - about the gcc packages. So I found them, installed them, reinstalled the nvidia driver and voila - the desktop appeared. And the games I play run the smoothest - no stuttering audio and video, no hiccups, no freezings.

In order to avoid all that hustle in the future, I recommend you to make a backup of the newly downgraded system - whether it's timeshift, clonezilla or rescuezilla - doesn't matter. What matters is that you have an easily restorable backup.

Haven fun with the downgrade! :D
 


I suppose many of the Archers know about the CLI package named "downgrade" but it has some flaws - it doesn't download dependencies, unless you mention them. That's why in the case of dowgrading nvidia, I recommend downloading the packages and downgrading them locally/manually using pacman.
Isn't it just easier to downgrade them when listing them instead of manually doing all this?
Code:
sudo downgrade nvidia-dkms nvidia-utils nvidia-settings lib32-nvidia-utils libxnvctrl
Because the "downgrade command also searches "archive.archlinux.org" and pulls them from there?
grep URL /usr/bin/downgrade | tail -n1
DOWNGRADE_ALA_URL="https://archive.archlinux.org"
I just recently switched back from an AMDgpu to an Nvidia gpu, haven't experienced any issues yet. One small detail I have a 5000 series and those are only supported on Linux now with the nvidia-open drivers.

So would be curious to know what issues you are experience with the more recent drivers? Or is is this what you are experiencing?
2 days ago I had the latest nvidia driver with tons of workarounds to ensure the driver starts after resuming from suspend to RAM and with the latest rolling and LTS kernels.
And the games I play run the smoothest - no stuttering audio and video, no hiccups, no freezings.
Have you tried the nvidia-open drivers for your gpu?
Code:
local/nvidia-open 570.133.07-5
local/nvidia-utils 570.133.07-1
local/lib32-nvidia-utils 570.133.07-1
 
Last edited:
1. Isn't it just easier to downgrade them when listing them instead of manually doing all this?

2. Because the "downgrade command also searches "archive.archlinux.org" and pulls them from there?

3. One small detail I have a 5000 series and those are only supported on Linux now with the nvidia-open drivers.

4. So would be curious to know what issues you are experience with the more recent drivers? Or is is this what you are experiencing?


5. Have you tried the nvidia-open drivers for your gpu?
Code:
local/nvidia-open 570.133.07-5
local/nvidia-utils 570.133.07-1
local/lib32-nvidia-utils 570.133.07-1
1. No, because as I said above, first you have to identify the correct version of GCC & GCC-LIBS. Otherwise you won't get to the desktop.
2. The downgrade command by default searches ONLY in the Archive but as I said it doesn't download dependencies. You can't downgrade GCC before identifying its correct version.
2a) Sometimes the archive goes "down" or you're unlucky enough for the repositories to be repopulated at that given moment and no matter what you do, you can't access them through terminal, only through the web. So by downloading everything manually, I save myself the trouble of these moments. Plus, having those files locally, I put them in an archive and upload them to the backup storage - for posterity, so to speak.
3. That's not true:

Picture_created_14-04-2025_20-07-03.png


4. Put the computer to sleep ("suspend to RAM" by default). Wake it up. You get a black screen with the cursor in the middle because the driver won't wake up. The only solution is cold restart (the PSU's power switch) OR make the driver restart itself upon resuming (see the code below) from suspend which takes 5 to 20 seconds, depending on a few things.

Code:
Create /etc/systemd/system/nvidia-resume.service and put this in it:

[Unit]
Description=Restart NVIDIA driver on resume
After=suspend.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'rmmod nvidia_uvm nvidia && modprobe nvidia && modprobe nvidia_uvm'

[Install]
WantedBy=suspend.target
---------------------------------------------------------
Then type this in terminal:

sudo systemctl enable nvidia-resume.service
or
sudo systemctl disable nvidia-resume.service (to stop the driver from restarting itself upon resuming)

5. No, I haven't and I won't try it anytime soon. I was told it's not good enough for gaming yet + the support and the working of NVENC is seriously doubtful, so for now I'm staying with the closed source driver.
 
1. No, because as I said above, first you have to identify the correct version of GCC & GCC-LIBS. Otherwise you won't get to the desktop.
I forgot about the detail that you need gcc to build a kernel module with dkms.

4. Put the computer to sleep ("suspend to RAM" by default). Wake it up. You get a black screen with the cursor in the middle because the driver won't wake up. The only solution is cold restart (the PSU's power switch) OR make the driver restart itself upon resuming (see the code below) from suspend which takes 5 to 20 seconds, depending on a few things.
I don't have this problem, it wakes up from sleep as soon as I press the power button and it then shows me a login screen.

5. No, I haven't and I won't try it anytime soon. I was told it's not good enough for gaming yet + the support and the working of NVENC is seriously doubtful, so for now I'm staying with the closed source driver.
Gaming works just fine, I don't even notice a difference compared to the proprietary drivers which I was using last time I had an Nvidia gpu which was the RTX 3090. But do what works for you, just thought I'd let you know the nvidia-open drivers are good for gaming as well. Do you use nvenc for video editing or something like that?
 
1. I don't have this problem, it wakes up from sleep as soon as I press the power button and it then shows me a login screen.

2. Do you use nvenc for video editing or something like that?
1. Just because you were lucky enough not to have this problem, it doesn't mean it doesn't exist. All drivers since v565 have this problem.

2. For converting. When I download a TV show, usually from Russian trackers, the episodes are unnecessarily big, mostly because of all the Russian dub files inside, but sometimes they're H264 with a gigantic video bitrate, like 20 Mbps or more. But I can shrink them to 4-5 times less, preserving the picture quality (and the audio quality as well) by converting them with H265 NVENC.
This used to be an 8 GB episode (after I removed all the Russian dubs from it) having exactly the same picture quality:
Picture_created_14-04-2025_22-44-08.png
After NVENC conversion it's just 1.5 GB and all the 328 episodes are ready to be put on bluray discs. AMD doesn't have conversion with the GPU, that's why I'll always stay with nvidia, one way or another.
 
1. Just because you were lucky enough not to have this problem, it doesn't mean it doesn't exist. All drivers since v565 have this problem
I never said it didn't exist, I was just trying to figure out what could be different that makes you/others have that issue and I don't except for the last part I was thinking and forgot to actually type out so that's why it came over wrong when reading it. I read through that thread it seems specifically to be a problem when "Nvreg_PreserveVideoMemoryAllocations" is enabled by default now. I'll play round with it to see if I can get my system to run into that issue.

After NVENC conversion it's just 1.5 GB and all the 328 episodes are ready to be put on bluray discs. AMD doesn't have conversion with the GPU, that's why I'll always stay with nvidia, one way or another.
I know how that works, I just didn't know the nvidia-open driver doesn't have nvenc support. I have a separate system with a quadro nvidia gpu for that.
 
Last edited:
A friend of mine works in an IPTV company, they use NVENC to live stream TV with different qualities and he told me that with nvidia-open the high end quality doesn't look like what it should be. He said it looked more like low end quality which means I'll get the same quality as I would if I switched to an AMD card.
So, for the time being - nvidia-dkms.
 


Follow Linux.org

Members online


Top