I have an Optimus laptop. I'll be running some heavy simulations so I need to use my discrete Nvidia GPU with properity drivers. And since using Nvidia GPU for everything wastes too much power, I need to be able to switch between Intel and Nvidia. I tried both Bumblebee and Prime, and both have the same problem: even when I'm using Intel GPU, Nvidia GPU is still powered on. I installed nvidia-361(nvidia-364 causes black screen) and nvidia-prime packages, rebooted, switched to Intel from NVIDIA X Server Settings, rebooted again and first thing I observed was extensive heat my laptop was generating so I ran powertop only to see this:

          100,0%      PCI Device: NVIDIA Corporation GK107M [GeForce GT 740M]

This usage value was 0% with nouveau driver. Then I installed Bumblebee with this command:

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

I edited /etc/bumblebee/bumblebee.conf, now it looks like this:

# Configuration file for Bumblebee. Values should **not** be put between quotes

## Server options. Any change made in this section will need a server restart
# to take effect.
# The secondary Xorg server DISPLAY number
# Should the unused Xorg server be kept running? Set this to true if waiting
# for X to be ready is too long and don't need power management at all.
# The name of the Bumbleblee server group name (GID name)
# Card power state at exit. Set to false if the card shoud be ON when Bumblebee
# server exits.
# The default behavior of '-f' option on optirun. If set to "true", '-f' will
# be ignored.
# The Driver used by Bumblebee server. If this value is not set (or empty),
# auto-detection is performed. The available drivers are nvidia and nouveau
# (See also the driver-specific sections below)
# Directory with a dummy config file to pass as a -configdir to secondary X

## Client options. Will take effect on the next optirun executed.
# Acceleration/ rendering bridge, possible values are auto, virtualgl and
# primus.
# The method used for VirtualGL to transport frames between X servers.
# Possible values are proxy, jpeg, rgb, xv and yuv.
# List of paths which are searched for the primus libGL.so.1 when using
# the primus bridge
# Should the program run under optirun even if Bumblebee server or nvidia card
# is not available?

# Driver-specific settings are grouped under [driver-NAME]. The sections are
# parsed if the Driver setting in [bumblebeed] is set to NAME (or if auto-
# detection resolves to NAME).
# PMMethod: method to use for saving power by disabling the nvidia card, valid
# values are: auto - automatically detect which PM method to use
#         bbswitch - new in BB 3, recommended if available
#       switcheroo - vga_switcheroo method, use at your own risk
#             none - disable PM completely
# https://github.com/Bumblebee-Project/Bumblebee/wiki/Comparison-of-PM-methods

## Section with nvidia driver specific options, only parsed if Driver=nvidia
# Module name to load, defaults to Driver if empty or unset
# colon-separated path to the nvidia libraries
# comma-separated path of the directory containing nvidia_drv.so and the
# default Xorg modules path

## Section with nouveau driver specific options, only parsed if Driver=nouveau

I rebooted and checked powertop again and the result was same, 100% usage. Then I checked my kernel output. dmesg | grep bbswitch:

[   26.135632] bbswitch: version 0.7
[   26.135640] bbswitch: Found integrated VGA device 0000:00:02.0: \_SB_.PCI0.GFX0
[   26.135646] bbswitch: Found discrete VGA device 0000:01:00.0: \_SB_.PCI0.PEG0.PEGP
[   26.135741] bbswitch: detected an Optimus _DSM function
[   26.135751] bbswitch: Succesfully loaded. Discrete card 0000:01:00.0 is on

dmesg | grep nvidia:

[   14.803636] nvidia: module license 'NVIDIA' taints kernel.
[   14.805959] nvidia: module verification failed: signature and/or  required key missing - tainting kernel
[   14.809434] nvidia-nvlink: Nvlink Core is being initialized, major device number 251
[   15.139887] [drm] Initialized nvidia-drm 0.0.0 20150116 for 0000:01:00.0 on minor 1
[   15.554841] nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  361.45.11  Tue May 17 17:49:04 PDT 2016
[   15.875205] nvidia-uvm: Loaded the UVM driver in lite mode, major device number 250
[   26.147993] nvidia-uvm: Unloaded the UVM driver in lite mode

Output of cat /proc/acpi/bbswitch:

0000:01:00.0 ON

Then I ran sudo tee /proc/acpi/bbswitch <<<OFF and ran the command above again and output was the same. Then I cheked dmesg for bbswitch entries and saw this:

[  953.576760] bbswitch: device 0000:01:00.0 is in use by driver 'nvidia', refusing OFF

I tried to unload nvidia with sudo rmmod nvidia:

rmmod: ERROR: Module nvidia is in use by: nvidia_modeset

After unloading nvidia_modeset I was able to unload nvidia and after that I ran sudo tee /proc/acpi/bbswitch <<<OFF again, this time it worked but output of powertop did not change. After a reboot, Nvidia GPU was still running. I added this line to my /etc/modprobe.d/bbswitch.conf:

options bbswitch load_state=0 unload_state=1

nouveau and nvidia are also blacklisted and I still cannot switch my Nvidia GPU off. I don't know what else I can do. What am I doing wrong?


You need to disable loading of nvidia drivers so bumblebee can do that later.

So edit:

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

add a new entry toward the end, with nvidia-xxx, in my case:

# nvidia-375
blacklist nvidia-375
blacklist nvidia-375-drm
blacklist nvidia-375-updates
blacklist nvidia-experimental-375

make sure to have the drm entry. This will completely disable loading of nvidia graphics on boot and bumblebee will handle the rest.

Check the guide to do this on xps-15 here: https://gist.github.com/whizzzkid/37c0d365f1c7aa555885d102ec61c048

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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