26

Is it possible to switch between Nvidia's BLOB and Nouveau video drivers on-the-fly?

I think I need to be able to:

  1. [✓] Unload nvidia
  2. [✓] Unload nouveau
  3. [✕] Restore the console after unloading nouveau*
  4. [✓] Swap xorg.conf files
  5. [✓] Take care of blacklisting
  6. [✓] Deal with libglx.so

*) After a bit of talk with the guys at #nouveau, it seems to be difficult or even impossible with the current Ubuntu setup (builtin vesafb). I'm trying to get it to work with uvesafb, but for now the scripts in the answer do what I was looking for.

4
  • sounds like a really risky deal O.o, you sure you want to do that?
    – RolandiXor
    Dec 11, 2010 at 20:39
  • 4
    Risk means fun. :P
    – htorque
    Dec 11, 2010 at 21:21
  • Just in case, can you add the following lines in your script: chvt 1 chvt 7 Reference: hermann-uwe.de/tips-and-tricks/chvt
    – ericb
    Mar 15, 2013 at 22:37
  • I just felt like pointing out what a well structured post you have. Nice to see! :)
    – lindhe
    Apr 25, 2015 at 14:08

3 Answers 3

13

I now have two scripts that switch drivers, xorg.conf, take care of blacklisting and the libglx, so the answer is: yes, it is possible.

Blacklisting works with one file in /etc/modprobe.d/ containing either blacklist nvidia or blacklist nouveau. I also replaced /lib/nvidia-current/modprobe.conf with a dummy, else the nvidia driver would always create a link in /etc/modprobe.d/ that blacklists nouveau.

Switch to nouveau:

 #!/bin/bash
 stop gdm

 rmmod nvidia

 sed -i "s/nouveau/nvidia/" /etc/modprobe.d/blacklist-nvidia-nouveau.conf

 update-alternatives --set gl_conf /usr/lib/mesa/ld.so.conf
 ldconfig

 modprobe nouveau

 cp /etc/X11/xorg.conf{.nouveau,}

 start gdm

After executing that, I have nouveau running and a working console (nouveaufb).

Switch to nvidia:

#!/bin/bash
stop gdm

echo 0 > /sys/class/vtconsole/vtcon1/bind
rmmod nouveau
rmmod ttm
rmmod drm_kms_helper
rmmod drm

sed -i "s/nvidia/nouveau/" /etc/modprobe.d/blacklist-nvidia-nouveau.conf

update-alternatives --set gl_conf /usr/lib/nvidia-current/ld.so.conf
ldconfig

modprobe nvidia-current

cp /etc/X11/xorg.conf{.nvidia,}

start gdm

→ Nvidia driver is working, only problem: after unloading the nouveau driver, the console is unusable. I need a way to reset it or load another framebuffer, but since vesafb is compiled into the kernel I don't know what to do.

2
  • The main goal has been achieved, so I'm accepting this until someone can come up with a fix for the terminal problem.
    – htorque
    Dec 12, 2010 at 14:00
  • There seems to be a new question asking for this: askubuntu.com/questions/855451/… I linked your answer there, but after testing it, I realized that it doesn't work (anymore). Maybe you can update your answer.
    – student
    Dec 1, 2016 at 13:11
0

I don't believe it's possible to do, not only is the nouvou driver kernel mode setting and the nvidia one not, but the nvidia driver uses a hacked xorg library which makes even using the same install on a machine requiring the intel driver a problem. (see upside down elements bugs and questions)

1
  • 1
    I think that's why they added the 'gl_conf' alternative. Using update-alternatives allows to easily switch between the Nvidia library and the "normal" one.
    – htorque
    Dec 12, 2010 at 9:12
0

http://nouveau.freedesktop.org/wiki/KernelModeSetting/ suggests running /etc/init.d/consolefont restart after rmmod-ing nouevau to restore the text mode. Note that it has been renamed to console-font on more recent systems and in Ubuntu 13.10 it can not be called this way at all, but like this: service console-font restart

Also, it does not work always. In some cases starting X (service lightdm start - or whatever DM you are using) will start gfx mode and also give a working text mode when switching to vt1 (ctrl-alt-f1).

(I use this to install the nvidia driver into a live CD session)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.