October 5, 2014

Here are some notes for anyone else attempting to install Xubuntu 14.04 on a Sager NP8268-S laptop (Clevo P150SM-A).

System components:

CPU: Intel i7-4810MQ

GPU: Nvidia GTX 870M

Primary drive: Samsung EVO SSD, with Windows 7 preinstalled

Wireless: Intel AC7260

Audio: Intel HD + Realtec ALC892

The installation along side Windows 7 went fairly smoothly and the end result is a beast of a machine. But there were a few rough spots, documented below.

CPU frequency scaling

The default ACPI-based CPU power management and scaling feature often left the CPU cores stuck at maximum or minimum clock frequency, and none of the usual frequency scaling utilities were able to change it.

Solved by enabling Intel P-State power/frequency management. After you add “intel_pstate=enable” to the kernel invocation options (google to find out how), then it takes over and disables other frequency scaling mechanisms. You can then remove the cpufreqd package.

Nvidia Optimus

Install the latest Nvidia driver, and the bumblebee, primus, and bbswitch-dkms packages to give you control over switching between the Intel integrated graphics and the discrete GPU. This seems to be working as advertised. Be warned that Optimus and Bumblebee are rapidly evolving, and only the most recent documentation can be trusted. (For example, as I’m writing this, the Wikipedia article about Optimus is obsolete and incorrect in certain details.)

After installing Bumblebee, and whenever the Nvidia driver gets updated, you’ll need to manually change some lines in bumblebee.conf. The four crucial settings are shown below with their correct settings when using, e.g., driver version 331.38:

Driver=nvidia

KernelDriver=nvidia-331

LibraryPath=/usr/lib/nvidia-331:/usr/lib32/nvidia-331

XorgModulePath=/usr/lib/nvidia-331/xorg,/usr/lib/xorg/modules

DRI (direct rendering) did not work out of the box (reported by: glxinfo | grep direct). This is due to dynamically linking the wrong libGL.so.1. Solved by uninstalling primus and primus libs, reinstalling primus and primus libs, then reinstalling bumblebee. Possibly just the final step would be sufficient.

Wireless mouse

The wireless mouse failed after each sleep and wake-up. Solved by disabling the laptop-mode-tools package. Alternatively, probably the USB ID of the device could be added to some exclusion list in /etc/laptop-mode, but my first attempt to do that failed. Or just the usb-autosuspend module might be the culprit and could be individually disabled. But currently I’m happy running with laptop-mode disabled or mostly disabled.

Headphone audio

Speaker audio worked out of the box, but headphone audio didn’t. Solved by compiling and installing the latest Realtek ALC892 driver from the Realtek website. After installing it, you must use alsamixer to unmute the headphone audio.

I’ve also had to add the following lines to the end of /etc/modprobe.d/alsa-base.conf. These lines disable HDMI audio output; there is probably a better solution:

options snd-hda-intel index=-2 model=auto vid=8086 pid=0c0c

options snd-hda-intel index=0 model=auto vid=8086 pid=8c20

If the headphone audio does not come out of the usual headphone jack, try the headphones in the other jacks. In my case, after a few reboots, the headphone sound started coming out of the S/PDIF jack. Use alsamixer to unmute everything.

Jack audio

By default, jack tried to use the HDMI audio output. To hear anything from the speakers or headphones, you’ll have to change the hardware device that jack uses. If using qjackctl, change the “interface device” in config by clicking the button labeled “>”.

Sensors – GPU temperature

When the GPU is switched off due to Optimus, it’s reasonable that its sensors are not available, but when the GPU switches on, the usual hardware sensors still don’t seem to report the temperature. The following command seems to work:

export LD_LIBRARY_PATH=”/usr/lib/nvidia-331/” && /usr/lib/nvidia-331/bin/nvidia-smi -q -d TEMPERATURE

And a gift for you…

Here is a picture of my conky display, and you can get the conkyrc file here. Just rename it to .conkyrc.