Bumblebee doesn't work after suspend

Hello

I have openSUSE 13.2 on Lenovo IdeaPad Z710. I’ve installed driver with this tutorial https://en.opensuse.org/SDB:NVIDIA_Bumblebee and everything works. But when I suspend my notebook, discrete GPU (Nvidia) doesn’t work. Only computer restart helps. I searched solution but nothing helps me.

Log from optirun after suspend:


artur@laptop:~> optirun -vv glxspheres 
 1952.757562] [DEBUG]Reading file: /etc/bumblebee/bumblebee.conf
 1952.757917] [DEBUG]optirun version 3.2.1 starting...
 1952.757924] [DEBUG]Active configuration:
 1952.757925] [DEBUG] bumblebeed config file: /etc/bumblebee/bumblebee.conf
 1952.757927] [DEBUG] X display: :8
 1952.757928] [DEBUG] LD_LIBRARY_PATH: /usr/lib64/nvidia:/usr/lib/nvidia
 1952.757929] [DEBUG] Socket path: /var/run/bumblebee.socket
 1952.757946] [DEBUG] Accel/display bridge: auto
 1952.757948] [DEBUG] VGL Compression: proxy
 1952.757949] [DEBUG] VGLrun extra options: 
 1952.757950] [DEBUG] Primus LD Path: /usr/lib64/primus:/usr/lib/primus
 1952.757967] [DEBUG]Using auto-detected bridge virtualgl
 1952.769143] [INFO]Response: No - error: [XORG] (EE) Server terminated successfully (0). Closing log file.


 1952.769161] [ERROR]Cannot access secondary GPU - error: [XORG] (EE) Server terminated successfully (0). Closing log file.


 1952.769164] [DEBUG]Socket closed.
 1952.769184] [ERROR]Aborting because fallback start is disabled.
 1952.769187] [DEBUG]Killing all remaining processes.





Optirun after service restart

artur@laptop:~> sudo service bumblebeed restartroot's password:
artur@laptop:~> optirun -vv glxspheres 
 2000.827198] [DEBUG]Reading file: /etc/bumblebee/bumblebee.conf
 2000.827539] [DEBUG]optirun version 3.2.1 starting...
 2000.827555] [DEBUG]Active configuration:
 2000.827557] [DEBUG] bumblebeed config file: /etc/bumblebee/bumblebee.conf
 2000.827558] [DEBUG] X display: :8
 2000.827559] [DEBUG] LD_LIBRARY_PATH: /usr/lib64/nvidia:/usr/lib/nvidia
 2000.827561] [DEBUG] Socket path: /var/run/bumblebee.socket
 2000.827562] [DEBUG] Accel/display bridge: auto
 2000.827563] [DEBUG] VGL Compression: proxy
 2000.827565] [DEBUG] VGLrun extra options: 
 2000.827566] [DEBUG] Primus LD Path: /usr/lib64/primus:/usr/lib/primus
 2000.827582] [DEBUG]Using auto-detected bridge virtualgl
 2000.838181] [INFO]Response: No - error: Could not enable discrete graphics card


 2000.838192] [ERROR]Cannot access secondary GPU - error: Could not enable discrete graphics card


 2000.838194] [DEBUG]Socket closed.
 2000.838216] [ERROR]Aborting because fallback start is disabled.
 2000.838220] [DEBUG]Killing all remaining processes.



bumblebee.conf

# 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.
[bumblebeed]
# The secondary Xorg server DISPLAY number
VirtualDisplay=:8
# 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.
KeepUnusedXServer=false
# The name of the Bumbleblee server group name (GID name)
ServerGroup=bumblebee
# Card power state at exit. Set to false if the card shoud be ON when Bumblebee
# server exits.
TurnCardOffAtExit=false
# The default behavior of '-f' option on optirun. If set to "true", '-f' will
# be ignored.
NoEcoModeOverride=false
# 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)
Driver=
# Directory with a dummy config file to pass as a -configdir to secondary X
XorgConfDir=/etc/bumblebee/xorg.conf.d


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




