Need help with bbswitch?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

454 Stars 72 Forks GNU General Public License v2.0 102 Commits 63 Opened issues


Disable discrete graphics (currently nvidia only)

Services available


Need anything else?

Contributors list

Migrated from


bbswitch is a kernel module which automatically detects the required ACPI calls for two kinds of Optimus laptops. It has been verified to work with "real" Optimus and "legacy" Optimus laptops (at least, that is how I call them). The machines on which these tests has performed are:

  • Clevo B7130 - GT 425M ("real" Optimus, Lekensteyns laptop)
  • Dell Vostro 3500 - GT 310M ("legacy" Optimus, Samsagax' laptop)

(note: there is no need to add more supported laptops here as the universal calls should work for every laptop model supporting either Optimus calls)

It's preferred over manually hacking with the acpi_call module because it can detect the correct handle preceding _DSM and has some built-in safeguards:

  • You're not allowed to disable a card if a driver (nouveau, nvidia) is loaded.
  • Before suspend, the card is automatically enabled. When resuming, it's disabled again if that was the case before suspending. Hibernation should work, but it not tested.

Precautionary measure : - On some machines, turning off the card is permanent and the card does not reappear on subsequents reboots, which can result into the screen staying black all the time, including the BIOS screen. If it occurs, first try to shutdown, unplug power cord, remove battery, wait 30s, then put everything back in and boot. If it's not solved, then the solution is to reset the BIOS to factory settings. Before executing bbswitch for the first time, it is therefore recommended to take note of the full key sequence in the BIOS to do a reset.


Build the module (kernel headers are required):


Then load it (requires root privileges, i.e.

make load

If your card is supported, there should be no error. Otherwise, you get a "No such device" (ENODEV) error. Check your kernel log (dmesg) for more information.

DKMS support

If you have DKMS installed, you can install bbswitch in such a way that it survives kernel upgrades. It is recommended to remove older versions of bbswitch by running

dkms remove -m bbswitch -v OLDVERSION --all
as root. To install the new version, simply run:
# make -f Makefile.dkms

To uninstall it, run:

# make -f Makefile.dkms uninstall


bbswitch has three commands to check the card status and switching (

means "run with root privileges, i.e. run it prefixed with

Get the status:

# cat /proc/acpi/bbswitch  
0000:01:00.0 ON

Turn the card off, respectively on:

# tee /proc/acpi/bbswitch <<

If the card stays on when trying to disable it, you've probably forgotten to unload the driver,

$ dmesg |tail -1
bbswitch: device 0000:01:00.0 is in use by driver 'nouveau', refusing OFF

Do not attempt to load a driver while the card is off or the card won't be usable until the PCI configuration space has been recovered (for example, after writing the contents manually or rebooting).

Module options

The module has some options that control the behavior on loading and unloading:

. Valid values are
meaning "do not change the card state", "turn the card off" and "turn the card on" respectively. For example, if you want to have
disable the card immediately when loading the module while enabling the card on unload, load the module with:
# modprobe bbswitch load_state=0 unload_state=1


value can be changed on runtime, the above command yields the same behavior as:
# modprobe bbswitch load_state=0
# echo 1 | tee /sys/module/bbswitch/parameters/unload_state

If not explictly set, the default behavior is not to change the power state of the discrete video card which equals to

load_state=-1 unload_state=-1

The Lenovo T410 and Lenovo T410s laptops need the module option

, otherwise it will detect the wrong methods which result in the card not being disabled.

Disable card on boot

These options can be useful to disable the card on boot time. Depending on your distribution,

or some other file can be used to load modules on boot time. Adding the below line to the file makes the card get disabled on boot:
bbswitch load_state=0

Users of

should create
options bbswitch load_state=0
to set the default options. To load the module, systemd users should create

You have to update your initial ramdisk (initrd) for the changes propagate to the boot process. On Debian and Ubuntu, this can performed by running

update-initramfs -u
as root.

Enable card on shutdown

Some machines do not like the card being disabled at shutdown.
Add the next initscript (

) :
description "Save power by disabling nvidia on Optimus"
author      "Lekensteyn "
start on    runlevel [2345]
stop on     runlevel [016]
pre-start   exec /sbin/modprobe bbswitch load_state=0 unload_state=1
pre-stop    exec /sbin/rmmod bbswitch 

Reporting bugs

This module has been integrated in Bumblebee "Tumbleweed". Please report any issues on this module in the issue tracker and provide the following details:

  • The output of
    dmesg | grep -C 10 bbswitch:
  • The kernel version
    uname -a
  • Your distribution and version (if applicable)
  • The version of your Xorg and the driver
  • Submit your machine information on; the instructions are listed in the bug description. Summary: install the packages containing

    and then run:
  • Information about the ACPI handles associated with PCI devices. Since this is a kernel module, you'll need kernel headers, gcc and automake. Commands:

    git clone git:// --depth 1
    cd acpi-stuff/acpi_dump_info
    sudo make load
    cat /proc/acpi/dump_info

Upload the generated tarball on the above Launchpad URL and provide a link to the comment containing your report.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.