System76 Galago UltraPro Review – Clevo W740SU


I pre-ordered a System76 Galago UltraPro (Clevo W740SU) to replace my current Dell Precision M4600 laptop. I usually run Ubuntu or Debian Unstable on my laptops depending on the current state of hardware support. The Precision M4600 has been running Debian Unstable (Linux kernel 3.10) while the Galago comes preloaded with Ubuntu 13.04 (Linux kernel 3.8).

I ordered the 16 GB RAM, 256 GB mSATA and Centrino 6235 options.

Iris Pro Graphics 5200
Intel Core i7-4750HQ Processor
16 GB Dual Channel DDR3 SDRAM at 1600MHz
256 GB Crucial M4 Series mSATA Solid State Drive
Intel Centrino Advanced-N 6235

For the full list of specifications you should look at System76 Galago page.

The Galago comes in at just under 4 pounds and fits very comfortably on my lap. During normal use on battery the laptop never got hot or too loud. My Precision M4600 weighs in at a hefty 7 pounds and is prone to cause 1st degree burns on occasion so it is quite a change.

The shell is fairly standard semi-metallic plastic – fingers do not leave prints on it like some similar materials I’ve seen. The laptop hinge is a little less stiff in opening than most laptops I’ve used – it is just right for me. There is some flex in the LCD panel – understandable given the thinness – but no obvious build quality or backlight leakage issues. Overall it may not turn heads but is a solid looking laptop with no egregious flaws.

First Power Up And BIOS

On powering up for the first time, you are presented with a fairly standard BIOS start screen. Compared to the M4600, there are very few BIOS settings – it is comparable to a retail HP laptop.  On second boot, after Ubuntu configuration, I was presented with a blank screen and blinking cursor. Power cycling the laptop brought up the proper login screen. I later found out this is a display manager bug that has been fixed. Boot times are very quick as expected for SSD.


The Galago has a 14″ full HD screen – it is comparable in quality to the 15″ M4600 panel at the same resolution. Most of my work is done in a terminal – the screen can fit two standard 105 column x 57 line Ubuntu terminals side by side. I didn’t see any color palette or brightness issues with various photos and videos – overall this is a good screen.

Keyboard and Trackpad

This is where things get  ugly for the Galago. At my typing speeds, the chiclet keyboard misses characters very frequently. I have used many laptop keyboards over the last 20 years and this is the worst keyboard I have ever used. Left and right clicking at the bottom of the trackpad result in mouse jumps and skips to the bottom of the screen. I also find the two finger scroll kicking in with one finger – I don’t have particularly large fingers. The two finger scroll can be turned off and tap to click can be enabled – I haven’t tried these settings yet to see if they help. The end result is that out of the box, the laptop is completely useless unless you hook up and external keyboard and mouse.


I transferred a high-def h.264 mkv video over to the Galago to test the video capabilities. The bundled video player wouldn’t play it (I expected this). I installed my favorite video player, mplayer from the repositories and was greeted with a plain green screen – clearly a driver issue. After consulting the system76 support forums, it seems that an updated Intel driver is required. After installing the new driver, mplayer was able to render the video properly. However, I noticed a small bit of tearing on action scenes and the video did not seem smooth. It turns out that mplayer does not use the vaapi interface required for hardware acceleration. After installing the vlc video player and enabling hardware rendering the video did play smoothly as expected. A quick look at system utilization showed vlc using 10-20% of cpu for playback. Fan noise was a lot quieter than my M4600 during playback as well.

At work, I use a Dell U3011 30″ monitor. I hooked it up via DisplayPort and everything works fine at full 2560×1600 resolution.

Update – Linux will not even have support for the 128 MB eLLC cache in the Iris Pro until kernel 3.12 (source – – so yet another reason this hardware is half-baked.


The built-in speakers are small and missing bass punch – I wasn’t expecting much and wasn’t surprised.

I tried a skype call – the default audio devices did not work. I was able to get a headset working by using the HDA Intel PCH, VT1802 Analog (hw:1,0) device, but I was unable to get the built-in microphone to pick up any audio. Video through the webcam was fine.


I chose the Centrino 6235 option because it has been baked in-kernel for some time. I didn’t experience any problems connecting to the wireless N access points at home and at work. Throughput is pretty much as expected. I never use bluetooth so I did not test that.


With several programs open and otherwise idle, powertop reported around 50-150 wakeups per second and 3 hour 45 minute battery life at maximum brightness. I haven’t performed any battery rundown tests yet.

Card Slot

I tested an SD card from a raspberry pi and a micro-SD card from my phone with adapter and there were no issues reading and writing. When inserted, the card sticks out about 1/2 inch from the side of the laptop which is pretty annoying.


Two things I’ve had trouble with Linux in the past – wireless and audio out – resumed working correctly after a suspend. For whatever reason there is no option to hibernate so I did not test this.


I compiled Handbrake 0.99 for the Galago and rendered a sample high def video down to h.264 standard def. My M4600 with 2.3 GHz  i7-2820QM was able to render the video at 55.2 fps. The Galago blasted through at 120.4 fps – pretty impressive! During this test the fans kicked into high gear but the noise level was low.

Final Impressions

If you plan on running Linux or if you type while using a laptop – do not buy this laptop. Actually do not buy this laptop in any situation.

The combination of hardware issues (keyboard) and driver and software issues (trackpad, microphone, video) make the Galago Linux experience pretty dismal. I am used to researching hardware and installing various bits and blobs to make Linux work correctly – perhaps I had an unreasonable expectation that by going with a Linux vendor I would not have to worry about these problems.

I am very disappointed that System76 decided to ship a laptop in this state, and I will never order hardware from them again. If System76 is not going to guarantee a decent Linux experience, what is the point?

I collected various hardware info (dmesg, lspci, cpuinfo, etc) of the laptop in this file.


2013-08-30 – I shipped the Galago back to System 76.
2013-09-09 – The refund was processed (minus a $5 handling fee and my own shipping costs)

MySQL Performance Graphs with pnp4nagios

If you are managing MySQL servers, you’ve probably encountered Percona’s suite of enhanced database servers and management tools. Percona released a set of cacti templates (now part of the monitoring plugins toolkit) for measuring MySQL performance trends. I don’t use cacti but have a pretty extensive pnp4nagios setup, so I ported those templates to pnp4nagios. The results are below.

These graphs are very useful for visualizing trends in your database workload and identifying future problems before they occur. MySQL 5.1, MySQL 5.5, MySQL 5.6, and Percona 5.5 and 5.6 are supported. The amount of performance data is too large to be returned via NRPE, you will need a direct connection from Nagios to the database to use the plugin or else use check_by_ssh. A future version may address this problem by breaking up the plugin into multiple checks.


Version 1.5 adds support for Percona 5.6 and fixes the Oracle 5.5 template.

check_mysql_counters – version 1.5

There is now a github repository for check_mysql_counters!

The following graphs are only available with Percona Server 5.5. Some are also available with Oracle 5.5 or later.













Graphing Nagios services with pnp4nagios 0.6

A few years ago I wrote a guide on using pnp4nagios with Nagios. Since then pnp4nagios has had a major version update and the guide could use a refresh.

pnp4nagios is a graphing framework with portions written in perl, PHP and C for automatically parsing performance data collected by Nagios plugins. The data is collected into RRD databases for display in the Nagios web interface. The graphs created by pnp4nagios are similar to other monitoring tools like Cacti.

pnp4nagios is designed to work well with the standard Nagios plugins and create useable graphs right out of the box. The appearance of the graphs can be customized.

Pages of related graphs (for instance, CPU usage or TCP connections of each server in a web farm) can be easily defined and displayed in HTML or exported to PDF.

pnp4nagios requires perl, PHP (built with XML, zlib and GD support) and rrdtool. It can optionally use the rrd perl modules for better performance. Packages for Fedora, Debian and Ubuntu are available. My example will use Ubuntu Server 12.04 with the bundled perl, PHP and Apache packages. Nagios has been installed from source to the default location of /usr/local/nagios.

Installing pnp4nagios

By default, pnp4nagios 0.6 installs into its own directory – a change from version 0.4 which was installed in your nagios directory.

jason@ubuntu:~/pnp4nagios-0.6.17$ ./configure
*** Configuration summary for pnp4nagios-0.6.17 03-25-2012 ***

  General Options:
  -------------------------         -------------------
  Nagios user/group:                nagios nagios
  Install directory:                /usr/local/pnp4nagios
  HTML Dir:                         /usr/local/pnp4nagios/share
  Config Dir:                       /usr/local/pnp4nagios/etc
  Location of rrdtool binary:       /usr/bin/rrdtool Version 1.4.7
  RRDs Perl Modules:                FOUND (Version 1.4007)
  RRD Files stored in:              /usr/local/pnp4nagios/var/perfdata Logfile:      /usr/local/pnp4nagios/var/perfdata.log
  Perfdata files (NPCD) stored in:  /usr/local/pnp4nagios/var/spool

  Web Interface Options:
  -------------------------         -------------------
  HTML URL:                         http://localhost/pnp4nagios
  Apache Config File:               /etc/apache2/conf.d/pnp4nagios.conf

jason@ubuntu:~/pnp4nagios-0.6.17$ sudo make all
jason@ubuntu:~/pnp4nagios-0.6.17$ sudo make install
jason@ubuntu:~/pnp4nagios-0.6.17$ sudo make install-webconf
jason@ubuntu:~/pnp4nagios-0.6.17$ sudo make install-config

Configuring pnp4nagios

The main configuration file for pnp4nagios is /usr/local/pnp4nagios/etc/config.php

Before configuring pnp, we need to decide how we want Nagios to process the performance data. This largely depends on the number of monitored hosts and services of Nagios.

Default mode, where is executed after each host and service check, is ok for very small installations.

Bulk mode, where performance information is appended to a temporary file and processed after a short interval, is fine for medium-sized installations.

Setups with hundreds of hosts and services should use bulk mode with npcd, where a separate multi-threaded daemon handles the processing. Version 0.6 introduced integration with gearman – which might be useful if your monitored hosts grow beyond what your nagios server can handle.

Our example will use Bulk mode, but it is possible to switch between modes as your Nagios setup grows.

Edit the performance data section of /usr/local/nagios/etc/nagios.cfg, making the changes noted in Bold:

# This determines whether or not Nagios will process performance 
# data returned from service and host checks.  If this option is 
# enabled, host performance data will be processed using the 
# host_perfdata_command (defined below) and service performance 
# data will be processed using the service_perfdata_command (also 
# defined below).  Read the HTML docs for more information on 
# performance data. 
# Values: 1 = process performance data, 0 = do not process performance data 


# These commands are run after every host and service check is 
# performed.  These commands are executed only if the 
# enable_performance_data option (above) is set to 1.  The command 
# argument is the short name of a command definition that you 
# define in your host configuration file.  Read the HTML docs for 
# more information on performance data. 


# These files are used to store host and service performance data. 
# Performance data is only written to these files if the 
# enable_performance_data option (above) is set to 1. 


# These options determine what data is written (and how) to the 
# performance data files.  The templates may contain macros, special 
# characters (\t for tab, \r for carriage return, \n for newline) 
# and plain text.  A newline is automatically added after each write 
# to the performance data file.  Some examples of what you can do are 
# shown below. 


# This option determines whether or not the host and service 
# performance data files are opened in write ("w") or append ("a") 
# mode. If you want to use named pipes, you should use the special 
# pipe ("p") mode which avoid blocking at startup, otherwise you will 
# likely want the defult append ("a") mode.


# These options determine how often (in seconds) the host and service 
# performance data files are processed using the commands defined 
# below.  A value of 0 indicates the files should not be periodically 
# processed. 


# These commands are used to periodically process the host and 
# service performance data files.  The interval at which the 
# processing occurs is determined by the options above. 


At the end of /usr/local/nagios/etc/objects/commands.cfg, add the command definitions:

define command {
command_name    process-service-perfdata-file
command_line    /usr/local/pnp4nagios/libexec/ --bulk=/usr/local/pnp4nagios/var/service-perfdata

define command {
command_name    process-host-perfdata-file
command_line    /usr/local/pnp4nagios/libexec/ --bulk=/usr/local/pnp4nagios/var/host-perfdata

There is one other thing to check before running pnp4nagios for the first time. If you don’t want the default resolution for your performance data (1 minute intervals for 2 days up to 6 hour intervals for 4 years), you must create a /usr/local/pnp4nagios/etc/rra.cfg file with your preferences. You can use the snippet below as a template.

# 2880 entries with 1 minute step = 48 hours
# 2880 entries with 5 minute step = 10 days
# 4320 entries with 30 minute step = 90 days
# 5840 entries with 360 minute step = 4 years

Now restart Nagios. If you look in /usr/local/pnp4nagios/var/perfdata, you should start to see rrd files created by pnp4nagios for all your monitored hosts and services.

Verify that you have all the components to use the web interface by checking http://your-nagios-host/pnp4nagios/

Correct any missing components, then delete the /usr/local/pnp4nagios/share/install.php file to see your first graphs:

There is one more step to complete the setup. We need to enable extended info in Nagios so that links to the graphs are created for each applicable host and service.

Append two entries to /usr/local/nagios/etc/objects/templates.cfg:

define host {
name            host-pnp
action_url      /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_
register        0

define service {
name            srv-pnp
action_url      /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
register        0

These are templates that you add to each host and service definition with graphs:

define host { 
    use                     linux-server,host-pnp 
    host_name               ubuntu 
    alias                   ubuntu 

define service { 
    use                             local-service,srv-pnp 
    host_name                       ubuntu 
    service_description             PING 
    check_command                   check_ping!100.0,20%!500.0,60% 

After restarting Nagios again, the icons for the graphs should appear next to the hosts and services. The image for the graph icon in Nagios in the new exfoliation skin works well – but in the previous Nagios skin you should change /usr/local/nagios/share/images/action.gif to something more appropriate than a bullet hole.

If you’d like to see some more advanced examples of graphing, you can see two in my original presentation.