# 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
[driver-nvidia]
# Module name to load, defaults to Driver if empty or unset
KernelDriver=nvidia
PMMethod=auto
# colon-separated path to the nvidia libraries
LibraryPath=/usr/lib64/nvidia:/usr/lib/nvidia
# comma-separated path of the directory containing nvidia_drv.so and the
# default Xorg modules path
XorgModulePath=/usr/lib64/nvidia/xorg/,/usr/lib64/xorg/modules
XorgConfFile=/etc/bumblebee/xorg.conf.nvidia


## Section with nouveau driver specific options, only parsed if Driver=nouveau
[driver-nouveau]
KernelDriver=nouveau
PMMethod=auto
XorgConfFile=/etc/bumblebee/xorg.conf.nouveau



xorg.conf.nvidia

Section "ServerLayout"    Identifier  "Layout0"
    Option      "AutoAddDevices" "false"
    Option      "AutoAddGPU" "false"
EndSection


Section "Device"
    Identifier  "DiscreteNvidia"
    Driver      "nvidia"
    VendorName  "NVIDIA Corporation"
    BusID "PCI:01:00:0"


#   If the X server does not automatically detect your VGA device,
#   you can manually set it here.
#   To get the BusID prop, run `lspci | egrep 'VGA|3D'` and input the data
#   as you see in the commented example.
#   This Setting may be needed in some platforms with more than one
#   nvidia card, which may confuse the proprietary driver (e.g.,
#   trying to take ownership of the wrong device). Also needed on Ubuntu 13.04.
#   BusID "PCI:01:00:0"


#   Setting ProbeAllGpus to false prevents the new proprietary driver
#   instance spawned to try to control the integrated graphics card,
#   which is already being managed outside bumblebee.
#   This option doesn't hurt and it is required on platforms running
#   more than one nvidia graphics card with the proprietary driver.
#   (E.g. Macbook Pro pre-2010 with nVidia 9400M + 9600M GT).
#   If this option is not set, the new Xorg may blacken the screen and
#   render it unusable (unless you have some way to run killall Xorg).
    Option "ProbeAllGpus" "false"


    Option "NoLogo" "true"
    Option "UseEDID" "false"
    Option "UseDisplayDevice" "none"
EndSection


Section "Screen"
    Identifier "Default Screen"
    Device "DiscreteNvidia"
EndSection


#Section "Screen"
#    Identifier "Default Screen"
#    Device "DiscreteNvidia"
#EndSection



I’m sorry for new post but I can’t find “Edit” button.

In dmesg I’ve found something interesting:

    1.816952] bbswitch: version 0.8    1.816957] bbswitch: Found integrated VGA device 0000:00:02.0: \_SB_.PCI0.GFX0
    1.816961] bbswitch: Found discrete VGA device 0000:01:00.0: \_SB_.PCI0.PEG0.PEGP
    1.817043] bbswitch: detected an Optimus _DSM function
    1.817090] bbswitch: disabling discrete graphics
    4.391587] bbswitch: Succesfully loaded. Discrete card 0000:01:00.0 is off
   14.397936] bbswitch: disabling discrete graphics	<-- operating system was loaded
  220.229993] bbswitch: enabling discrete graphics	<-- optirun glxspheres
  224.426442] bbswitch: disabling discrete graphics	<-- glxshperes was turn off
  412.028248] bbswitch: enabling discrete graphics	<-- after suspend

It looks like bbswitch is trying to enable discrete GPU (nvidia) after suspend but in ACPI it is mark as “OFF”:

artur@laptop:~> cat /proc/acpi/bbswitch 0000:01:00.0 OFF



Where I can disable “auto-enable GPU from suspend”? I’ve tried with /etc/modprobe.d/50-bbswitch.conf but it doesn’t help in my case.

options bbswitch load_state=0 unload_state=0



Try changing the content of the file /etc/modprobe.d/ 50-bbswitch.conf to:

options bbswitch load_state=-1 unload_state=1

whereby ‘load_state=-1’ means leave the state of the discrete graphics card as it was (1 meaning turn it on, 0 turn it off).

