How well will Nvidia Optimus cards be supported in 12.04? [duplicate]

Even if the Supported Products tab on the driver download page says that GT420M is supported, the Optimus variants are not supported. From the Additional Information tab:

Some designs incorporating supported GPUs may not be compatible with the Nvidia Linux driver: in particular, notebook and all-in-one desktop designs with switchable (hybrid) or Optimus graphics will not work if means to disable the integrated graphics in hardware are not available.

This Optimus design means that the discrete Nvidia card is wired into the integrated Intel GPU and that it's not connected to a monitor at all. Some hybrid graphics laptops still allow you to choose the Nvidia card in BIOS, but most modern Optimus laptops don't have this option.

I am speaking from experience, I have a GT425M combined with an i5-460M processor. If there is no BIOS or hardware setting for switching / disabling the card, you're throwing away your money. The XPS 15 family does not appear to have any of these features. Although you are able to use the Intel graphics card, you may want to use the Nvidia card as well because you've paid for it which is not directly possible at the moment.

You'd better look for another laptop without Optimus. Optimus is crap and Nvidia refuses to provide better support for Linux. If you are adventurous and buy such a notebook, visit the Linux Hybrid Graphics blog and subscribe to its Launchpad mailing list. Visit their wiki for various ways to get such a card (hopefully) working. One method is called Bumblebee which allows you to render programs on your nvidia card. I currently recommend it over other solutions (disclosure: I'm a developer of it).

Ubuntu 12.10 Quantal will be shipped with the first bits for real support for hybrid graphics laptops, called PRIME. This is highly experimental and in development and probably not stable enough for many people. Only the open-source graphics drivers support this, though Nvidia may release support in the future too if it is not too much work for them. This page tracks hybrid graphics support for Quantal, these are the blueprints for Raring.

If you've installed the driver from nvidia.com

You've made a huge mistake by installing the drivers directly from nvidia.com. If you want to have newer drivers, add the ubuntu-x-swat/x-updates PPA because these will install the nvidia drivers in such a way that your Optimus system does not die.

After installing the nvidia driver from nvidia.com, you may experience loss of all graphics effects, black screen or very slow graphics performance. Uninstallation instructions:

  1. Boot into recovery mode by holding Shift before booting and choosing for the recovery option
  2. In the following menu, choose for netroot.
  3. Uninstall nvidia:

    nvidia-uninstall
    
  4. Remove the configuration file generated by nvidia if any:

    rm /etc/X11/xorg.conf
    
  5. Reinstall the Mesa package for GL:

    apt-get --reinstall install libgl1-mesa-glx
    
  6. When done, reboot with:

    reboot
    

Installation instructions for Bumblebee

If you have installed Bumblebee or Ironhide before, be sure to check the instructions on http://wiki.bumblebee-project.org/Upgrading-on-Ubuntu

Since Bumblebee version 3.0 "Tumbleweed", it can disable the Nvidia card in a safe way to save power (press release). You can also run programs using the discrete card for better performance. Installation instructions:

  1. Enable the Universe and multiverse repository for the Nvidia driver. 1.(optional for 13.10 Saucy) Add a PPA containing recent drivers as the one in the repositories is possibly outdated:

    sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
    
  2. (for 13.04 Raring and earlier, not needed for Saucy and later) Add the Stable Bumblebee Releases PPA:

    sudo add-apt-repository ppa:bumblebee/stable
    sudo apt-get update
    
  3. Install Bumblebee using the proprietary Nvidia driver:

    sudo apt-get install bumblebee bumblebee-nvidia linux-headers-generic
    
  4. Reboot or re-login to apply the group changes

If you'd like to run a program on the nvidia card now, use the optirun program:

optirun firefox &

If you are only interested in power savings, replace the last command in step 4 by:

sudo apt-get install --no-install-recommends bumblebee linux-headers-generic

At a later time, you can still use NVIDIA by installing bumblebee-nvidia. If you want to use a 32-bit program, you can still install the required libraries with sudo apt-get install virtualgl-libs-ia32. You have to add linux-headers-generic, otherwise the power saving module bbswitch cannot be built.

Instead of virtualgl, you can also try primus to achieve better performance. The package name is primus and you can use:

primusrun glxgears
# alternative that is nearly the same:
optirun -b primus glxgears

(note: before asking about a 60 fps limit, please read its FAQ.)

See also https://wiki.ubuntu.com/Bumblebee

Notes:

  • Using acpi_call manually is deprecated. By default, it won't survive suspend.
  • Do not use ppa:mj-casalogic/bumblebee or the MrMEEE/bumblebee-Old-and-abandoned git, it's not maintained anymore and contains a lot of errors.
  • Martin Juhl forked the original Bumblebee to Ironhide, but in my opinion it should not be used because the design flaws from the original Bumblebee are still present and the "power management" features are not stable (the wrong methods, _ON and _OFF, are used). Installation is still a mess, your installation may be broken after removing it.

If you do not want to use the nvidia card nor Bumblebee

If you've accidentally installed the nvidia driver (i.e. using the jockey), you've two choices:

  • Uninstall the driver (package nvidia-current)
  • Set the default OpenGL libraries as described in this bugreport

Update as of Ubuntu 12.10:

All the pieces of the graphics stack required to support hybrid graphics made it into 12.10; the Quantal Quetzal has the infrastructure to support for hybrid graphics - both to extend the display when the external monitors can only be driven by the discrete chip, and to run applications on the discrete chip and display them on the integrated GPU.

