rmmod nouveau .. no, it's not in use!

I learned that even if you don’t have a display server running, chances are that Linux is still using the graphics driver - which makes sense, framebuffers don’t draw themselves on their own. But that’s still annoying if you want to install a graphics driver without having to reboot.

I recently had to install the proprietary drivers for a Nvidia GPU on Linux again, after not having done that for literal years. In theory the process is straightforward as can be:

  • Download the appropriate driver installer from the Nvidia-website
  • Install all the prerequisite packages - kernel headers, development tools, compilers, ..
  • Blacklist the nouveau-driver which is typically in use
  • Reboot the system
  • Install the driver through the downloaded installer, be happy

However, in my specific case, I wanted to avoid rebooting. That is because the system in question is located in the server rack under my table, with encrypted hard disks - it’s my homeserver after all.

That would have meant that I would have had to either painfully attach a screen to the computer, or hope that I successfully entered the passphrase for the disks blindly at the right point. I could have used this situation as motivation to set up Dropbear, but I have to admit that I couldn’t be bothered.

But, given that the computer wasn’t running any display server, I figured that I wouldn’t really need the blacklisting or the rebooting part, because there was no reason nouveau should be loaded.

The output of lsmod told me that I was wrong in my assumption. For whatever reason nouveau was loaded. I couldn’t really understand why, but that didn’t matter, simply running rmmod nouveau would surely do the trick, right?

copyrmmod: ERROR: Module nouveau is in use

Apparently not. Which confused me, because I wasn’t able to think of anything that would use the driver. I was connected to the system via SSH, there wasn’t a screen attached to the device. What I completely forgot about was the fact that virtual terminals are, despite not relying on a display server, still graphical output, thus needing a graphics driver - and, in all fairness, I didn’t magically remember the fact, a thread on askubuntu.com pointed me towards the right direction:

copyecho 0 > /sys/class/vtconsole/vtcon1/bind

On the upside I was now able to rmmod nouveau, on the downside I was now without virtual terminals. And, knowing myself, I will forget about that in a matter of days, which means that if I end up needing a virtual terminal for debugging purposes in a few months, I will be majorly confused. But that’s an issue for future me.

Subscribe to Bytes and Borscht

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe