Kernel 4.4 LTS

I decided to give kernel 4.4 a try and downloaded + installed it like this:

$ wget \
kernel.ubuntu.com/~kernel-ppa/mainline/v4.4-wily/linux-headers-4.4.0-040400_4.4.0-040400.201601101930_all.deb \
kernel.ubuntu.com/~kernel-ppa/mainline/v4.4-wily/linux-headers-4.4.0-040400-generic_4.4.0-040400.201601101930_amd64.deb \
kernel.ubuntu.com/~kernel-ppa/mainline/v4.4-wily/linux-image-4.4.0-040400-generic_4.4.0-040400.201601101930_amd64.deb

$ sudo dpkg -i linux-headers-4.4*.deb linux-image-4.4*.deb

After restart I got the “ALERT! /dev/disk/by-uuid/xxxxxxxxx does not exist” and was dropped to a shell. I rebooted with a 3.x kernel and after some googling I found that someone with a XPS15 (9550) resolved the same problem by adding the line “nvme” to /etc/initramfs-tools/modules and running update-initramfs -u. This turned out to work to for me as well so after a reboot with only the default kernel params (quiet splash) I could get all the way to the desktop.

Notes from running the 4.4 kernel:

  • Suspend works

This is great. Didn’t try if returning from locked screen works as well though.

  • Virtual Box stopped working

This is a blocker since I depend on Vagrant + VirtualBox for all my development. Seems to be related to dkms.

  • Graphical artifacts

Some kind of graphical artifacts appear, probably related to incompatible video driver.

  • Lower power consumption

For the first time ever since I started using powertop, I can see sub-10W values (9.x W).

