On Linux, however, this GPU-switching does not happen automatically. There are several different ways you can enable Nvidia GPU's on Linux, but I chose bumblebee-nvidia with the proprietary Nvidia driver as I explain in a previous post. To launch regular applications using the Nvidia GPU, you must launch your program by prefixing it with 'optirun', i.e.:
optirun [program name]
But in order to use multiple monitors on an Optimus-enabled notebook like the ASUS U36JC, you can't just invoke something like optirun startx. You need to edit a few Bumblebee X11 settings and make sure that bumblebeed (bumblebee daemon) is running to use the HDMI external monitor port (which is hard-wired to the discrete Nvidia GPU. The VGA port on the ASUS U36JC uses Intel integrated graphics, however, so bumblee is not required)
The required steps to use an external monitor through the HDMI port on Fedora 24 are as follows:
1. Make sure you have already installed and configured bumblebee.
2. sudo dnf install intel-gpu-tools (this pkg contains intel-virtual-output)
3. In /etc/bumblebee/xorg.conf.nvidia make the following changes:
- Option "AutoAddDevices" "true"
- Option "UseEDID" "true"
- # Option "UseDisplayDevice" "none"
You can see my edited xorg.conf.nvidia file here:
4. Start bumblebee daemon: sudo systemctl start bumblebeed
5. Launch intel-virtual-output (the default is to launch as a daemon, but I will launch in foreground mode so I can easily kill the process with Ctrl-C when I am done using an external monitor). You can run this program as the local user (When executing as root, it doesn't work).
# intel-virtual-output -f
Now X windows should be able to detect an external monitor connected to the video ports wired to the Nvidia GPU. Running xfce4-display-settings shows the following:
The monitor named "VIRTUAL" is a path-through interface created by intel-virtual-output.
Arandr, the front-end to the Xorg screen layout/orientation tool xrandr, also detects multiple screens: