Bumblebee 3.0: Nvidia Optimus GPU Switching for Linux — Installation Guide

Bumblebee 3.0: Nvidia Optimus GPU Switching for Linux — Installation Guide

How to install Bumblebee 3.0 Tumbleweed on Ubuntu for Nvidia Optimus GPU switching — covering PPA setup, driver configuration, optirun and primusrun usage, power management with bbswitch, and troubleshooting common failures.

Tested on: Ubuntu 11.10Ubuntu 12.04 LTS

In January 2012, the Bumblebee project released version 3.0 — codenamed Tumbleweed — and it was, without exaggeration, the single most important update for anyone running an Nvidia Optimus laptop on Linux. The previous 2.x releases were functional but fragile: built on shell scripts, prone to race conditions when the daemon tried to initialise the GPU, and painful to debug when something went wrong. Bumblebee 3.0 replaced all of that with a proper C daemon, clean configuration files, and a power management architecture that actually worked. This guide covers installing Bumblebee 3.0 on Ubuntu 11.10 and 12.04, configuring the Nvidia proprietary driver, verifying GPU offloading with optirun, and setting up bbswitch for proper power management. We have deployed this on ThinkPad T420s, Dell XPS 15 L502X, and Asus N55SF laptops — the steps are consistent across all of them. For a broader look at the entire Optimus landscape on Ubuntu, including the modern PRIME approach, see our Nvidia Optimus guide.

Bumblebee 3.0 architecture diagram showing Intel GPU, Nvidia GPU, and the bumblebeed daemon

Why Bumblebee 3.0 Mattered

Nvidia Optimus is a hybrid graphics technology: laptops ship with an integrated Intel GPU (low power, connected to the display) and a discrete Nvidia GPU (high performance, no direct display output). On Windows, Nvidia’s driver seamlessly routes rendering to whichever GPU is appropriate. On Linux in 2012, Nvidia provided absolutely nothing — no driver support, no documentation, no acknowledgement that the problem existed.

The Bumblebee project was the community’s answer. Version 3.0 brought:

  • A C-based daemon (bumblebeed) that managed the Nvidia GPU’s lifecycle — powering it on when needed, initialising a secondary X server, and powering it down when idle.
  • bbswitch integration — a kernel module that could cut power to the Nvidia GPU via ACPI calls, reducing idle power consumption by 5–15 watts on most laptops.
  • Cleaner configuration — a single /etc/bumblebee/bumblebee.conf file replaced the scattered configuration approach of 2.x.
  • Bridge abstraction — support for both VirtualGL and (later) Primus as the frame transport layer between the Nvidia GPU and the Intel display.

Prerequisites

Before installing Bumblebee 3.0, confirm that your laptop actually has an Optimus configuration:

lspci | grep -i vga

You should see two entries — one Intel, one Nvidia. If you only see one GPU, your laptop is not Optimus and Bumblebee is not needed.

Also confirm your Ubuntu version:

lsb_release -a

This guide targets Ubuntu 11.10 (Oneiric) and Ubuntu 12.04 LTS (Precise). The PPA packages are version-specific.

Step-by-Step Installation

Step 1: Add the Bumblebee PPA

The stable PPA provides tested packages for supported Ubuntu releases:

sudo add-apt-repository ppa:bumblebee/stable
sudo apt-get update

Step 2: Install Bumblebee and the Nvidia Driver

sudo apt-get install bumblebee bumblebee-nvidia linux-headers-generic

This pulls in:

  • bumblebee — the daemon, optirun launcher, and configuration files
  • bumblebee-nvidia — integration with the Nvidia proprietary driver
  • linux-headers-generic — required for DKMS to compile the Nvidia kernel module and bbswitch

Step 3: Install bbswitch for Power Management

sudo apt-get install bbswitch-dkms

bbswitch is a kernel module that sends ACPI calls to power the Nvidia GPU on and off. Without it, the discrete GPU stays powered on constantly, draining battery and generating heat even when idle.

Step 4: Add Your User to the Bumblebee Group

sudo usermod -aG bumblebee $USER

Log out and log back in. Bumblebee restricts GPU access to members of this group — without it, optirun will refuse to connect to the daemon.

Step 5: Reboot

sudo reboot

A reboot is necessary for the bbswitch module to load at boot and for the bumblebeed daemon to start with the correct configuration.

Step 6: Verify the Installation

After rebooting, check that the daemon is running:

sudo service bumblebeed status

Check that bbswitch loaded and the GPU is off:

cat /proc/acpi/bbswitch

You should see something like 0000:01:00.0 OFF. Now test GPU offloading:

optirun glxinfo | grep "OpenGL renderer"

This should display your Nvidia GPU model (e.g., GeForce GT 540M). If it shows the Intel GPU or throws an error, consult the troubleshooting section below.

Terminal output showing optirun glxinfo confirming Nvidia GPU activation

Configuring Bumblebee 3.0

The main configuration file is /etc/bumblebee/bumblebee.conf. Open it with your preferred editor:

sudo nano /etc/bumblebee/bumblebee.conf

Key settings to verify:

Driver — should be set to nvidia for the proprietary driver:

Driver=nvidia

PMMethod — the power management backend. Set to bbswitch:

PMMethod=bbswitch

TurnCardOffAtExit — powers down the GPU when the last optirun process exits:

TurnCardOffAtExit=true

Bridge — controls the frame transport method. VirtualGL is the default in 3.0:

Bridge=auto

The companion file /etc/bumblebee/xorg.conf.nvidia controls the secondary X server. The critical setting here is BusID — it must match the PCI address of your Nvidia GPU:

lspci | grep -i nvidia

If lspci shows 01:00.0, the BusID in the Xorg config should be PCI:01:00:0 (note the colon-separated format). Getting this wrong is the most common cause of “cannot access secondary GPU” errors.

After any configuration change, restart the daemon:

sudo service bumblebeed restart

Using optirun for GPU Offloading

With Bumblebee installed, launch any application on the Nvidia GPU by prefixing it with optirun:

optirun glxgears

Compare the frame rate to running glxgears without optirun — the difference should be dramatic on 2012-era hardware. For games:

optirun wine GameExecutable.exe
optirun ./native-game-binary

You can also set compression and transport options for optirun when running over VirtualGL:

optirun -b virtualgl -c jpeg glxgears

The -c jpeg flag uses JPEG compression for frame transport, which reduces CPU overhead at the cost of some visual quality. For local use, the default settings are usually fine.

Bumblebee 3.0 configuration file open in nano showing driver and power management settings

Common Pitfalls

“Cannot access secondary GPU” on first run. The most frequent cause is a BusID mismatch. Verify with lspci | grep -i nvidia and compare against the BusID in /etc/bumblebee/xorg.conf.nvidia. The format difference catches many people: lspci uses 01:00.0 (dot), Bumblebee uses PCI:01:00:0 (colons).

bumblebeed fails to start after installation. Check the log: cat /var/log/syslog | grep bumblebeed. Common causes include the Nvidia kernel module not being built (missing linux-headers), a conflicting Xorg configuration in /etc/X11/, or the user not being in the bumblebee group.

Laptop battery drains quickly despite Bumblebee. If cat /proc/acpi/bbswitch shows ON when no optirun process is running, bbswitch is not powering down the GPU. Verify the PMMethod is set to bbswitch in bumblebee.conf and that bbswitch-dkms is installed. Run sudo modprobe bbswitch manually and check dmesg | grep bbswitch for errors. Some BIOS versions on certain laptop models (notably some Lenovo IdeaPad models) had ACPI tables that confused bbswitch — a BIOS update sometimes resolved this.

optirun works but performance is poor. VirtualGL adds overhead — frames are rendered on the Nvidia GPU, copied to system memory, and composited onto the Intel GPU’s display. This bottleneck was more pronounced on USB 2.0-era PCI Express bandwidth and older CPUs. Later Bumblebee releases added Primus support (primusrun), which was significantly faster. On Bumblebee 3.0, ensure you are not inadvertently using software rendering by checking optirun glxinfo | grep "direct rendering" — it should say Yes.

Nvidia driver fails to build after kernel update. When Ubuntu pushes a kernel update, DKMS must rebuild the Nvidia module. If it fails (often due to missing headers for the new kernel), optirun will stop working after reboot. Install the headers for the new kernel: sudo apt-get install linux-headers-$(uname -r) and then rebuild: sudo dpkg-reconfigure nvidia-current.

X server crashes on login after changing bumblebee.conf. Boot into recovery mode (hold Shift at GRUB, select recovery mode), drop to a root shell, and restore the default configuration: sudo apt-get install --reinstall bumblebee. Alternatively, examine /var/log/Xorg.0.log for specific errors — the secondary X server’s log is usually at /var/log/Xorg.8.log.

The Broader Picture

Bumblebee 3.0 was a turning point for Optimus support on Linux, but it was always a workaround for a problem that Nvidia should have solved. The community maintained Bumblebee through 2018, adding Primus support, improving power management, and expanding hardware compatibility. By 2019, Nvidia finally shipped PRIME render offloading in their proprietary driver (version 435+), and Ubuntu 19.10 was the first release to support it out of the box. Today, if you are running a modern Ubuntu release on an Optimus laptop, PRIME is the correct solution. But for anyone maintaining older hardware on Ubuntu 11.10 or 12.04, Bumblebee 3.0 remains the definitive answer — and it is worth understanding how it works, because the concepts of GPU offloading, power management, and bridge rendering that Bumblebee pioneered are the same concepts that underpin PRIME today. For a deeper dive into the GUI configuration tool that made managing Bumblebee settings easier, see our Bumblebee Configurator guide.

Frequently Asked Questions

What changed between Bumblebee 2.x and Bumblebee 3.0?
Bumblebee 3.0 (Tumbleweed) was a complete rewrite. The daemon (bumblebeed) was rebuilt in C instead of shell scripts, making it faster and more reliable. Power management was abstracted into pluggable backends (bbswitch became the primary method), the VirtualGL bridge was improved, and initial support for the Primus bridge was introduced. Configuration moved from scattered scripts to a single /etc/bumblebee/bumblebee.conf file.
Does Bumblebee 3.0 work with the open-source nouveau driver?
Yes. Bumblebee 3.0 supports both the proprietary nvidia driver and the open-source nouveau driver. However, nouveau performance was significantly lower — often 30-50% of the proprietary driver — and it lacked CUDA and OpenCL support entirely. For gaming or GPU compute, the nvidia driver was the only practical option.
Can I use Bumblebee 3.0 on a desktop with two GPUs?
Bumblebee was designed specifically for Optimus laptops where the Nvidia GPU has no direct display output and must route frames through the Intel GPU. On desktops with two discrete GPUs that each have their own outputs, Bumblebee is not the right solution. Use standard multi-GPU Xorg configuration instead.
Is Bumblebee still relevant today?
Bumblebee is a legacy solution. Nvidia added native PRIME render offload support to their proprietary driver starting with version 435 in 2019. Ubuntu 19.10 and later support this natively. If you are running a modern Ubuntu release, use PRIME offloading instead of Bumblebee. For older systems on Ubuntu 11.10 or 12.04, Bumblebee 3.0 remains the correct approach.
Why does my laptop run hot even with Bumblebee installed?
If the Nvidia GPU is not powering down when idle, bbswitch may not be loaded or configured correctly. Check with ‘cat /proc/acpi/bbswitch’ — it should show OFF when no optirun process is running. If bbswitch is not loaded, verify that bbswitch-dkms is installed and that your kernel headers match your running kernel.