There are two caveats, though, one large, one minor.

The minor caveat is that there's no GUI support - there's no obvious way to run an application on the discrete GPU. You can do this by setting the DRI_PRIME=1 environment variable before starting an application.

The major caveat is that this only applies to the free drivers - nouveau, radeon, and intel. Nvidia has now expressed interest in supporting hybrid graphics on linux, but the dma-buf kernel symbols they need to use are marked as GPL, which they won't use.

Additionally the hybrid support has seen only light testing, and there are still pieces that remain to be implemented, like synchronisation across GPUs to prevent tearing.

Status as of Ubuntu 12.04 LTS:

nVidia's official position is that they have no plans to support Optimus on Linux - our graphics stack is engineered with an assumption that only one card is driving a given display, and it's not easy to work around.

Dave Airlie has done a lot of work untangling this in the X server and kernel, and that'll likely be rebased on the drm-buf work that's primarily come out of the ARM world via Linaro. Once this is all up and running - which seems to be 6 months to a year away - it'll be possible to do hybrid graphics correctly. At that point nVidia might reconsider supporting Optimus on Linux, as it will no longer be a huge technical mess to implement¹.

In terms of supporting hybrid graphics now, the Bumblebee project does something along those lines. It essentially runs a second X server on the nVidia card and copies across the output of the rendering. This is not as bad as it might sound - that's basically what the nVidia card does under Windows 7, too, just with a little bit of hardware support.

The Ubuntu X team does not plan to support Bumblebee or Ironhide (a fork of Bumblebee).

If your system has a BIOS option to switch between the Intel and nVidia cards then you can chose between them.

If your system has a hardware mux - so both the nVidia and Intel GPUs are connected to the outputs - and vga_swicheroo works, you can use that interface to switch between them, but only if you're using the open-source drivers. For 12.04 we plan to ensure that the unused GPU is turned off in this case, which should improve battery life.

If your system doesn't have a BIOS option and doesn't have a hardware mux that vga_switcheroo knows how to drive then your nVidia card will not be usable on 12.04.

¹: AMD's fglrx driver has some support for hybrid graphics. It appears to do this by pretending to be an X server and loading the Intel driver itself. This is not a clean solution ☺.


Your laptop is nvidia - optimus enabled. Its a dual graphics configuration to save power. Presently nvidia doesn't provide any support for this technology in linux. So in linux both graphics card are on which lead to high battery consumption and overheat. For more detail read the links listed below.

In optimus tech, the intel graphics is always on. When you use GT540M, images generated by GT540M actully transported through intel grphics card.

options available in linux

Turn off nvidia GT540M and use intel only. Use Nvidia card with special command only when required. Also never install nvidia-drivers alone.

Instruction for installing Bumblebee to turn off discrete GPU and enable only when required

  1. Type the following in terminal,

    sudo add-apt-repository ppa:bumblebee/stable
    

    then

    sudo apt-get update
    
  2. To install Bumblebee using the proprietary nvidia driver:

    sudo apt-get install bumblebee bumblebee-nvidia linux-headers-generic
    
  3. Reboot.


If you just want to disable nvidia card, no need to learn followings

Usage Instruction :

To run a program with nvidia card, use optirun command prefixed in terminal. Like to run glxspheres with nvidia card type. However a gui method also exist.

optirun glxspheres

To run firefox type:

optirun firefox &

Note: If you intend to run 32-bit programs like Wine and using Ubuntu 11.10 Oneiric or later, install 32-bit libraries with:

sudo apt-get install virtualgl-libs:i386 libgl1-mesa-glx:i386 libc6:i386

Linked Questions:

Can't use nvidia card/driver on optimus notebook


NVIDIA Optimus is not supported in any way on present unix platforms.

This is specifically for any laptop (mobile) NVIDIA based system that says OPTIMUS in its specifications list. You will not be able to even use the NVIDIA graphics in your Ubuntu. You will need to work with the integrated Intel Graphics drivers (to the extent they are supported for your platform -- Sandy Bridge support is still weak).

It should be noted that Optimus is different from the older ability to switch between the integrated (usually Intel) and discrete (NVIDIA, ATI) graphics systems. With Optimus, the integrated graphics path is always in use and lets you (additionally) enable the discrete graphics when required -- this needs Windows 7 at the moment (afaik, won't work on Vista either).

Here are a few references to get up to speed on this.

  1. UbuntuForums: nVidia Optimus and Ubuntu explained
  2. phoronix: Will NVIDIA Optimus Inevitably Come To Linux?
    Posted by Michael Larabel on April 25, 2011

hint: I use a XPS 15 L502x with the 525M Optimus discrete graphics.


Update: This is a quote from the NVIDIA Drivers 270.06 page in the Additional Information tab.

Some designs incorporating supported GPUs may not be compatible with the NVIDIA Linux driver: in particular, notebook and all-in-one desktop designs with switchable (hybrid) or Optimus graphics will not work if means to disable the integrated graphics in hardware are not available.

Now you know what to look for in your new NVIDIA based laptop specs if you want to drive the NVIDIA from linux.


Update: Look at the Bumblebee-Project.
Start from the README there.


Currently there is Bumblebee to support nVidia Optimus.

I have a Dell Latitude E6520 with Intel Core i5 (with built-in Intel graphics) and an nVidia 420M graphics card. You can run a program with optirun (type optirun programname in a terminal to start programname) and then it will be able to use the nVidia graphics.

I haven't tried it with CUDA programs.