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.

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.conffile 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 filesbumblebee-nvidia— integration with the Nvidia proprietary driverlinux-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.

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.

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.