and call ‘mkinitrd’ afterwards. Reboot to activate new configuration.

Still the same.

  1. Is here any “Edit” button?
  2. I’ve done little experiment:

Before suspend I wrote these commands:


sudo service bumblebeed stop
sudo rmmod bbswitch

And after suspend:


sudo service bumblebeed start

But Bumblebee still doesn’t work after suspend. :frowning:


    1.838017] bbswitch: version 0.8
    1.838022] bbswitch: Found integrated VGA device 0000:00:02.0: \_SB_.PCI0.GFX0
    1.838027] bbswitch: Found discrete VGA device 0000:01:00.0: \_SB_.PCI0.PEG0.PEGP
    1.838108] bbswitch: detected an Optimus _DSM function
    1.838158] bbswitch: disabling discrete graphics
    4.446757] bbswitch: Succesfully loaded. Discrete card 0000:01:00.0 is off
   21.742193] bbswitch: disabling discrete graphics   <-- operating system was loaded
  267.358161] bbswitch: enabling discrete graphics   <-- optirun glxspheres (before suspend)
  281.731578] bbswitch: disabling discrete graphics   <-- glxshperes was turn off
  367.746860] bbswitch: Unloaded. Discrete card 0000:01:00.0 is off   <-- sudo rmmod bbswitch
  616.749541] bbswitch: version 0.8   <-- sudo service bumblebeed start (after suspend)
  616.749546] bbswitch: Found integrated VGA device 0000:00:02.0: \_SB_.PCI0.GFX0
  616.749550] bbswitch: Found discrete VGA device 0000:01:00.0: \_SB_.PCI0.PEG0.PEGP
  616.749632] bbswitch: detected an Optimus _DSM function
  616.749637] bbswitch: disabling discrete graphics
  616.841634] bbswitch: Succesfully loaded. Discrete card 0000:01:00.0 is off
  660.957999] bbswitch: enabling discrete graphics <-- <-- optirun glxspheres (after suspend)



Error after this little trick:


artur@laptop:~> optirun glxspheres 
  712.172077] [ERROR]Cannot access secondary GPU - error: [XORG] (EE) /dev/dri/card0: failed to set DRM interface version 1.4: Permission denied


  712.172124] [ERROR]Aborting because fallback start is disabled.



Did you

sudo service bumblebeed stop
sudo rmmod bbswitch

before suspending? Always, or just after reawakening from suspend did not bring up your graphics card correctly last time?

Did you run ‘sudo mkinitrd’ after changing /etc/modprobe.d/ 50-bbswitch.conf according to my last post?

I’ve stopped service and disable module only this one time to try find solution of my problem. Usual I just click “Suspend” button in KDE.

Yes. I’ve run ‘sudo mkinitrd’ after changing file. I’ve also tried two other combination in file but problem is still present.

Which is the present state of your /etc/modprobe.d/ 50-bbswitch.conf ?


artur@laptop:~> cat /etc/modprobe.d/50-bbswitch.conf 
options bbswitch load_state=0 unload_state=0


I had the same problem, tried this and it did the trick for me:

1 - Create this file:

/etc/pm/sleep.d/bumblebee

2 - Paste this:

#! /bin/sh

GPUDRIVER=nvidia-331-updates

if  ! -x /sys/bus/usb/devices/${BUS}-${DEVICE}/power/level ]; then
    exit 0
fi

case $1 in
     suspend|suspend_hybrid|hibernate)
        service bumblebeed stop
        modprobe -r bbswitch
        modprobe -r ${GPUDRIVER}
        ;;
     resume|thaw)
        modprobe ${GPUDRIVER}
        modprobe bbswitch
        service bumblebeed start
        :
        ;;
esac

3 - Don’t forget to replace GPUDRIVER by whatever driver you have installed. You must be able to load/unload that driver with modprobe manually for this to work.

4 - Make it executable:

sudo chmod +x /etc/pm/sleep.d/bumblebee

5- Reboot and try again.

If you were running an application that uses the 3D card, it will be hung after suspend and you will have to kill it. But you should be able to run it again if you wait a few seconds after resuming from suspend.