Friday, February 1, 2013

openSUSE 12.2 with Optimus laptop: disabling discrete graphics

Background

I have a new-ish Optimus laptop (Dell Latitude E6430) with both integrated Intel and NVIDIA discrete graphics. The "Optimus" technology from NVIDIA is supposed to transparently switch between integrated and discrete graphics in the interests of saving power and not emitting too much heat. Unfortunately, NVIDIA does not provide proper Linux support for Optimus, and in fact recently got "the finger" from Linus for its less-than-helpful approach to dealing with the Linux kernel developers


Symptoms

One thing led to another, and I find myself in possession of an Optimus laptop. The openSUSE 12.2 installer automagically installs the open-source "nouveau" kernel module and X Windows driver. X Windows (xorg) work fine, but the laptop runs quite hot -- never below 60 degrees Celsius and very warm to the touch. Fan noise was a factor. Since I do not use any graphics-demanding applications, I wanted to disable the discrete graphics adapter (NVIDIA) completely and rely entirely on the integrated Intel graphics (i915 kernel module and "Intel" X driver).

My first thought was to simply turn off the discrete graphics adapter in the BIOS. Alas, no such option exists in the BIOS setup screens. The only checkbox is for enabling/disabling Optimus (TM) technology. Turning that off yielded no change in the heat/noise coming out of the unit.

My next idea was to blacklist 'nouveau' and rely on X Windows (xorg) to automagically detect and use the Intel integrated graphics, and hope that the laptop's firmware will detect that X Windows is not using the NVIDIA discrete graphics adapter and turn it off. That, it turns out, is not really what happens. Although X Windows runs fine, it doesn't recover from sleep -- to my great chagrin. Also, the temperatures are down slightly, the laptop is still too hot for my taste.

Treatment

With a heavy heart, I am forced to report that the only solution that I know of, at this time, is to install the 'nvidia' binary-blob driver, the 'bbswitch' kernel module, and the 'Bumblebee 3.0' systemd service. This results in a system that runs at around 45-50 degrees when quiescent. Sleep/resume works as expected. The only problem is that after a number of sleep/resume cycles the discrete graphics get turned on (presumably by 'bumblebeed.service') and the system starts running hot again. So, the situation is far from ideal.

If you'd like to read about how I got this nvidia-bbswitch-bumblebee trio installed and running under openSUSE 12.2, see this blog entry.

No comments:

Post a Comment