NVIDIA Optimus Bumblebee
This page discusses third-party software sources not officially affiliated with or endorsed by the Fedora Project. Use them at your own discretion. Fedora recommends the use of free and open source software and avoidance of software encumbered by patents.
NVIDIA Optimus is an optimization technology created by NVIDIA which, depending on the resource load generated by client software applications, will transparently and seamlessly switch between two graphics adapters within a computer system in order to provide either maximum performance or minimum power draw from the system’s graphics rendering hardware. From Bumblebee’s FAQ: Bumblebee is a effort to make NVIDIA Optimus enabled laptops work in GNU/Linux systems. Such feature involves two graphics cards with two different power consumption profiles plugged in a layered way sharing a single framebuffer.
The discrete GPU (NVIDIA) is turned off when not in use and activated and turned on though ACPI calls when demanding OpenGL applications require the extra power the discrete GPU can give.
Demanding OpenGL applications might include such things as 3D games or 3D rendering software but would not include such things as a web browser or a video playback program like mplayer or VLC.
If you have a laptop with an NVIDIA graphics card (usually you can tell by looking for an NVIDIA logo sticker on it), then it might support the Optimus technology. If you don’t have an optimus technology computer nothing in this documentation is relevant to your PC. (Optimus was slated at one point to go in desktop PCs but the industry ended up rejecting that concept…)
To tell, after you have installed the OS, open a terminal window and type:
$ lspci -vnn | grep '\''[030\]'
If you see two video cards in the output like:
00:02.0 VGA compatible controller : Intel Corporation HD Graphics 520 [8086:1916] (rev 07) (prog-if 00 [VGA controller]) 01:00.0 3D controller : NVIDIA Corporation GM108M [GeForce 930M] [10de:1346] (rev ff) (prog-if ff)
And one is a Intel Integrated Graphics Controller and the other is a NVIDIA Corporation chip, then you probably have an optimus notebook.
To further verify, if you have the two VGA devices with one as Intel Integrated and other as NVIDIA, as root look for the
If it exists, then you have an optimus PC.
If its missing, then you might not.
(It might be that you have a card that nouveau can’t use yet because it is too new…)
Most users will want to turn off Secure boot in the BIOS or UEFI screen when you need nvidia drivers or bbswitch-dkms.
If you want to make your own public / private keys for kernel module signing you can look here or here for more information on the subject.
If you end up doing that and use the closed source NVIDIA driver, you will need to edit the
dnf update before you begin.
And just to be safe, reboot your PC so that you are booted into the newest kernel.
The reason for this is that you want the kernel-devel package to match the kernel you are running under.
If you don’t reboot after a
dnf update these versions may differ which will cause compiling problems.
|As of May 20th, 2016 you can no longer use Bumblebee with the open source Nouveau drivers. If you wish to learn more about this, see issue 773. Users are requested to use Prime instead of Bumblebee. Since the nouveau driver already handles power saving now, using bumblebee would simply be superfluous.|
In fact, you can no longer use the Bumblebee software with nouveau any longer even if you want to. See issue 773 for further information about this subject. You MUST USE PRIME. The nouveau driver already handles power saving nowadays so Bumblebee would just be superfluous…
Some users may prefer to use the closed-source proprietary drivers as they offer better performance than the open source ones. In that case, Fedora-compatible driver packages can be obtained from this source: RPM Fusion.
To install the NVIDIA drivers, first add the RPM Fusion repository:
# sudo dnf install fedora-workstation-repositories # sudo dnf config-manager rpmfusion-nonfree-nvidia-driver --set-enabled
Then, install the necessary packages:
# sudo dnf install akmod-nvidia acpi
To get Bumblebee, we first need to enable the https://copr.fedorainfracloud.org/coprs/chenxiaolong/bumblebee/ chenxiaolong/bumblebee[Copr repository]:
# dnf copr enable chenxiaolong/bumblebee
Next, install the bbswitch driver, and the
# dnf install akmod-bbswitch bumblebee primus
primusruncommands to work, the current user must be added to the
# gpasswd -a $USER bumblebee
bumblebeedservice and disable the
nvidia-fallbackservice. This service comes from the packaged drivers and will attempt to load
nvidiafails to load. However, when using Bumblebee, neither one should load at boot.
# systemctl enable bumblebeed # systemctl mask nvidia-fallback
Finally, reboot and bumblebee should be ready to go.
General usage syntax:
$ optirun [options] application [application-parameters]
To start a Windows applications with optimus named application.exe:
$ optirun wine application.exe
For another example, open NVidia settings panel with optimus:
$ optirun -b none nvidia-settings -c :8
For another example, open the java based Minecraft with primus bridge:
$ optirun -b primus java -jar /PATH/TO/Minecraft.jar
For a list of the options for optirun, view its manual page:
$ man optirun
In general, using the Primus bridge gives better performance then using the default VirtualGL bridge. In Bumblebee 4.0 (coming soon) Primus will become the default bridge and VirtuaGL will need to be called explicitly if you still want it. Also beginning with bumblebee 4.0 (coming soon) the VirtuaGL dependency will be replaced with a Primus dependency instead. So you might not even have VirtuaGL installed by default in the future.
For Primus, there is a separate shell script you can use to invoke it called
For a list of the options for primusrun, view its manual page:
$ man primusrun
These are functionally equivalent commands:
$ primusrun java -jar /PATH/TO/Minecraft.jar
$ optirun -b primus java -jar /PATH/TO/Minecraft.jar
It may become tedious to always use the optirun program in a terminal to launch 3D games or other 3D opengl applications.
You may wish to create desktop launchers which use the
primusrun commands in order to streamline this process.
For example, in the MATE desktop environment, when you right click on an empty space in the desktop a popup menu is displayed. One option on this menu is btn:[Create launcher…] which allows you to create a graphical launcher icon for your apps which can be left on the desktop or moved into some folder. Other desktop environments also offer this functionality though the methods differ from desktop to desktop.
To uninstall Bumblebee:
# dnf remove akmod-bbswitch bumblebee primus # systemctl preset nvidia-fallback
To remove the
# dnf copr remove chenxiaolong/bumblebee
To uninstall the NVIDIA drivers:
# dnf remove akmod-nvidia xorg-x11-drv-nvidia\*
To remove the nvidia-driver repository:
# sudo dnf config-manager rpmfusion-nonfree-nvidia-driver --set-disabled
Optimus laptops have two graphics cards: an integrated Intel and a discrete NVIDIA one. If the port (DisplayPort / HDMI / VGA) is wired to the Intel chip, you do not need to do anything special to get external monitors to work.
When the external port is wired into the NVIDIA card, you cannot currently expand the screen over monitors without extra effort. Read on if you fall into this category…
# dnf install intel-gpu-tools
intel-virtual-outputdaemon by running the
intel-virtual-outputcommand with no additional command line options.
This daemon will automatically detect attached displays in the background. It will then perform all the trickery of virtualizing and cloning so that the newly attached screen can be used via conventional screen management methods, such as cloning/extending with xrandr.
For example, if your laptop’s display is called eDP1, and your using a external adapter called HDMI1, and you want the display to be 1920×1080 resolution, you could run the following commands:
To have your HDMI screen to the right of your desktop, run:
$ xrandr –output eDP1 –mode 1920×1080 –output HDMI1 –mode 1920×1080 –right-of eDP1
To clone your desktop, run:
$ xrandr –output eDP1 –mode 1920×1080 –output HDMI1 –mode 1920×1080 –same-as eDP1
There are many different possibilities. Type
xrandr with no arguments to see what displays you have attached.
See this web page for further information on this subject.
Read the manual page for xrandr for even more information on the possibilities this command provides.
intel-virtual-output works ok running by hand you could add it to your startup automatically if you desire.
One way would be to create a
/etc/rc.d/rc.local script and add it into there.
Another way might be to create a systemd unit file as
A third way might be to run it at login using whatever mechanism your desktop environment supports for doing such things.
For example, in the MATE desktop environment, there is a
mate-session-properties program (System → Preferences → Personal → Startup Applications) that you can run programs from when you login.
Most desktop environments offer similar functionality though the methods differ from desktop to desktop.
There is a known problem with some wine applications that fork and kill the parent process without keeping track of it (for example the free to play online game "Runes of Magic")
This is a known problem with VirtualGL. As of Bumblebee 3.1, so long as you have it installed, you can use Primus as your render bridge:
$ optirun -b primus wine windows program.exe
In some instances, running
optirun will return:
[ERROR]Cannot access secondary GPU - error: [XORG] (EE) No devices detected. [ERROR]Aborting because fallback start is disabled.
In this case, you will need to move the file
/etc/X11/xorg.conf.d/20-intel.conf to somewhere else, restart the bumblebeed daemon and it should work.
If you do need to change some features for the Intel module, a workaround is to merge
It might be also necessary to comment the driver line in
You might also need to define the NVIDIA card somewhere (e.g.
file /etc/bumblebee/xorg.conf.nvidia), using the correct
BusID according to
Section "Device" Identifier "nvidiagpu1" Driver "nvidia" BusID "PCI:0:1:0" EndSection
Note that the format of
lspci output is in hexadecimal format, while in xorg it is in decimal.
So if the output of
lspci is, for example,
BusID should be
If the console output is:
[ERROR]Cannot access secondary GPU - error: [XORG] (EE) NVIDIA(0): Failed to assign any connected display devices to X screen 0 [ERROR]Aborting because fallback start is disabled.
Change this line in
Option "ConnectedMonitor" "DFP"
Option "ConnectedMonitor" "CRT"
If the console output is:
[ERROR]Cannot access secondary GPU - error: Could not load GPU driver
And if you try to load the
nvidia kernel module you get:
modprobe nvidia modprobe: ERROR: could not insert 'nvidia': Exec format error
This could be because the nvidia driver is out of sync with the Linux kernel, for example if you installed the latest nvidia driver and haven’t updated the kernel in a while. A full system update might resolve the issue.
This could be worked around by appending following lines in
Section "Screen" Identifier "Default Screen" Device "DiscreteNvidia" EndSection
You’re probably trying to start a 32-bit application with Bumblebee on a 64-bit system. Please install the 32-bit versions of the packages mentioned above.
If the problem persists, please try using the primus bridge that was mentioned above.
Your program forks into background and bumblebee doesn’t know anything about it.
Video tearing is a somewhat common problem on Bumblebee.
To fix it, you need to enable vsync.
It should be enabled by default on the Intel card, but verify that from Xorg logs.
To check whether or not it is enabled for NVIDIA, make sure
nvidia-settings is installed and run:
# optirun -b none nvidia-settings -c :8
X Server XVideo Settings → Sync to VBlank and
OpenGL Settings → Sync to VBlank should both be enabled.
If the console output is:
[ 1648.179533] [ERROR]You've no permission to communicate with the Bumblebee daemon. Try adding yourself to the 'bumblebee' group [ 1648.179628] [ERROR]Could not connect to bumblebee daemon - is it running?
Verify whether or not you are in the
# groups | grep bumblebee
Another reason for this error could be that you haven’t actually turned on both gpus in your bios, and as a result, the Bumblebee daemon is in fact not running. Check the bios settings carefully and be sure intel graphics (integrated graphics - may be abbreviated in bios as something like igfx) has been enabled or set to auto, and that it’s the primary gpu. Your display should be connected to the onboard integrated graphics, not the discrete graphics card.
If you mistakenly had the display connected to the discrete graphics card and intel graphics was disabled, you probably installed Bumblebee after first trying to run Nvidia alone.
In this case, be sure to remove the
…/20-nvidia… configuration files. If Xorg is instructed to use NVIDIA in a conf file, X will fail.
primusrun, VSYNC is enabled by default and as a result, it could make mouse input delay lag or even slightly decrease performance.
primusrun without VSYNC:
$ vblank_mode=0 primusrun glxgears
If you are satisfied with the above setting, create an alias (e.g.
alias primusrun="vblank_mode=0 primusrun").
Since compositing hurts performance, invoking
primus when a compositing WM is active is not recommended.
If you need to use
primus with compositing and see flickering or bad performance, synchronizing primus’ display thread with the application’s rendering thread may help:
$ PRIMUS_SYNC=1 primusrun ...
|optirun crashes after you boot into Troubleshooting → Start Fedora Live in basic graphics mode” and do an install that way.|
If you did an install under Troubleshooting → Start Fedora Live in basic graphics mode, then Bumblebee will not work.
You can tell by examining the
/var/log/Xorg.8.log log file and looking for Kernel command line: and seeing nomodeset on that line.
When you use Start Fedora Live in basic graphics mode it adds nomodeset to your kernel command line which will cause your machine to use the VESA driver and make Bumblebee not work.
(It will just crash when you try) To fix that, edit
/etc/default/grub and on the GRUB_CMDLINE_LINUX= line, remove the word nomodeset and then save the file, next, either run:
# grub2-mkconfig -o /boot/grub2/grub.cfg
on a BIOS based notebook or
# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
on a UEFI based notebook. Then reboot. After that bumblebee/optirun/primusrun should start working.
Some recent laptop models featuring AMI bioses have some compatibility issues with bbswitch and Optimus, making them unable to load into graphics mode and crashing every time it is attempted, as discussed in further details this post on the Bumblebee’s GitHub project page.
If you are trying to use Linux on a recent Optimus laptop and it crashes every time you try to enter a graphics environment, please try adding the following parameters to your boot loader (Fedora users usually have GRUB installed):
acpi_osi=! acpi_osi='Windows 2009'
This seems to work on most laptop models facing this issue, but bear in mind that this workaround has not been tested in every laptop model ever made – so your mileage may vary. If the problems persist, you could try updating your BIOS or look for more info in the Bumblebee documentation and their community.
If you have a newer laptop (BIOS date 2015 or newer), then Linux 4.8 might break bbswitch since bbswitch does not support the newer, recommended power management method. As a result, the dGPU may fail to power on, fail to power off or worse.
See Issue 140 for further information about this problem.
As a workaround, add
pcie_port_pm=off to your kernel parameters.
Alternatively, if you are only interested in power saving (and perhaps use of external monitors), remove Bumblebee / bbswitch and rely on nouveau runtime power-management (which supports the new method).
On Fedora 25 and 26 a new library called libglvnd was added which initially caused some issues.
primus-1.1.03282015-4 and newera, bumblebee-3.2.1-13 and newer, and (managed version) bumblebee-nvidia-375.26-2 and newer, and (un-managed version) bumblebee-nvidia-3.0-2 and newer will work with the newer mesa and new libglvnd library.
When you first upgrade to mesa-13.0.3-6 or newer bumblebee-nvidia doesn’t know that it needs to rebuild the shim. So you can force that by running the command:
su as root or via
sudo. And the primus bridge should work after that.
You can track this issue upstream here.
See a typo, something missing or out of date, or anything else which can be improved? Edit this document at quick-docs’s git repository.