From Fedora Project Wiki

No edit summary
(Updated the installation process to a better one to reduce confusion. Added a few common issues and their fixes.)
(17 intermediate revisions by 6 users not shown)
Line 12: Line 12:


<pre>
<pre>
$ lspci | grep VGA
$ lspci -vnn | grep '\''[030[02]\]'
</pre>
</pre>


Line 18: Line 18:


<pre>
<pre>
$ lspci | grep VGA
$ lspci -vnn | grep '\''[030[02]\]'
00:02.0 VGA compatible controller: Intel Corporation 4th Gen Core Processor Integrated Graphics Controller (rev 06)
00:02.0 VGA compatible controller [0300]: Intel Corporation HD Graphics 520 [8086:1916] (rev 07) (prog-if 00 [VGA controller])
01:00.0 VGA compatible controller: NVIDIA Corporation GK208M [GeForce GT 730M] (rev ff)
01:00.0 3D controller [0302]: NVIDIA Corporation GM108M [GeForce 930M] [10de:1346] (rev ff) (prog-if ff)
</pre>
</pre>


And one is a Intel “Integrated Graphics Controller” and the other is a “NVIDIA Corporation” chip, then you probably have an optimus notebook.
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 /sys/kernel/debug/vgaswitcheroo/switch file. If it exists, then you have an optimus PC. If its missing, then you do not.
To further verify, if you have the two VGA devices with one as Intel Integrated and other as NVIDIA, as root look for the /sys/kernel/debug/vgaswitcheroo/switch file. 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…)


== Before you get started ==
== Before you get started ==


