As the title, how can I correctly setup nvidia-optimus technology on Ubuntu?

up vote 26 down vote accepted

NB: this post is the result of many days spent reading various stuffs on the web, so take it at your own risk. It was tested on Ubuntu 12.04/12.10/13.04/13.10/14.04 (all 64bit) with nVidia GT650M graphic card. Feel free to add comments and suggestions


Install nVidia and bumblebee

1. First of all, we have to delete all the video drivers on the computer:

sudo apt-get remove --purge nvidia*

Then bumblebee in case if you have installed it previously:

sudo apt-get remove --purge bumblebee*

We have also to delete all the nouveau driver with:

sudo apt-get --purge remove xserver-xorg-video-nouveau

To be sure to have deleted the whole stuffs, try to type dpkg -l | grep nvidia and dpkg -l | grep bumblebee: it shouldn't return anything. For dpkg -l | grep nouveau it is likely that it returns some lines saying libdrm-nouveauXXXXX; for now, just ignore them.

2. Then, we have to assure to have all the headers typing:

sudo apt-get install linux-source && sudo apt-get install linux-headers-$(uname -r)

3. The next thing to do is to blacklist the remaining nouveau drivers and some other packages that could cause problems:

sudo cp /etc/modprobe.d/blacklist.conf /etc/modprobe.d/blacklist.conf.bak
 sudo gedit /etc/modprobe.d/blacklist.conf

Adding the following lines at the end of file:

# Necessary to install nvidia drivers
blacklist nouveau
blacklist lbm-nouveau
blacklist nvidia-173
blacklist nvidia-96
blacklist nvidia-current
blacklist nvidia-173-updates
blacklist nvidia-96-updates
alias nvidia nvidia_current_updates
alias nouveau off
alias lbm-nouveau off
options nouveau modeset=0

Just save and exit.

4. Now, run the best knows ubuntu commands

sudo apt-get update && sudo apt-get dist-upgrade -y

5. From now, we works on tty. Open the tty1 console with CTRL+ALT+F1 and login with your username and password. Then execute:

sudo service lightdm stop

Now we will install the drivers. Execute:

sudo apt-get install nvidia-XXX-updates nvidia-settings