All in all, the negative aspects are bad  enough to uninstall the 4.4 kernel and go back to the 3.x kernel :(

Backup solution

This is not specific for the 5510 or elementary OS, but I’m happy to say that I finally managed to set up a backup solution that works just the way I always dreamed of. It consists of 2 parts:

  • CrashPlan
  • A small (crontabbed) shell script

In short, this is my view on backups:

Backing up is boring. Backing up is something you don’t want to think about. Backing up should just happen automatically in the background when the backup drive is available on the network.

This last sentence describes how I want backups to happen, and I finally found a way to implement it. CrashPlan is able to backup to a locally attached disk and at home I have a NAS unit that is connected to the LAN, and I have given it a name in the router so that it can be pinged just like any networked resource. Since the laptop is travelling I can’t keep a line in fstab that mounts it permanently, but I set up a very small script that runs every 5 minutes to check if the NAS is available and if so, mounts it:

NAS_NETWORK_NAME="thenasunit"
NAS_MAC_ADDR="[00:11:22:AA:BB:CC]

if [ $(mount | grep -q ${NAS_NETWORK_NAME} && echo 0) ]; then
 echo "${NAS_NETWORK_NAME} is already mounted"
else
 mac_address=$(arping -c 1 ${NAS_NETWORK_NAME} | grep "reply from" | awk '{print $5;}')
 if [ "$mac_addr" = "${NAS_MAC_ADDR}" ]; then
 mount -t cifs //${NAS_NETWORK_NAME}/somepath -o username=someuser,password=somepassword /mnt/${NAS_NETWORK_NAME}
 fi
fi

So I arrive home, and start the laptop. Within a couple of minutes the NAS is mounted, CrashPlan disovers that the destination is available and the backup starts running without me lifting a finger. Just like I want it.

A small summary

After a couple of weeks with elementary OS “Freya” on the 5510, here’s a quick summary of the issues identified:

  • Shutdown + Suspend issues

I haven’t been able to find a solution for the problems with suspending or shutting down the laptop. As kernel parameters I’m using acpi=force quiet splash (GRUB_CMDLINE_LINUX_DEFAULT=”acpi=force quiet splash” in /etc/default/grub), but this has so far only resolved the problem with starting.

  • HiDPI issues

Several applications can’t handle 4k screens yet, the ones I have identified so far are Grub(v2), LightDM, Skype, Netbeans.

  • Various

The open-source graphics driver (freedesktop.org noveau) sometimes creates some strange visual artifacts when switching between windows with alt+tab,  and I have an issue with (GTK?) widgets not appearing until you hover over them with the cursor.

All in all, it’s mostly “bearable” even if the shutdown + suspend issues are getting a bit tiresome. The HiDPI issues were of course expected to some extent, and I guess this is what you get when you buy next-gen hardware. Regardless of the issues above I’m keeping elementary OS (hey, I payed $10 for it so I can’t just throw it away 😉 ) simply because of its sleek and snappy desktop environment.

Shame on you, Netbeans.

My Java IDE of choice for the last 10 years has been Netbeans. One of the first things I do after I installing an OS is to install a JDK, Maven, and Netbeans. My old laptop is a Dell Latitude e6500 running Fedora 19, and all my development tools (Netbeans, Maven, Vagrant, VirtualBox, Docker, Gradle, PostgreSQL) have been working great without any issues.

Sadly enough this is not the case anymore with the Precision 5510, due to Netbeans (or Java/Swing?) HiDPI scaling issues. In case you wonder, this is how it looks:

Netbeans with the default theme on a HiDPI screen

This is with the default theme. Notice how the fonts sometimes “overflow” from the text fields into the surrounding panel, how the Start Page looks, and how tiny the icons are. Not pretty.

Strangely, the scaling works differently with the newly released Darkula theme. Actually, it doesn’t scale at all – but at least it’s consistent:

Netbeans with Darkula theme on a HiDPI screen

It might be waiting for JEP 263 to be implemented before it gets resolved, but since that might take some time it might need to be fixed by the Netbeans team as a temporary workaround.

Note: Java/Swing applications aren’t the only ones suffering from inability to scale on HiDPI/4k screens, also other (non-GTK based applications) such as Skype have these issues.

Power tuning configuration

In case someone is wondering, these are the power consumption tuning parameters I have found out to work best on my Precision 5510:

echo '1500' > '/proc/sys/vm/dirty_writeback_centisecs';
echo '0' > '/proc/sys/kernel/nmi_watchdog';
echo '1' > '/sys/module/snd_hda_intel/parameters/power_save';
echo 'min_power' > '/sys/class/scsi_host/host0/link_power_management_policy';
echo 'min_power' > '/sys/class/scsi_host/host1/link_power_management_policy';
echo 'auto' > '/sys/bus/pci/devices/0000:00:01.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:04.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:00.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:02.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:14.2/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:15.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:15.1/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:17.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1c.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:03:00.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:04:00.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:02:00.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.4/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:16.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1c.1/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:14.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.2/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:01:00.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1d.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1d.4/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1d.6/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.3/power/control';
/sbin/modprobe cpufreq_ondemand > /dev/null 2>&1;
echo 'ondemand' > '/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor'; 
echo 'ondemand' > '/sys/devices/system/cpu/cpu1/cpufreq/scaling_governor'; 
echo 'ondemand' > '/sys/devices/system/cpu/cpu2/cpufreq/scaling_governor'; 
echo 'ondemand' > '/sys/devices/system/cpu/cpu3/cpufreq/scaling_governor'; 
echo 'ondemand' > '/sys/devices/system/cpu/cpu4/cpufreq/scaling_governor'; 
echo 'ondemand' > '/sys/devices/system/cpu/cpu5/cpufreq/scaling_governor'; 
echo 'ondemand' > '/sys/devices/system/cpu/cpu6/cpufreq/scaling_governor'; 
echo 'ondemand' > '/sys/devices/system/cpu/cpu7/cpufreq/scaling_governor';

(Put these lines before the “exit 0” line in /etc/rc.local)

Battery life or working suspend + shutdown? Pick one.

In short: as owner of the Precision 5510, you have a choice if you want to run elementaryOS 0.3 on it:

  • You can have a decent battery life

OR

  • You can have suspend + shutdown working properly

You make this choice by choosing a driver for the NVidia Quattro M1000M; with the open-source nouveau driver you get up to 8h of idling, with the proprietary NVidia driver (version 352.63) you get 3-4h of idling (according to powertop).

Open-source driver

Proprietary driver

The downside with the open-source driver is that the suspend + shutdown functionality doesn’t work: when suspending the laptop the screen goes black, but the system is still running quite actively and there is no way to log back on to the desktop – so you’ll have to kill the system with the power button. When shutting down, the screen goes distorted – but just as with suspend, you’ll have to press the power button to actually shut down.

Which one I chose? Battery life.

EFI (re-)installation

For the first week I was OK with pressing F12 to enter the firmware (“BIOS”) setup each time I wanted to boot into elementary, but I finally bit the bullet and did a proper re-installation since I got tired of not having a working boot manager (i.e, GRUB2). This time, I did my homework and read up on EFI, disabled support for legacy mode in the firmware in order to install elementary in EFI mode, and started the installation from the USB. In the installer I selected the existing ~500MB EFI partition (that also holds the Windows EFI binaries) for installation of GRUB2, mounting it at /boot/efi. I rebooted and – voilà, there was the much sought-after GRUB2 menu, although barely readable since it chose the native 3840 x 2160 resolution (This was fixed later by setting GRUB_GFXMODE=1280×1024 in /etc/default/grub and running update-grub)

So, now I can at least say that I have a basic understanding of how EFI works. And the 5510 now dual-boots just as fine as my old Latitude.

Touchscreen disabling issues

One of the first things I did after installing the OS was to install powertop, since elementary OS itself doesn’t tune anything related to power consumption. (Hint to the elementary developers: add some sensible defaults if it is being installed on a laptop)

After enabling all the tuning options one by one, I discovered that the fan started to run as soon as I enabled the following:

Description Script
Autosuspend for USB device Touchscreen [ELAN] echo ‘auto’ > ‘/sys/bus/usb/devices/1-9/power/control’;

When checking the list of processes I could see a kworker process running at 100% and one more process at roughly 50%, so I went back to powerTOP and left the “Autosuspend for USB device Touchscreen [ELAN]” option disabled and rebooted into the BIOS to see if there was anything else I could tune to reduce the power consumption. Indeed, there was something to be tuned: the keyboard illumination was by default set to full intensity (which I changed to 50% intensity) and the touchscreen could be completely disabled so I disabled it since I only use the keyboard and trackpad/mouse.

Booting to elementary I again could hear the fan starting so I opened a shell and saw that once again there was a kworker process consuming 100% of one core. Apparently there is an issue related to the touch screen with the 3.19.0-43 kernel that forces you to leave the touch screen enabled in BIOS and keeps you from enabling “Autosuspend” for the device to save power.

Installation

So I just got my new laptop (a Dell Precision 5510, i7/16GB/1TB SSD/4k) and after upgrading the pre-installed Win7 to Win10 and shrinking the 1TB disk to create an empty 700GB partition, I booted elementary OS “Freya” 0.3.2 (64bit) from a USB created with unetbootin.

So far so good; choosing “Try without installing” I arrived at the desktop where I could start the installer. The first problem was that no partitions showed up at all in the “Installation type” screen. What could be the reason for not detecting the empty 700GB partition on the SSD?

This issue was due to having the SATA mode set to RAID in BIOS. It was resolved by first following this post, then switching SATA mode to AHCI in BIOS and booting to Safe Mode in Windows which seems to install the AHCI driver needed to start Windows in AHCI mode.

After this, I was able to again restart from the elementary USB, chose “Try without installing” and started the installer from the desktop. When arriving at the “Installation type” screen I was able to see the SSD, hooray! :)

However, after finishing the installer it rebooted straight into Windows, bypassing GRUB – but that’s a topic for the next post.