Most users will want to turn off “Secure boot” in the bios or UEFI screen if you need nvidia drivers or bbswitch-dkms. If you want to make your own public / private keys for kernel module signing you can look [https://docs.fedoraproject.org/en-US/Fedora/22/html/System_Administrators_Guide/sect-signing-kernel-module-with-the-private-key.html here] or [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-signing-kernel-modules-for-secure-boot.html 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 /etc/bumblebee/bumblebee-nvidia-sign.conf file.
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 [https://docs.fedoraproject.org/en-US/Fedora/22/html/System_Administrators_Guide/sect-signing-kernel-module-with-the-private-key.html here] or [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-signing-kernel-modules-for-secure-boot.html 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 /etc/bumblebee/bumblebee-nvidia-sign.conf file.


Next, do a yum update or a dnf update before you begin. And just to be safe, reboot your PC so that you are booted into the newest kernel. You only need to yum update or dnf update and a reboot if you are using bbswitch-dkms and / or the closed source NVidia video drivers. 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 yum / dnf update these versions may differ which will cause compiling problems.
Next, do a 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.


== Installation ==
== Types of Drivers ==


=== For free or open source solution ===
=== Free and Open Source Driver (Nouveau) ===


Some users [http://www.kroah.com/log/linux/stable_api_nonsense.html feel strongly] that they should not use closed source kernel modules. This is understandable. In almost all cases, [http://nouveau.freedesktop.org/wiki/Optimus/ PRIME] will work better then using bumblebee with the nouveau module as far as raw FPS (Frames Per Second) in a given OpenGL application.  
Some users [http://www.kroah.com/log/linux/stable_api_nonsense.html feel strongly] that they should not use closed source kernel modules. This is understandable. In all cases, [http://nouveau.freedesktop.org/wiki/Optimus/ PRIME] will work better then using bumblebee.


There exists certain notebooks that have a “VGA-1-2 connected” when listing displays with xrandr. This “bogus” display prevents “PRIME” from working properly on certain notebooks.
{{Template:Admon/warning|Note:|'''As of 20<sup>th</sup> May, 2016 you can no longer use Bumblebee with the open source Nouveau drivers.'''<br>If you wish to learn more about this, see [https://github.com/Bumblebee-Project/Bumblebee/issues/773 issue 773]. <br>Users are requested to use '''PRIME''' instead of bumblebee. Since the nouveau driver already handles power saving now, using bumblebee would simply be superfluous.}}
One is able able to disable this “bogus” connected display on these notebooks by adding:


<pre>
=== Proprietary Closed Source Driver (NVIDIA) ===
video=VGA-2:d
 
</pre>
Some users may prefer to use the closed-source proprietary drivers as they offer better performance than the open source ones. In that case, there's two sources from where you can get your drivers: '''http://rpmfusion.org/''' and '''http://negativo17.org/'''. Although both these sources are valid and will work, the negative017 driver is generally recommended over the RPMFusion ones, as the negative017 drivers are generally kept up to date and follow Fedora packaging guidelines better. They have also been known to work with Fedora to improve integration.
 
{{Template:Admon/note|Note:|The Installation process detailed below uses the negative017 repository. If you wish to use the RPMFusion repository instead, please adjust the steps according to your requirement.}}


To the kernel command line by editing /etc/default/grub and then running “grub2-mkconfig -o /boot/grub2/grub.cfg” if you have a BIOS based notebook or by running “grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg” if you have a UEFI based notebook. You might need to do this to get your notebook working with PRIME properly so that the kernel can shutoff the card when its not in use.
== Installation (NVIDIA Proprietary) ==


You can verify this by typing:
To Install the NVIDIA drivers, first add the negative017 repo:


<pre>
<pre>
$ xrandr
# sudo dnf config-manager --add-repo=https://negativo17.org/repos/fedora-nvidia.repo
</pre>
</pre>


Look for:
then, Install the necessary packages:


<pre>
<pre>
VGA-1-2 connected ...
# sudo dnf install nvidia-driver kernel-devel akmod-nvidia dkms acpi
</pre>
</pre>


After you edit your kernel command line, reboot and type as root:
To get '''Bumblebee''', we first need to enable the '''[https://copr.fedorainfracloud.org/coprs/chenxiaolong/bumblebee/ chenxiaolong/bumblebee]'''copr repository:


<pre>
<pre>
# cat /sys/kernel/debug/vgaswitcheroo/switch
# sudo dnf copr enable chenxiaolong/bumblebee
</pre>
</pre>


and look for:
Next, install the bbswitch driver, bumblebee and primus:


<pre>
<pre>
0:IGD:+:Pwr:0000:00:02.0
# sudo dnf install akmod-bbswitch bumblebee primus
1:DIS: :DynOff:0000:01:00.0
</pre>
</pre>


'''DIS''' stands for your '''Discrete GPU''', which on a optimus laptop is the NVidia GPU. We want it to be ” DynOff” which means its off and saving power.
For the "optirun" and "primusrun" commands to work, the current user must be added to the bumblebee group.


<pre>
# sudo gpasswd -a $USER bumblebee
</pre>


So even though I encourage you to use PRIME if you want to use the nouveau module as 100% free solution I will still explain how to use bumblebee with nouveau in case you have a weird reason for wanting to use it that I did not think of…
Enable the bumblebeed service and disable the nvidia-fallback service. The nvidia-fallback service comes from the negativo17 drivers and will attempt to load nouveau if nvidia fails to load. However, when using Bumblebee, neither one should load at boot.


=== For free or open source solution fedora ===
<pre>
# sudo systemctl enable bumblebeed
# sudo systemctl disable nvidia-fallback
</pre>


Finally, reboot and bumblebee should be ready to go.


Please NOTE: bumblebee + nouveau '''does not work''' with the [https://en.wikipedia.org/wiki/GNOME_Display_Manager GDM login manager] in fedora 22+. So you will probably need to use some other login manager if you need this to work such as lightdm or kdm. It broke after gdm-3.14.2 and before or in gdm-3.16.1.1. I have not had a chance to bisect this bug yet. I am unsure if this is fedora specific or if it affects other distros. GDM does work ok with the closed source solution which we will discuss later in this documentation.
== Usage ==
<br />


Add bumblebee repo: (depending on what release you are on)
General usage syntax:  


'''fedora 21:'''
<pre>
<pre>
# yum -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee/fedora21/noarch/bumblebee-release-1.2-1.noarch.rpm
$ optirun [options] application [application-parameters]
</pre>
'''fedora 22:'''
<pre>
# dnf -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee/fedora22/noarch/bumblebee-release-1.2-1.noarch.rpm
</pre>
'''fedora 23:'''
<pre>
# dnf -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee/fedora23/noarch/bumblebee-release-1.2-1.noarch.rpm
</pre>
</pre>


bumblebee + nouveau drivers, fedora 21.
For example, start a Windows applications with optimus named application.exe:


<pre>
<pre>
# yum install bumblebee-nouveau
$ optirun wine application.exe
</pre>
</pre>


or optionally
For another example, open NVidia settings panel with optimus:


<pre>
<pre>
# yum install bumblebee-nouveau bbswitch-dkms kernel-devel
$ optirun -b none nvidia-settings -c :8
</pre>
</pre>


bumblebee + nouveau drivers, fedora 22+.
For another example, open the java based Minecraft with primus bridge:


<pre>
<pre>
# dnf install bumblebee-nouveau
$ optirun -b primus java -jar /PATH/TO/Minecraft.jar
</pre>
</pre>


or optionally
For a list of the options for optirun, view its manual page:


<pre>
<pre>
# dnf install bumblebee-nouveau bbswitch-dkms kernel-devel
$ man optirun
</pre>
</pre>


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.


bbswitch-dkms (bbswitch module) is an “out of tree” kernel module that is not strictly required to use bumblebee with the nouveau module. But some user’s might like its easy interface for disabling or enabling the NVidia chip. It is [http://nouveau.freedesktop.org/wiki/Optimus/ discussed very briefly] on the nouveau optimus wiki page for older kernels, for example. bbswitch is GPLV3 but it is "out of tree" so you may wish to avoid it if you have a problem with out of tree modules.
For primus, there is a separate shell script you can use to invoke it called “primusrun.
 
You will need to reboot before you can test if bumblebee + nouveau is working.
 
 
=== For closed source solution ===
 
Do not use the NVidia video drivers from '''http://rpmfusion.org/''', '''http://negativo17.org/'''. I’m sure they are fine drivers and I am not trying to criticize them at all. But they DO NOT support or work with bumblebee without modifications. I have created a pair of drivers packages you may use that require no modifications to work. There is a managed version which contains a reasonably recent “long lived branch” driver blob. There is also a unmanaged repo which contains an empty drivers package. The unmanaged version requires you to download a “blob” from [http://www.nvidia.com/object/unix.html here] and then copy the file manually to the /etc/sysconfig/nvidia/ directory as root. You might need the “unmanaged” version if your laptop requires a “legacy” driver version or if you need the “short lived branch” driver for some reason. Do not install both the managed and unmanaged repos. You should pick one or the other depending on your needs. If you are unsure which to use, use the managed repo.
 
 
'''Special note concerning “short lived branch” version 355.11+:'''
 
There is a bug which prevents the short lived branch version from working with the unmanaged version of the bumblebee-nvidia shell script wrapper. I have opened a discussion thread [https://devtalk.nvidia.com/default/topic/885657/linux/can-t-install-driver-to-work-with-bumblebee-with-version-355-11/ here] concerning this problem. It remains unknown if NVidia engineers are allowed to work on this bug. We’ll just have to wait and see what happens with that. If this version of the installer gets moved into the “long lived branch” with the bug intact I will probably retire these packages and move on and stop supporting bumblebee as these packages will no longer be viable in an easy to use way. (Sorry, there may be a VERY UGLY way to hack around it but it would have to become a “run it by hand every time your kernel updates” kind of solution which I have little interest in supporting…)
 
We’ll have to see if they were sincere [http://www.phoronix.com/scan.php?page=news_item&px=MTEyMjk in this press release] or if it was just more of a public relations move.
 


For a list of the options for primusrun, view its manual page:


=== For closed source solution fedora ===
Add bumblebee repo: (depending on what release you are on)
'''fedora 21:'''
<pre>
<pre>
# yum -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee/fedora21/noarch/bumblebee-release-1.2-1.noarch.rpm
$ man primusrun
</pre>
</pre>
'''fedora 22:'''
 
<pre>
<pre>
# dnf -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee/fedora22/noarch/bumblebee-release-1.2-1.noarch.rpm
$ primusrun java -jar /PATH/TO/Minecraft.jar
</pre>
'''fedora 23:'''
<pre>
# dnf -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee/fedora23/noarch/bumblebee-release-1.2-1.noarch.rpm
</pre>
</pre>


and


Managed NVidia repo: (depending on what release you are on)
'''fedora 21:'''
<pre>
<pre>
# yum -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee-nonfree/fedora21/noarch/bumblebee-nonfree-release-1.2-1.noarch.rpm
$ optirun -b primus java -jar /PATH/TO/Minecraft.jar
</pre>
'''fedora 22:'''
<pre>
# dnf -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee-nonfree/fedora22/noarch/bumblebee-nonfree-release-1.2-1.noarch.rpm
</pre>
'''fedora 23:'''
<pre>
# dnf -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee-nonfree/fedora23/noarch/bumblebee-nonfree-release-1.2-1.noarch.rpm
</pre>
</pre>


or Unmanaged NVidia repo: (depending on what release you are on)
are functionally equivalent commands.


'''fedora 21:'''
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 optirun or primusrun commands in order to streamline this process.
<pre>
# yum -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee-nonfree-unmanaged/fedora21/noarch/bumblebee-nonfree-unmanaged-release-1.2-1.noarch.rpm
</pre>
'''fedora 22:'''
<pre>
# dnf -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee-nonfree-unmanaged/fedora22/noarch/bumblebee-nonfree-unmanaged-release-1.2-1.noarch.rpm
</pre>
'''fedora 23:'''
<pre>
# dnf -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee-nonfree-unmanaged/fedora23/noarch/bumblebee-nonfree-unmanaged-release-1.2-1.noarch.rpm
</pre>


'''Remember, you do not want to install both the managed and unmanaged repos. Pick one or the other but not both!
For example, in 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 “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.
'''
 
No multilib fedora 21:


== Uninstallation ==
'''To uninstall bumblebee:'''
<pre>
<pre>
# dnf install bumblebee-nvidia bbswitch-dkms primus kernel-devel
# sudo dnf remove akmod-bbswitch bumblebee primus
# sudo systemctl preset nvidia-fallback
</pre>
</pre>


 
'''To remove the bumblebee repo:'''
No multilib fedora 22+:
 
<pre>
<pre>
# dnf install bumblebee-nvidia bbswitch-dkms primus kernel-devel
# sudo dnf copr remove chenxiaolong/bumblebee
</pre>
</pre>


 
'''To uninstall the nvidia drivers:'''
Multilib on a 64 bit install fedora 21: (You may need to add additional 32 bit packages to get your 32 bit applications to work with bumblebee/primus)
 
<pre>
<pre>
# yum install bumblebee-nvidia bbswitch-dkms VirtualGL.x86_64 VirtualGL.i686 primus.x86_64 primus.i686 kernel-devel
# sudo dnf remove nvidia-driver kernel-devel akmod-nvidia
</pre>
</pre>


 
'''To remove the negative017 repo:'''
Multilib on a 64 bit install fedora 22+: (You may need to add additional 32 bit packages to get your 32 bit applications to work with bumblebee/primus)
 
<pre>
<pre>
# dnf install bumblebee-nvidia bbswitch-dkms VirtualGL.x86_64 VirtualGL.i686 primus.x86_64 primus.i686 kernel-devel
# sudo rm /etc/yum.repos.d/fedora-nvidia.repo
</pre>
</pre>


Reboot.


You will need to reboot before you can test if its working. '''If you used the “unmanaged” repo don’t forget to copy the NVidia “blob” to /etc/sysconfig/nvidia/ before you reboot!''' Most folks will want the “managed” version rather then the “unmanaged” version.




== Using bumblebee software ==
== Multi monitor setup with closed driver  ==


'''General usage'''
Optimus laptops have two video chips: 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.


<pre>
When the external port is wired into the NVidia chip, you cannot currently expand the screen over monitors without extra effort. Read on if you fall into this category…
$ optirun [options] application [application-parameters]
</pre>


For example, start a Windows applications with optimus named application.exe:
Install the <code>intel-gpu-tools package</code>:


<pre>
<pre>
$ optirun wine application.exe
# dnf install intel-gpu-tools
</pre>
</pre>


For another example, open NVidia settings panel with optimus:
Running ‘intel-virtual-output’ (from the intel-gpu-tools rpm) without any extra parameters will daemonize itself and 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.


<pre>
For example, if your laptop’s display is called eDP1, and your using a external adapter called HDMI1, and you wanted the display to be 1920×1080 resolution, you could run the following commands:
$ optirun -b none nvidia-settings -c :8
</pre>


For another example, open the java based Minecraft with primus bridge:
To have your HDMI screen to the right of your desktop, run:


<pre>
<pre>
$ optirun -b primus java -jar /PATH/TO/Minecraft.jar
$ xrandr –output eDP1 –mode 1920×1080 –output HDMI1 –mode 1920×1080 –right-of eDP1
</pre>
</pre>


For a list of the options for optirun, view its manual page:
To clone your desktop, run:


<pre>
<pre>
$ man optirun
$ xrandr –output eDP1 –mode 1920×1080 –output HDMI1 –mode 1920×1080 –same-as eDP1
</pre>
</pre>


In general, using the primus bridge gives better performance then using the default VirtualGL bridge. But primus only works with the closed source NVidia driver so you need to take that into consideration.


For primus, there is a separate shell script you can use to invoke it called “primusrun.
There are many different possibilities. Type xrandr with no arguments to see what displays you have attached. See [https://github.com/Bumblebee-Project/Bumblebee/wiki/Multi-monitor-setup 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.
 
If 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 Type=oneshot. A third way might be to run it at login using whatever mechanism your desktop environment supports for doing such things. For example, in 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.


For a list of the options for primusrun, view its manual page:
== Troubleshooting ==


<pre>
=== [VGL] ERROR: Could not open display :8 ===
$ man primusrun
</pre>


<pre>
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")
$ primusrun java -jar /PATH/TO/Minecraft.jar
</pre>


and
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:


<pre>
<pre>
$ optirun -b primus java -jar /PATH/TO/Minecraft.jar
$ optirun -b primus wine windows program.exe
</pre>
</pre>


are functionally equivalent commands.
=== Xlib: extension "GLX" missing on display ":0.0" ===


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 optirun or primusrun commands in order to streamline this process.
If you tried to install the NVIDIA driver from NVIDIA website, this is not going to work.  
Please uninstall the driver and reinstall using one of the above mentioned repos.


For example, in 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 “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.
=== [ERROR]Cannot access secondary GPU: No devices detected ===


== Multi monitor setup with closed driver, fedora 22 or later ==
In some instances, running optirun will return:


These notes only work in fedora 22+ as the intel-gpu-tools rpm only became available in fedora 22. Earlier releases of fedora lack this rpm.
<pre>
[ERROR]Cannot access secondary GPU - error: [XORG] (EE) No devices detected.
[ERROR]Aborting because fallback start is disabled.
</pre>


Optimus laptops have two video chips: 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.
In this case, you will need to move the file <code>/etc/X11/xorg.conf.d/20-intel.conf</code> 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 <code>/etc/X11/xorg.conf.d/20-intel.conf</code> to <code>/etc/X11/xorg.conf</code>.


When the external port is wired into the NVidia chip, you cannot currently expand the screen over monitors without extra effort. Read on if you fall into this category…
It could be also necessary to comment the driver line in <code>/etc/X11/xorg.conf.d/10-monitor.conf</code>.


Install the intel-gpu-tools package.
You might need to define the NVIDIA card somewhere (e.g. <code>file /etc/bumblebee/xorg.conf.nvidia</code>), using the correct <code>BusID</code> according to <code>lspci</code> output:


<pre>
<pre>
# dnf install intel-gpu-tools
Section "Device"
    Identifier "nvidiagpu1"
    Driver "nvidia"
    BusID "PCI:0:1:0"
EndSection
</pre>
</pre>


Running ‘intel-virtual-output’ (from the intel-gpu-tools rpm) without any extra parameters will daemonize itself and 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.
Observe that the format of <code>lspci</code> output is in HEX, while in xorg it is in decimals. So if the output of <code>lspci</code> is, for example, <code>0a:00.0</code> the <code>BusID</code> should be <code>PCI:10:0:0</code>.  


For example, if your laptop’s display is called eDP1, and your using a external adapter called HDMI1, and you wanted the display to be 1920×1080 resolution, you could run the following commands:
=== NVIDIA(0): Failed to assign any connected display devices to X screen 0 ===


To have your HDMI screen to the right of your desktop, run:
If the console output is:  


<pre>
<pre>
$ xrandr –output eDP1 –mode 1920×1080 –output HDMI1 –mode 1920×1080 –right-of eDP1
[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.
</pre>
</pre>


To clone your desktop, run:
You can change this line in <code>/etc/bumblebee/xorg.conf.nvidia</code>:  


<pre>
<pre>
$ xrandr –output eDP1 –mode 1920×1080 –output HDMI1 –mode 1920×1080 –same-as eDP1
Option "ConnectedMonitor" "DFP"
</pre>
</pre>


to:


There are many different possibilities. Type xrandr with no arguments to see what displays you have attached. See [https://github.com/Bumblebee-Project/Bumblebee/wiki/Multi-monitor-setup 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.
<pre>
Option "ConnectedMonitor" "CRT"
</pre>


If 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 Type=oneshot. A third way might be to run it at login using whatever mechanism your desktop environment supports for doing such things. For example, in 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.
=== Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!) ===


intel-virtual-output is only available in fedora 22+
Add <code>rcutree.rcu_idle_gp_delay=1</code> to your kernel parameters.


== Troubleshooting ==
=== Could not load GPU driver ===


If you are using the closed source NVidia drivers, there is a checking system you can run. To test, type this command:
If the console output is:


<pre>
<pre>
$ bumblebee-nvidia --check
[ERROR]Cannot access secondary GPU - error: Could not load GPU driver
</pre>
</pre>


This will tell you if the NVidia driver and bbswitch-dkms compiled into the current kernel ok. It works with both the managed and unmanaged driver packages.
and if you try to load the nvidia module you get:
 
Some other errors you may encounter form the output from bumblebee-nvidia –check


<pre>
<pre>
Error: Too many NVidia blobs in /etc/sysconfig/nvidia/
modprobe nvidia
Blob count = 2.
modprobe: ERROR: could not insert 'nvidia': Exec format error
</pre>
</pre>


This means that there are too many NVidia “blobs” in /etc/sysconfig/nvidia/ and the solution is to delete one of them.
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.
 
=== /dev/dri/card0: failed to set DRM interface version 1.4: Permission denied ===
 
This could be worked around by appending following lines in <code>/etc/bumblebee/xorg.conf.nvidia</code>:


<pre>
<pre>
Error: No Nvidia blob in /etc/sysconfig/nvidia/
Section "Screen"
    Identifier "Default Screen"
    Device "DiscreteNvidia"
EndSection
</pre>
</pre>


This means there is no blob in /etc/sysconfig/nvidia/ and you should copy one there if using the unmanaged repo or re-install bumblebee-nvidia if using the managed repo. (dnf reinstall bumblebee-nvidia)
=== ERROR: ld.so: object 'libdlfaker.so' from LD_PRELOAD cannot be preloaded: ignored ===
 
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.


If the module did not compile, you can run:
=== Fatal IO error 11 (Resource temporarily unavailable) on X server ===
<pre>
# bumblebee-nvidia --debug
</pre>


as root or via sudo. This may give you clues as to why the nvidia installer was unable to work.
Change <code>KeepUnusedXServer</code> in <code>/etc/bumblebee/bumblebee.conf</code> from <code>false</code> to <code>true</code>. Your program forks into background and bumblebee doesn't know anything about it.  


Type
=== Video Tearing ===


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 <code>nvidia-settings</code> is installed and run:
<pre>
<pre>
$ bumblebee-nvidia --help
# optirun -b none nvidia-settings -c :8
</pre>
</pre>


to see a full list of options the wrapper script provides.
<code>X Server XVideo Settings -> Sync to VBlank</code> and <code>OpenGL Settings -> Sync to VBlank</code> should both be enabled.


If you see this error:
=== Bumblebee cannot connect to socket ===


If the console output is:
<pre>
<pre>
[ERROR]You've no permission to communicate with the Bumblebee daemon. Try adding yourself to the 'bumblebee' group
[ 1648.179533] [ERROR]You've no permission to communicate with the Bumblebee daemon. Try adding yourself to the 'bumblebee' group
[ERROR]Could not connect to bumblebee daemon - is it running?
[ 1648.179628] [ERROR]Could not connect to bumblebee daemon - is it running?
</pre>
</pre>


It could be caused by adding another user account to your notebook after you have already installed the various bumblebee packages. The solution is to run:
Verify whether or not you are in the <code>bumblebee</code> group:
 
<pre>
<pre>
# usermod -a -G bumblebee USERNAME
# groups | grep bumblebee
</pre>
</pre>


where '''USERNAME''' is your account name to add to the bumblebee group. You MUST be in the bumblebee group for primusrun or optirun to work.
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.


'''Primusrun mouse delay/disable VSYNC'''
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 /etc/X11/xorg.conf or .../20-nvidia... configuration files. If Xorg is instructed to use Nvidia in a conf file, X will fail.


For primusrun, VSYNC is enabled by default and as a result, it could make mouse input delay lag or even slightly decrease performance. Test primusrun without VSYNC:
=== Primusrun mouse delay (disable VSYNC) ===


For <code>primusrun</code>, <code>VSYNC</code> is enabled by default and as a result, it could make mouse input delay lag or even slightly decrease performance. Test <code>primusrun</code> with <code>VSYNC</code> disabled:
<pre>
<pre>
$ vblank_mode=0 primusrun glxgears
# vblank_mode=0 primusrun <command>
</pre>
</pre>
If you are satisfied with the above setting, create an alias (e.g. <code>alias primusrun="vblank_mode=0 primusrun"</code>).


'''Primus issues under compositing window managers'''
=== Primus issues under compositing window managers ===
 
Since compositing hurts performance, invoking primus when a compositing WM is active is [https://github.com/amonakov/primus#issues-under-compositing-wms 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:


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:
<pre>
<pre>
$ PRIMUS_SYNC=1 primusrun ...
# PRIMUS_SYNC=1 primusrun <command>
</pre>
</pre>
This makes primus display the previously rendered frame.
=== Compatibility with recent laptops that have American Megatrend BIOSes ===


'''optirun crashes after you boot into “Troubleshooting -> Start Fedora Live in basic graphics mode” and do an install that way.'''
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 in this post on the Bumblebee's github: https://github.com/Bumblebee-Project/Bumblebee/issues/764#issuecomment-234494238 .


If you did an install under “Troubleshooting -> Start Fedora Live in basic graphics mode.” 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
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):


<pre>
<pre>
# grub2-mkconfig -o /boot/grub2/grub.cfg
acpi_osi=! acpi_osi='Windows 2009'
</pre>
</pre>


on a BIOS based notebook or
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.
 
=== Broken power management with kernel 4.8 ===


<pre>
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.
# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
</pre>


on a UEFI based notebook. Then reboot. After that bumblebee/optirun/primusrun should start working.
See [https://github.com/Bumblebee-Project/bbswitch/issues/140 Issue 140] for further information about this problem.


== Quick note concerning bbswitch and bbswitch-dkms packages ==
As a workaround, add <code>pcie_port_pm=off</code> to your kernel parameters.


There was a package called “bbswitch” in the yum repo which was not very well made. It has been re-written and the new package is called bbswitch-dkms. In all cases you should use the bbswitch-dkms package instead of the bbswitch package. bbswitch-dkms works better at updating then the old bbswitch package did.
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).


== Useful links ==
== Useful links ==
Line 417: Line 383:
* https://github.com/amonakov/primus
* https://github.com/amonakov/primus
* https://www.linux.ncsu.edu/bumblebee/
* https://www.linux.ncsu.edu/bumblebee/
* https://copr.fedorainfracloud.org/coprs/chenxiaolong/bumblebee/
[http://www.thelinuxrain.com/articles/the-state-of-nvidia-optimus-on-linux The State of NVIDIA Optimus on Linux]
[http://www.thelinuxrain.com/articles/the-state-of-nvidia-optimus-on-linux The State of NVIDIA Optimus on Linux]

Revision as of 21:59, 4 January 2018

Description

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.

How can you tell if you have an optimus notebook computer?

If you purchased a notebook with an NVidia sticker on it, you might have a optimus computer. 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[02]\]'

If you see two video cards in the output like:

$ lspci -vnn | grep '\''[030[02]\]'
00:02.0 VGA compatible controller [0300]: Intel Corporation HD Graphics 520 [8086:1916] (rev 07) (prog-if 00 [VGA controller])
01:00.0 3D controller [0302]: 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 /sys/kernel/debug/vgaswitcheroo/switch file. 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…)

Before you get started

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 /etc/bumblebee/bumblebee-nvidia-sign.conf file.

Next, do a 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.

Types of Drivers

Free and Open Source Driver (Nouveau)

Some users feel strongly that they should not use closed source kernel modules. This is understandable. In all cases, PRIME will work better then using bumblebee.

Warning.png
Note:
As of 20th May, 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.

Proprietary Closed Source Driver (NVIDIA)

Some users may prefer to use the closed-source proprietary drivers as they offer better performance than the open source ones. In that case, there's two sources from where you can get your drivers: http://rpmfusion.org/ and http://negativo17.org/. Although both these sources are valid and will work, the negative017 driver is generally recommended over the RPMFusion ones, as the negative017 drivers are generally kept up to date and follow Fedora packaging guidelines better. They have also been known to work with Fedora to improve integration.

Note.png
Note:
The Installation process detailed below uses the negative017 repository. If you wish to use the RPMFusion repository instead, please adjust the steps according to your requirement.

Installation (NVIDIA Proprietary)

To Install the NVIDIA drivers, first add the negative017 repo:

# sudo dnf config-manager --add-repo=https://negativo17.org/repos/fedora-nvidia.repo

then, Install the necessary packages:

# sudo dnf install nvidia-driver kernel-devel akmod-nvidia dkms acpi

To get Bumblebee, we first need to enable the chenxiaolong/bumblebeecopr repository:

# sudo dnf copr enable chenxiaolong/bumblebee

Next, install the bbswitch driver, bumblebee and primus:

# sudo dnf install akmod-bbswitch bumblebee primus

For the "optirun" and "primusrun" commands to work, the current user must be added to the bumblebee group.

# sudo gpasswd -a $USER bumblebee

Enable the bumblebeed service and disable the nvidia-fallback service. The nvidia-fallback service comes from the negativo17 drivers and will attempt to load nouveau if nvidia fails to load. However, when using Bumblebee, neither one should load at boot.

# sudo systemctl enable bumblebeed
# sudo systemctl disable nvidia-fallback

Finally, reboot and bumblebee should be ready to go.

Usage


General usage syntax:

$ optirun [options] application [application-parameters]

For example, 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 “primusrun.”

For a list of the options for primusrun, view its manual page:

$ man primusrun
$ primusrun java -jar /PATH/TO/Minecraft.jar

and

$ optirun -b primus java -jar /PATH/TO/Minecraft.jar

are functionally equivalent commands.

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 optirun or primusrun commands in order to streamline this process.

For example, in 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 “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.

Uninstallation

To uninstall bumblebee:

# sudo dnf remove akmod-bbswitch bumblebee primus
# sudo systemctl preset nvidia-fallback

To remove the bumblebee repo:

# sudo dnf copr remove chenxiaolong/bumblebee

To uninstall the nvidia drivers:

# sudo dnf remove nvidia-driver kernel-devel akmod-nvidia

To remove the negative017 repo:

# sudo rm /etc/yum.repos.d/fedora-nvidia.repo

Reboot.


Multi monitor setup with closed driver

Optimus laptops have two video chips: 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 chip, you cannot currently expand the screen over monitors without extra effort. Read on if you fall into this category…

Install the intel-gpu-tools package:

# dnf install intel-gpu-tools

Running ‘intel-virtual-output’ (from the intel-gpu-tools rpm) without any extra parameters will daemonize itself and 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 wanted 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.

If 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 Type=oneshot. A third way might be to run it at login using whatever mechanism your desktop environment supports for doing such things. For example, in 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.

Troubleshooting

[VGL] ERROR: Could not open display :8

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

Xlib: extension "GLX" missing on display ":0.0"

If you tried to install the NVIDIA driver from NVIDIA website, this is not going to work. Please uninstall the driver and reinstall using one of the above mentioned repos.

[ERROR]Cannot access secondary GPU: No devices detected

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 /etc/X11/xorg.conf.d/20-intel.conf to /etc/X11/xorg.conf.

It could be also necessary to comment the driver line in /etc/X11/xorg.conf.d/10-monitor.conf.

You might need to define the NVIDIA card somewhere (e.g. file /etc/bumblebee/xorg.conf.nvidia), using the correct BusID according to lspci output:

Section "Device"
    Identifier "nvidiagpu1"
    Driver "nvidia"
    BusID "PCI:0:1:0"
EndSection

Observe that the format of lspci output is in HEX, while in xorg it is in decimals. So if the output of lspci is, for example, 0a:00.0 the BusID should be PCI:10:0:0.

NVIDIA(0): Failed to assign any connected display devices to X screen 0

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.

You can change this line in /etc/bumblebee/xorg.conf.nvidia:

Option "ConnectedMonitor" "DFP"

to:

Option "ConnectedMonitor" "CRT"

Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)

Add rcutree.rcu_idle_gp_delay=1 to your kernel parameters.

Could not load GPU driver

If the console output is:

[ERROR]Cannot access secondary GPU - error: Could not load GPU driver

and if you try to load the nvidia 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.

/dev/dri/card0: failed to set DRM interface version 1.4: Permission denied

This could be worked around by appending following lines in /etc/bumblebee/xorg.conf.nvidia:

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

ERROR: ld.so: object 'libdlfaker.so' from LD_PRELOAD cannot be preloaded: ignored

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.

Fatal IO error 11 (Resource temporarily unavailable) on X server

Change KeepUnusedXServer in /etc/bumblebee/bumblebee.conf from false to true. Your program forks into background and bumblebee doesn't know anything about it.

Video Tearing

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.

Bumblebee cannot connect to socket

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 bumblebee group:

# 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 /etc/X11/xorg.conf or .../20-nvidia... configuration files. If Xorg is instructed to use Nvidia in a conf file, X will fail.

Primusrun mouse delay (disable VSYNC)

For primusrun, VSYNC is enabled by default and as a result, it could make mouse input delay lag or even slightly decrease performance. Test primusrun with VSYNC disabled:

# vblank_mode=0 primusrun <command>

If you are satisfied with the above setting, create an alias (e.g. alias primusrun="vblank_mode=0 primusrun").

Primus issues under compositing window managers

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 <command>

This makes primus display the previously rendered frame.

Compatibility with recent laptops that have American Megatrend BIOSes

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 in this post on the Bumblebee's github: https://github.com/Bumblebee-Project/Bumblebee/issues/764#issuecomment-234494238 .

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.

Broken power management with kernel 4.8

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).

Useful links

The State of NVIDIA Optimus on Linux