• Nvidia with openSUSE Tumbleweed (AKA Install Nvidia the Hard Way)

    Introduction: Tumbleweed users can't use RPMs from the official openSUSE repositories for Nvidia kernel module drivers because the RPMs are matched to the static kernel in the underlying static distro. The kernels in Tumbleweed are constantly changing, so drivers for Nvidia have to be reinstalled every time the kernel changes.

    BTW, you don't have to be a Tumbleweed user to use this method; it works in standard openSUSE too.

    This article is for openSUSE 11.4 and higher, and for users who are a bit confused by the cryptic nature of the wiki edition. Advanced users will find it quicker to use the wiki edition provided they skirt the steps that are wrong for openSUSE versions 11.4+.

    Get Ready Step 1: Gather some background information about your video card and your current drivers.

    Have a look at your current status with this command:
    Code:
    /usr/sbin/hwinfo --gfxcard
    Typically you'll get a listing like this if you are using the nouveau drivers:
    Code:
    john@opensuse114:~> /usr/sbin/hwinfo --gfxcard
    27: PCI 100.0: 0300 VGA compatible controller (VGA)             
      [Created at pci.318]
      Unique ID: VCu0.VDLXvujblSC
      Parent ID: vSkL.p_D9a9Gh3ZD
      SysFS ID: /devices/pci0000:00/0000:00:01.0/0000:01:00.0
      SysFS BusID: 0000:01:00.0
      Hardware Class: graphics card
      Model: "nVidia G98 [GeForce 8400 GS]"
      Vendor: pci 0x10de "nVidia Corporation"
      Device: pci 0x06e4 "G98 [GeForce 8400 GS]"
      SubVendor: pci 0x19da "ZOTAC International (MCO) Ltd."
      SubDevice: pci 0x9044 
      Revision: 0xa1
      Driver: "nouveau"
      Driver Modules: "drm"
      Memory Range: 0xfd000000-0xfdffffff (rw,non-prefetchable)
      Memory Range: 0xd0000000-0xdfffffff (ro,non-prefetchable)
      Memory Range: 0xfa000000-0xfbffffff (rw,non-prefetchable)
      I/O Ports: 0xdc80-0xdcff (rw)
      Memory Range: 0xfea00000-0xfea1ffff (ro,non-prefetchable,disabled)
      IRQ: 16 (13 events)
      I/O Ports: 0x3c0-0x3df (rw)
      Module Alias: "pci:v000010DEd000006E4sv000019DAsd00009044bc03sc00i00"
      Driver Info #0:
        Driver Status: nvidiafb is not active
        Driver Activation Cmd: "modprobe nvidiafb"
      Driver Info #1:
        Driver Status: nouveau is active
        Driver Activation Cmd: "modprobe nouveau"
      Config Status: cfg=no, avail=yes, need=no, active=unknown
      Attached to: #9 (PCI bridge)
    I've highlighted the card type (e.g. GeForce 8400GS) and the active driver (nouveau). If you have the Nvidia community repositories for openSUSE installed, then you'll have the nvidia drivers active instead of the nouveau drivers and your listing will reflect that the active driver is "nvidia" as demonstrated on this link.

    If you want to see whether you have the Static RPMs for Nvidia drivers installed, run this command: rpm -qa | grep nvidia, and if they're installed you'll see a response like this:
    Code:
    john@opensuse114:~> rpm -qa | grep nvidia
    nvidia-gfxG02-kmp-desktop-270.41.06_k2.6.37.1_1.2-4.1.x86_64
    nvidia-computeG02-270.41.06-5.1.x86_64
    x11-video-nvidiaG02-270.41.06-5.1.x86_64
    {NB FYI when you do install these RPMs in openSUSE 11.4+, a file called nvidia.conf is created in directory /etc/modprobe.d/ and it contains the line blacklist nouveau. This blocks the nouveau driver. So if you added something to 50-blacklist.conf, take it out, it's a mistake.}

    Get Ready Step 2: Get rid of the RPM-based Nvidia driver installation

    You're going to stop using your base distro's Nvidia drivers (via RPMs) so if you have RPMs installed, remove them in Yast --> Software --> Software management -> search term: nvidia. Remove the three RPMs listed above in the code box. Be careful not to uninstall the nouveau driver. Switch to Yast --> Software --> Repositories and remove the Community repo for Nvidia. Then reboot and you will regress to the nouveau drivers.

    {NB FYI: when you uninstall these three Nvidia RPMs in Yast, the process automatically takes out the nouveau blacklist file (/etc/modprobe.d/nvidia.conf) so that "nouveau" returns. If you can't get nouveau when you reboot, check that the file nvidia.conf is gone from directory modprobe.d and also that you haven't blacklisted nouveau at the bottom of the file "50-blacklist.conf" (by mistake lol).}


    Get Ready Step 3: Install prerequisite RPMs Install these RPMs ==> gcc, make, kernel-source

    Get Ready Step 4: Download the new driver. You'll need the information you got when you ran the command /usr/sbin/hwinfo --gfxcard so you can pick the correct driver from the Nvidia site http://www.nvidia.com/Download/index.aspx?lang=en-us. The driver package will be named similar to this: NVIDIA-Linux-x86_64-295.33.run. You'll be installing it as root after booting to a console subsequent to every kernel upgrade, so you should place it in the directory /root. Use a superuser file browser to do that (or the commands mkdir and mv).

    Get Ready Step 5: Blacklist the nouveau driver. You should switch out nouveau by blacklisting it before you install the new Nvidia drivers from the "run" file.

    Look in the directory /etc/modprobe.d/ for a file named variously: "nvidia.conf" or "nvidia-installer-disable-nouveau.conf" or similar. It must contain these two lines:
    Code:
    blacklist nouveau
    options nouveau modeset=0
    If it exists but contains only the first line, fix it, add the second line. If an appropriately named file doesn't exist, make a file called "nvidia.conf" and put the two lines in it.

    After you do that, the GUI will continue to run with nouveau until you install the Nvidia "run" file. Once that's in place, the blacklisting becomes effective.

    Now Install the Driver from the "run" File

    Reboot and select to boot to runlevel 3, do this: boot to the grub menu, press the numeral key 3, then Enter and you'll boot to runlevel 3

    At the console login prompt, log in as root.

    Open the "run" file as follows: if you put the run file in directory /root as I advised, then type this in the console:
    Code:
    sh /root/NVIDIA
    and then press the Tab key. The "sh" function will locate the file and complete the command, changing it to look like this:
    Code:
    sh /root/NVIDIA-Linux-x86_64-295.33.run
    Then you press the Enter key and the script will run.

    Here's the normal progress:
    • licence dialogue is displayed => accept
    • simply observe and wait through dialogue for building scripts and modules
    • if asked whether to install 32-bit compatibility OpenGL libs ==> select yes
    • simply observe and wait through searches for conflicting files
    • simply observe and wait through installation of driver dialogue
    • when asked if you want to install and let run the nvidia-xconfig utility, 99% of people should ==> select no
    • when told that installation is complete ==> select OK


    You will return to the console prompt. Simply enter init 5 to complete the process and log in to your user account in GUI mode.

    That's all folks

    Note: if you need to adjust the display (e.g twin screens, e.g. resolution) run this command after you log in: nvidia-settings

    swerdna 19 June 2011; last update 5 May 2012

    P.S. What about uninstalling the driver:
    Code:
    sh /root/NVIDIA-Linux-x86_64-295.33.run --uninstall
    Comments 21 Comments
    1. jdmcdaniel3's Avatar
      jdmcdaniel3 -
      That is a very good article swerdna. For anyone that is going to install the nVIDIA driver the hard way, it is possible to automate that installation using a bash script file. It is posted in message #12 here:

      LNVHW - Load NVIDIA (driver the) Hard Way from runlevel 3 - Page 2

      The bash script is called lnvhw, you run it from a terminal session after you have reached run level 3 as suggested in swerdna's article. If you have more than one nVIDIA driver version in your downloads folder, you will get a menu of video drivers to select from. Please give it a try...

      Thank You,
    1. silverglade00's Avatar
      silverglade00 -
      Good stuff! I saw a typo in there. Step one has this command "rpm -qa | grep fglrx" should be "rpm -qa | grep nvidia". Your sample code has it correct though.
    1. manchette_fr's Avatar
      manchette_fr -
      What if i'm without a /etc/modprobe.d/nvidia.conf file ?
      Shall i create one with only 2 lines in it (1) in order to blacklist nouveau before installing the nvidia driver from init 3 ?


      (1)
      Code:
       
      blacklist nouveau 
      options nouveau modeset=0
    1. jdmcdaniel3's Avatar
      jdmcdaniel3 -
      No, that is not the correct file. You need to edit the file /etc/modprobe.d/50-blacklist.conf and add the line blacklist nouveau at the end say. In KDE you would do an Alt-F2 or menu Run Command and enter:

      Code:
      kdesu kwrite /etc/modprobe.d/50-blacklist.conf
      And then in the file add the line that says:
      Code:
      blacklist nouveau
      Save the file and reboot for it to take effect.

      Thank You,
    1. manchette_fr's Avatar
      manchette_fr -
      This is not what i understood : "because of old habits you might have the line blacklist nouveau in file /etc/modprobe.d/50-blacklist.conf. It really ought to go in file /etc/modprobe.d/nvidia.conf, so I recomment that you check those files out and make it happen."

      Also what about the modeset option is i only add a "blacklist nouveau" line in /etc/modprobe.d/50-blacklist.conf ?
    1. jdmcdaniel3's Avatar
      jdmcdaniel3 -
      This is not what i understood : "because of old habits you might have the line blacklist nouveau in file /etc/modprobe.d/50-blacklist.conf. It really ought to go in file /etc/modprobe.d/nvidia.conf, so I recomment that you check those files out and make it happen."

      Also what about the modeset option is i only add a "blacklist nouveau" line in /etc/modprobe.d/50-blacklist.conf ?
      I do not normally find it necessary to blacklist the nouveau driver. I ALWAYS add in the nomodeset command to your kernel load options in the grub menu.lst file for the normal load of openSUSE (this command already exists in the fail-safe openSUSE load). It appears that when you install the nVIDIA driver the hard way that in addition, the need to Edit the file /etc/sysconfig/kernel and set NO_KMS_IN_INITRD = yes is performed automatically and so you don't need to do this either. If I boot with nomodeset set and then add a (temporary) 3, to switch to runlevel 3, I can then install the propritary nVIDIA video driver and it always then works like a champ. So I load this driver all of the time including after kernel update and it just works fine for me.

      Thank You,
    1. swerdna's Avatar
      swerdna -
      Quote Originally Posted by jdmcdaniel3 View Post
      No, that is not the correct file. You need to edit the file /etc/modprobe.d/50-blacklist.conf and add the line blacklist nouveau at the end say. In KDE you would do an Alt-F2 or menu Run Command and enter:

      Code:
      kdesu kwrite /etc/modprobe.d/50-blacklist.conf
      And then in the file add the line that says:
      Code:
      blacklist nouveau
      Save the file and reboot for it to take effect.

      Thank You,
      For future readers: jdmcdaniel is mistaken in advising to put the nouveau blacklisting into /etc/modprobe.d/50-blacklist.conf. The correct location is /etc/modprobe.d/nvidia.conf
    1. jdmcdaniel3's Avatar
      jdmcdaniel3 -
      Yes that was the old instructions. Here is what nVIDIA says at present: Nvidia Installer HOWTO for openSUSE users

      2) Run the following terminal commands

      echo "blacklist nouveau" > /etc/modprobe.d/nvidia.conf

      Code:
      # You can use the following code in a script to set NO_KMS_IN_INITRD="yes"
       
      # recreate initrd without KMS, if the use of KMS is enabled in initrd  to 
      
      if grep -q NO_KMS_IN_INITRD=\"no\" /etc/sysconfig/kernel; then    
        sed -i 's/NO_KMS_IN_INITRD.*/NO_KMS_IN_INITRD="yes"/g' /etc/sysconfig/kernel 
         mkinitrd  
      fi
      3) Reboot your machine.

      4) Use the nvidia installer for <present version, which is 285.05.09 now>

      sh NVIDIA-Linux-x86-XXX.XX.XX.run -q

      IMPORTANT: You need to recompile and install the nvidia kernel module after each kernel update.

      sh NVIDIA-Linux-x86-XXX.XX.XX .run -K
      You can do the following instead of the script-let nVIDIA posted to do the same thing...

      YaST -> /etc/sysconfig Editor -> Kernel -> NO_KMS_IN_INITRD = yes.

      Thank You,
    1. ChrisLilley's Avatar
      ChrisLilley -
      Excellent, clear article.

      I notice on going to the Nvidia site Drivers - Download NVIDIA Drivers that as soon as you select Quadro, all the other selections go empty. Does this process work for Quadro cards?

      I'm aware that Quadros can be reflashed to the equivalent GeForce, but that would not help if the Quadro-specific facilities are needed 9in my case that would be 30bit (10bit per component) color for wide-gamut IPS displays.

      If anyone is running Tumbleweed on a laptop with Quadro 1000M or 2000M video card and could confirm this works, that would be helpful.
    1. Knurpht's Avatar
      Knurpht -
      Quote Originally Posted by ChrisLilley View Post
      Excellent, clear article.

      I notice on going to the Nvidia site Drivers - Download NVIDIA Drivers that as soon as you select Quadro, all the other selections go empty. Does this process work for Quadro cards?

      I'm aware that Quadros can be reflashed to the equivalent GeForce, but that would not help if the Quadro-specific facilities are needed 9in my case that would be 30bit (10bit per component) color for wide-gamut IPS displays.

      If anyone is running Tumbleweed on a laptop with Quadro 1000M or 2000M video card and could confirm this works, that would be helpful.
      The driver downloads can be visited through a browser on ftp://download.nvidia.com/XFree86/Linux-x86_64/ . Enter a version folder > 200.00 and click on the README link. This will open a next folder, look for the file "index.html" and you'll see a simple webpage. At the bottom you'll find a link to the AppendixA. Supported Nvidia.... Go through the list and you'll find out whether your card is supported. This one here says it does : ftp://download.nvidia.com/XFree86/Li...rtedchips.html AFAIK that's the latest stable driver package.
    1. jdmcdaniel3's Avatar
      jdmcdaniel3 -
      Quote Originally Posted by ChrisLilley View Post
      Excellent, clear article.

      I notice on going to the Nvidia site Drivers - Download NVIDIA Drivers that as soon as you select Quadro, all the other selections go empty. Does this process work for Quadro cards?

      I'm aware that Quadros can be reflashed to the equivalent GeForce, but that would not help if the Quadro-specific facilities are needed 9in my case that would be 30bit (10bit per component) color for wide-gamut IPS displays.

      If anyone is running Tumbleweed on a laptop with Quadro 1000M or 2000M video card and could confirm this works, that would be helpful.
      When I switch to Quadro at the nVIDIA site, I still get the same driver, but you would have to specify the complete model name and number to know for sure. Without knowing the spicifics, it appears to work the same.

      Thank You,
    1. reducto's Avatar
      reducto -
      I am a bit bafflled. Why all this trouble and and not simply add the Nvidia opensuse repository?

      ftp://download.nvidia.com/opensuse/12.2/
    1. zerum's Avatar
      zerum -
      Quote Originally Posted by reducto View Post
      I am a bit bafflled. Why all this trouble and and not simply add the Nvidia opensuse repository?

      ftp://download.nvidia.com/opensuse/12.2/
      Because this driver works only with the kernel version from 12.2. Tumbleweed updates the kernel frequently with newer versions.

      See: https://en.opensuse.org/Portal:Tumbleweed

      At this point there is no guarantee to have all additional modules available in the stable release like for Vmware or Virtualbox. And while the Packman Tumbleweed Essential repository attempts to deliver them there is no guarantee they will always succeed due to the incompatibilities with the quickly advancing Linux Kernel. The problems with proprietary Graphics drivers are similar and there is no guarantee they will work tomorrow, even if they do today. If you don't know how to compile your own additional kernel modules and you don't wish to learn or keep a very close eye on what is being updated, please don't use Tumbleweed.

      [...]

      If you have 3rd party kernel modules, Greg KH (the primary Tumbleweed maintainer) STRONGLY suggests that you not use Tumbleweed. Seriously, it's not worth the pain and extra work, unless you _really_ want to do it.
    1. reducto's Avatar
      reducto -
      Quote Originally Posted by zerum View Post
      Because this driver works only with the kernel version from 12.2. Tumbleweed updates the kernel frequently with newer versions.

      See: https://en.opensuse.org/Portal:Tumbleweed
      you mean the rpms from this repository are tagged to a specific kernel version? But IIRC, these rpms do need kernel sources and gcc to install, which means (i suppose) that they can compile against several kernel versions ... or am I missing something?
    1. Knurpht's Avatar
      Knurpht -
      Quote Originally Posted by reducto View Post
      you mean the rpms from this repository are tagged to a specific kernel version? But IIRC, these rpms do need kernel sources and gcc to install, which means (i suppose) that they can compile against several kernel versions ... or am I missing something?
      Yup, you're missing something. The rpms have precompiled kernel modules for the stock and updated kernels for an openSUSE version. The downloadable .run files need the kernel sources and some development tools, running the .run builds the kernel module for the running kernel (running kernel and kernel source version should be the same).

      Since Tumbleweed has a much faster update cycle re. the kernel, packages are not available. Unless ...... for NVIDIA Optimus, using bumblebee, these packages use dkms (dynamic kernel mode)
    1. zerum's Avatar
      zerum -
      Quote Originally Posted by Knurpht View Post
      Unless ...... for NVIDIA Optimus, using bumblebee, these packages use dkms (dynamic kernel mode)
      What are the disadvantages of dkms? I know it from Debian (and debian-based) distros and their Nvidia drivers. There must be a reason why Nvidia does not use it for openSUSE packages.
    1. jdmcdaniel3's Avatar
      jdmcdaniel3 -
      Quote Originally Posted by zerum View Post
      What are the disadvantages of dkms? I know it from Debian (and debian-based) distros and their Nvidia drivers. There must be a reason why Nvidia does not use it for openSUSE packages.
      dkms for openSUSE and nVIDIA have two problems in openSUSE 12.1 & 12.2 but consider I do not use Tumbleweed.

      1) dkms does not work without a modification in standard openSUSE and systemd. Have a look here to get dkms to work in openSUSE 12.1 & 12.2: https://forums.opensuse.org/blogs/jd...suse-12-1-100/

      2) the nVIDIA driver does not work with dkms even when dkms is working because it requires FULL source code and not just the headers you get when install the kernel source in openSUSE. You can get full source if you compile your own kernel. Look at these categories:

      SANDI to install nVIDIA driver using dkms: https://forums.opensuse.org/blogs/jd...sion-1-00-103/

      SACK to compile your own kernel: https://forums.opensuse.org/blogs/jd...rsion-2-50-34/

      Again, I do not use Tumbleweed but have worked a lot with dkms and the nVIDIA driver.

      Thank You,
    1. zerum's Avatar
      zerum -
      Quote Originally Posted by jdmcdaniel3 View Post
      [...]
      Thanks for your explanations.
    1. Pboll1958's Avatar
      Pboll1958 -
      Quote Originally Posted by jdmcdaniel3 View Post
      Yes that was the old instructions. Here is what nVIDIA says at present: Nvidia Installer HOWTO for openSUSE users



      You can do the following instead of the script-let nVIDIA posted to do the same thing...

      YaST -> /etc/sysconfig Editor -> Kernel -> NO_KMS_IN_INITRD = yes.

      Thank You,
      As a Newbie all this is very confusing.
      I have done all this, but even in editing /etc/inittab by changing the default boot runlevel to 3 I cant run the shell script because it states that server X is running.
      How to get in runlevel 3 or getting rid of this server X message.
    1. jdmcdaniel3's Avatar
      jdmcdaniel3 -
      Quote Originally Posted by Pboll1958 View Post
      As a Newbie all this is very confusing.
      I have done all this, but even in editing /etc/inittab by changing the default boot runlevel to 3 I cant run the shell script because it states that server X is running.
      How to get in runlevel 3 or getting rid of this server X message.
      Tell us more about your computer including openSUSE version, nVIDIA hardware type, make & model of PC and just where are you at now? Consider starting your own new message thread on the subject. Everybody can have their own.

      Thank You,