where XXX is the latest stable drivers. I'm using the 331 drivers, but I've read somewhere that the 343 are available to download (don't know if they are stable).

N.B: With the latest driver versions, it also install nvidia-prime by default. This technology is intended to automatically switch between Intel and nVidia graphic card without user intervention. To do this, it leaves both the cards turned on. Optimus, on the other hand, turn on the nVidia graphic card only with explicit user request; it translates in significantly less power consumption respect to prime.

I personally prefer optimus over prime, but if you don't bother on the enormous waste of energy, stop here. Otherwise, you have two options:

  • completely delete prime (sudo apt-get remove --purge nvidia-prime);

  • leave prime there; in section "Prime with optimus" we will see how to make optirun work also with prime installed

6. Now, we have to install bumblebee and the virtualgl packages with

sudo apt-get install bumblebee bumblebee-nvidia virtualgl virtualgl-libs virtualgl-libs-ia32:i386 virtualgl-libs:i386

Then, we have to add our user in the bumblebee group with:

sudo usermod -a -G bumblebee $USER

And then reboot the pc.

7. Login on your user account, open a new terminal window and type:

cd /etc/bumblebee
ls -Al

Among the various listed files, there should be two in particular: bumblebee.conf and xorg.nvidia.conf. Let's make a backup copy of both with:

sudo cp FILE_NAME FILE_NAME.bak

You should replace FILE_NAME with the actual name of the file. Then, let's go to modify the first file with sudo gedit bumblebee.conf, adding (all without quotes)

  • [bumblebeed] section: after "Driver=" insert "nvidia"
  • [nvidia-driver] section: after "KernelDriver=" insert "nvidia-XXX-updates"
  • [nvidia-driver] section: after "LibraryPath=" insert "/usr/lib/nvidia-XXX-updates, /usr/lib/nvidia-331-updates:/usr/lib32/nvidia-XXX-updates"
  • [nvidia-driver] section: after "XorgModulePath=" insert "/usr/lib/nvidia-XXX-updates/xorg,/usr/lib/xorg/modules"

Assure that the "XorgConfFile" under [nvidia-driver] is equal to "/etc/bumblebee/xorg.conf.nvidia" (again, without quotes), then save and close gedit.

Now we have to edit the other file with sudo gedit xorg.conf.nvidia (in this case we have to insert the quotes also!!). Replace Option "ConnectedMonitor" "DFP" with Option "UseDisplayDevice" "none", save and exit.

8. Run gedit /etc/modprobe.d/bumblebee.conf and make sure that all the lines containing blacklist <something> are not commented (i.e. they don't start with #).

9. At this point, run the following command

sudo service bumblebeed start

If it returns an error, try to run again the command with restart rather than start. If you have still errors, something like:

restart: Unknown job: bumblebeed

It's probably something wrong in the bumblebee.conf file; so, recheck step 7.

If instead the result is similar to:

bumblebeed start/running, process XXXXX

You're soon done setting up bumblebee!

10. Now we can simply run optirun glxspheres or optirun glxspheres64. If all work as expected, you have an output like this:

$ optirun glxspheres64
Polygons in scene: 62464
Visual ID of window: 0x20
Context is Direct
OpenGL Renderer: GeForce GT 650M/PCIe/SSE2
182.253407 frames/sec - 203.394802 Mpixels/sec
182.940725 frames/sec - 204.161849 Mpixels/sec
....

To double-check that we are actually using nvidia-drivers, open another terminal while optirun <application> is running, then type sudo lshw -c display | grep driver. The result should be something like that.

configuration: driver=nvidia latency=0
configuration: driver=i915 latency=0

If, on the other hand, you close all the application started with optirun it should show only the intel driver. That's it!!


Install Bumblebee UI

Thanks to this answer from Pavak Paul, here is the instructions to add the bumblebee user interface on Ubuntu 14.04 to manage apps to be opened using nVidia.

1. Install Python App Indicator:

sudo apt-get install python-appindicator

2. Install Git:

sudo apt-get install git

3. Make a directory for git:

mkdir git && cd git

4. Check out the repository:

git clone https://github.com/Bumblebee-Project/bumblebee-ui.git
cd bumblebee-ui
sudo ./INSTALL

5. Go to Startup Applications and add bumblebee-indicator [click on Add, then insert the Name and comment that you want; insert bumblebee-indicator in the command box and click on Add).

6. Reboot.


Prime with optimus

If you want to have the option to also use nvidia-prime sometimes, try to follow the instructions below.

1. To prevent bumblebeed from starting at boot-time, execute:

echo "manual" | sudo tee /etc/init/bumblebeed.override

2. This point is the most problematic; it prevents bumblebee to blacklist nVidia drivers and should result in graphic session freeze. Try it at your own risk! Run:

sudo gedit /etc/modprobe.d/bumblebee.conf

And comment the line containing your nVidia XXX drivers. It should result in something like that.

# XXX
#blacklist nvidia-XXX
#blacklist nvidia-XXX-updates
blacklist nvidia-experimental-XXX

3. Reboot the system and launch nvidia-settings. The final situation is this:

If you select "Intel (Power save)" in nvidia-settings, you have only the Intel graphic card turned on by default. You still have to run an application with optirun to use the nVidia graphic card

sudo service bumblebeed start
optirun <application>

If instead you want to use the "Nvidia (Performance)" profile, select it from nvidia-settings, then login/logout and all should work automatically. The only thing is that you don't have to launch bumblebeed daemon with this profile selected because it could cause troubles.

In case you have problems:

1. If you want to use only nvidia-prime:

sudo apt-get --purge remove bumblebee*

Then reboot.

2. If you want to use only optimus without removing nvidia-prime, edit again the previous file:

sudo gedit /etc/modprobe.d/bumblebee.conf

Uncommenting (removing the # character) from the lines previously modified:

# XXX
blacklist nvidia-XXX
blacklist nvidia-XXX-updates
blacklist nvidia-experimental-XXX

And rebooting. In this case, you can leave bumblebeed run at boot-time:

sudo rm /etc/init/bumbebeed.override
  • 1
    I followed the instructions on Ubuntu 14.04 , but my screen goes black after splash screen, and I am unable to login. Using Dell xps l502x, nvidia gfrc gt540m. – DeepSidhu1313 Jan 23 '15 at 8:05
  • 1
    Are you sure that you have followed all the instructions from the beginning? Anyway, press CTRL+ALT+F1 to access the tty, then enter your login credentials and restart from the beginning. – tigerjack89 Jan 23 '15 at 8:21
  • 1
    Ok i solved the problem by using vblank_mode=0 primusrun ./glxgears or we can use vblank_mode=0 optirun -b primus ./glxgears. thanks :) – DeepSidhu1313 Jan 23 '15 at 8:39
  • 1
    please note, i had to install xorg-edgers ppa to get the virtualgl packages. There were not available in a clean install Ubuntu 14.04 – Ubuntuser Jun 9 '15 at 14:31
  • 1
    This is by far the most up to date tutorial I'm up-voting this. I checked, and it works for 17.10. Good job. – Doodloo Oct 23 '17 at 9:53

protected by fossfreedom May 5 '15 at 6:11

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

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