Running Debian GNU/Linux on an ASUS Chromebox
My old Linux desktop machine, a Shuttle SP45H7 with an Intel Core2 Duo E7400 2.8 Ghz CPU, 2 GB of RAM, and an NVIDIA 8600 GTS video card, stopped booting reliably recently, so I was reluctantly thrust into the market for a new computer. I've used ASUS Chromeboxes a bunch, albeit in conjunction with Chrome OS, and figured that one could make a good replacement:
- upgradeable: the 16 GB SSD can be swapped for a larger one and the RAM can similarly be upgraded
- cheap: just $150 USD from Newegg after subtracting a
$10$9 ASUS mail-in rebate and $20 Newegg gift card
- low power consumption: supposedly just 18 watts at full load
- quiet (although it still has a fan)
- tiny, and it comes with a bracket that can be used to mount it to the back of some displays
- easy to replace if it dies
ASUS offers both a Celeron 2955U version with 2 GB of RAM and a faster, harder-to-find Core i3-4010U version that's sometimes bundled with 4 GB of RAM and a keyboard and mouse. (There's also a Core i7-4600U version of the device, but I believe that it's currently only available as part of the Chromebox for Meetings program.)
I find myself spending the vast majority of my time in a web browser or SSH-ed to another system (typically via a Chromebook), so anything beyond the Celeron seemed like overkill (the i3 version costs twice as much). I figured that switching from my old system's rotating hard disk to an SSD would more than make up for any diminishment in CPU horsepower, and so far, this assumption has been correct. If things start to feel sluggish at some point, I'll probably just try upgrading the memory beyond 2 GB.
The Chromium OS documentation for the ASUS Chromebox describes entering dev mode to enable legacy boot so that OSes other than Chrome OS can be booted. As far as I'm aware, though, the legacy BIOS shipping with Chrome OS (at least when I set up this computer in August 2014) is completely broken and won't boot off USB, making it pretty tough to install a new OS. Although I'm not entirely comfortable with installing random third-party software, I ended up removing the firmware write-protect screw and installing John Lewis's patched SeaBIOS build (another set of instructions here). With the updated BIOS, I was able to boot a Debian USB installation image.
My next task was installing a larger solid-state drive. There's not a huge amount of physical space inside the Chromebox, and I believe it will only accept a 42 mm or smaller module. I went with a Transcend MTS400 M.2 256GB module, which cost about $135 from Newegg at the time (but has unsurprisingly become even cheaper since then). There's plenty of information online about how to swap out the drive (or add additional RAM, which I haven't bothered doing yet; it hasn't seemed necessary with my austere web-browsing lifestyle).
After installing Debian Wheezy (the "stable" release), I had a hilariously difficult time getting video to work correctly. After struggling with intel_agp errors, then installing a backported kernel, encountering KMS problems (i.e. blank console during boot), trying a different monitor connected via DisplayPort, and then having issues with the X server not finding any screens, I finally gave up and installed Debian Jessie (the "testing" release)... and everything just worked. And the system boots in seconds. I'm not crazy about the frequent updates, but nothing's broken yet.
I had problems getting the Chromebox to work with an ancient Dell FP2001 display; neither a DisplayPort-to-DVI nor an HDMI-to-DVI cable was able to deliver a picture. I eventually got it working by using an adapter to connect to the monitor's VGA port, but... VGA. After upgrading to an ASUS VG248QE display, a simple HDMI cable is working perfectly. HDMI audio is working after running pavucontrol and clicking the "Built-in Audio Digital Stereo (HDMI)" device's "Set as fallback" button to tell PulseAudio to route audio there, although I mostly just stream music to a Chromecast.