One year with my ASUS C201 Chromebook

I’ve been using an ASUS C201 Chromebook for a full year (see original post) now as my daily driver personal machine. I got mine used off Amazon, there was a sale going on and I think I paid around $120 for it. This tiny laptop is powered by a quad-core ARM 1.8GHz Rockchip RK3288 processor which is plenty quick for daily email, web browsing, reading and writing or watching videos. The C201 is very light – 2.22 pounds according to the kitchen scale and I can just slap it closed when I run off to do something and its instantly on again when I come back to it.

In this post I’ll go over what I like about this tiny laptop, why its become my daily driver for most tasks, and how I use it with crouton.


The chicklet style keyboard is very usable with good firm spring action and its sized about right for my comfort. Its not a touchscreen (something I think I would miss more if this model could run android apps from the Play store but it at least currently cannot) and at 11.6″ I consider it the absolute minimum usable screen size. The screen is crisp and bright at its default resolution (1366×768), though it can be switched into a 1536×864 mode in a pinch. Battery life has been very good providing many hours of run time on a charge (charges up pretty quickly), though there obviously isn’t room for a big battery in this thing anywhere. I’m usually able to get several days of decent use out of between charges with normal use. The touchpad works well, though most often I’m using a Logitech m325 wireless mouse plugged into one of its two USB ports. The speakers are just OK, I wouldn’t expect a great sound from something so small and light. Sometimes I’ll use headphones if I want to watch a video with a lot of dialogue. I’ve never used the micro HDMI port since I didn’t want to buy yet another HDMI cable (I already have standard and mini HDMI cables!) An interesting option on the device is the addition of a microSD slot. This makes it possible to easily bring a bunch of files over to the machine or back it up but I wanted to use it with crouton (see below) and unfortunately it won’t play nicely with ChromeOS when the machine goes to sleep. I’ve ended up using my bootable USB Arch drive which I’m using regularly to boot Arch on various machines anyway.

Sharing files with my USB drive

One of the two USB ports holds my Sandisk Cruzer Fit 64GB USB drive, which is a bootable drive (note: this drive is configured to boot on 64bit Intel machines not on the Chromebook) loaded with Linux Arch. With the USB drive plugged in I can access the files on that as needed and save new files to it and in crouton I can use some of my dot files and configurations from that install to make the crouton environment more usable to me. The drive is partitioned with three partitions, a smallish (4GB) Fat32 partition so that when I need to transfer files to a Windows machine I can do that easily, a 15GB OS partition (64bit Arch) and a 40GB Home partition which I keep synced to my older, heavier, and now less used laptop on occassion with an rsync script. What I did here is constructed a folder tree which mirrors that on the laptop (though not a complete copy of the tree on the laptop) and I just run an rsync in one direction pulling the data off the Arch stick over to the laptop. The laptop is similarly backed up to a couple USB drives at odd intervals.

But this thing runs ChromeOS?

The elephant in the room here is that this is a Chromebook. It runs ChromeOS. The paradigm of Google’s ChromeOS is that instead of a linux kernel and java virtual machine like in the android OS, they would use a linux kernel and their popular browser application Chrome instead. The idea of being able to do everything in a web browser seemed far fetched when ChromeOS debuted, but it has made a pretty good case for the choice over the years. Now, I’m not a complete Google fan-boy but I do tend to lean more toward Google than Microsoft or Apple and I have to say that after using it now for a year its definitely stable and useful enough for basic daily use. I can see it as a complete solution for students or older folks (I think I might be in that latter camp now myself).

The old FUD about how a Chromebook ties you to the cloud for everything have proven less of an issue as more folks have gotten used to using smartphones which are almost entirely cloud-connected devices (few even offer an SD card option anymore), but you can still create files locally on ChromeOS if you want to. I’m typing this post in a program called MME (Minimalist Markdown Editor) and I’m saving the file into a folder on my USB drive. One pain in the ass which persists is the ChromeOS cloud printer requirement. I rarely need to print stuff so buying a new printer (which works fine from other machines) just so I can print easily from the Chromebook isn’t high on my list. I’ve thought about using a raspberry pi to turn my old printer into a cloud printer but haven’t been bothered enough yet to do so. Generally if I need to print I just fire up a “real” machine.

I’m not a big gamer, which is good since the only games you’re going to be playing on this device would likely be low end, but I would certainly miss the tools I’ve grown used to having on my grown-up Linux laptops. Thankfully, I can sort of have my cake and eat it too.

Using Crouton

Crouton is a set of scripts which make it simple to create a chroot to set up a full linux environment under ChromeOS. The project was started by David Schneider, a Google hardware engineer who wanted to be able to run a full blown (Debian) Linux on a Chromebook and over time it has matured to the point that its very usable. It does require you to switch the Chromebook into developer mode which means that every time the Chromebook boots (this is actually rare since you’re usually going to just shut the lid and not go through a full shutdown or reboot) you will see a Developer mode splash screen where you have to hit Ctrl-D and be careful to not hit the space bar (which resets the device and takes it out of Developer mode). Crouton isn’t something a normal user is going to be messing around with, but its certainly easy enough for anyone to set up.

I won’t go into setting up crouton which is described exceedingly well in the readme, but instead I’ll focus on how I’ve ended up using it. Depending on what I want to do I can end up using crouton as a linux shell only (command line with no graphical interface at all) or with an X server to run graphical programs.

Originally I had planned to install crouton to a microSD card, but it turned out that at least with the version of crouton I was using originally (I haven’t tested again recently) I wasn’t able to suspend (close the lid) without crashing a running crouton instance. Obviously this made using the microSD for crouton out of the question. I just install it to the flash memory of the device now, which sucks less than you might think since I store files I download or generate on my USB drive described elsewhere here.

Using just a shell in a Chrome tab

Sometimes I don’t need a graphical interface, I just need to use a command line utility. There are a ton of great linux programs available which will run without a graphical interface. Some of these I use most often in shell include:

  • mc – file manager
  • emacs – text editor but mainly for docs I keep in orgmode
  • vim – text editor for basically everything else
  • mocp – music player
  • telnet – to log into!
  • whois – easier than hitting
  • alsamixer – sound mixer if I can’t map keys for these functions
  • ssh – to access remote machines. This would also work from the stock crosh shell I think.
  • abcmidi – a suite of programs to handle abc musical notation (includes abc2midi and yaps which produces sheet music)

Since I updated my crouton install to xenial, programs that depend on ncurses seem to flash when I run in a Chrome tab (mc and mocp) which makes them almost unusable. They seem to run fine when I launch them in a terminal under a full graphical environment, and they always worked fine in trusty. Not sure whats going on, but haven’t looked into it too deeply as yet.

Launching my crouton installation is as easy as CTRL + ALT + t which opens a crosh shell in a tab, then typing shell, then sudo enter-chroot.

Using i3

There are a lot of linux programs which require a full graphical environment.

  • gimp (think photoshop)
  • libreoffice (a full office suite)
  • evince (.ps and .pdf reader)
  • firefox (yes, Firefox is very slow on this machine under crouton – still useable, though without 3D acceleration you’re not going to be watching videos in it.)
  • vlc (to play my own music and not be beholden to cloud providers!) then install vlc-plugin-fluidsynth and navigate to Edit | Preferences | All | audio | audio codecs and point the sound font to:
    (or similar sound font) in order to play Midi files (created with abc2midi)

I can start up a separate linux windowing environment (i3) with sudo enter-chroot xinit at the crosh shell. The utility of running gimp or libreoffice seems pretty obvious, but why Firefox on a Chromebook which runs Chrome? I have a bunch of add-ons I like to use in Firefox and Firefox sync is set up on so many of my machines. Chrome is fine and I use it all the time, but there are times I would rather be using Firefox – its nice to be able to do so.

I decided early on that the suggested XFCE desktop wasn’t for me. Usually I have a specific program I need to run and all I want to do is switch into linux and run that program. I might need to have another window for a file manager (usually mc is good enough here) to move some files around to act on, but I don’t need an entire linux desktop. I’ve been using the tiling window manager i3 in Arch for some time now and while it has some usability quirks (and a little bit of a learning curve), its a much better choice for slow hardware. Since I was hoping to be able to run some real programs on the device I wanted as little overhead as I could get. Installing i3 in crouton is documented in the crouton wiki so theres no need to rehash that here.

Since I’m using i3 on my bootable USB drive, I just copied my .i3 directory (where the i3 config file lives) over to my crouton home to get a jump start on my settings (I don’t just symlink it over since I wanted to use some different settings on the C201 than I do on other machines. One important difference is that of a different Mod key since the Chromebook unsurprisingly has no Windows key). I also installed feh which I use to display a background image for i3 (and set a path to that in my i3 config). Then I installed scrot (to take screenshots when I’m in that mode) and imagemagick (for the mogrify command) which I use with i3lock so I can just hit Mod key + l to lock the screen if I want to leave the machine sitting around in that mode. I could also hit CTRL + SHIFT + ALT + arrow to go back to ChromeOS and lock the screen there with Magnifier + l

making xterm usable

In graphical mode I usually still need to be able to run a terminal for shell commands (and the shell programs need to run in a terminal if I want to run those in the graphical environment) so having a nicely configured terminal is important. The default terminal I have configured in my i3 config file is xterm and its pretty uglyby default – the font is too small and I like to use light colors on a dark background.

I copied over the .Xresources file from my USB drive which has settings I like.

xterm*faceName: Liberation Mono:size=11:antialias=true
xterm*font: 7x13
! terminal colors ------------------------------------------------------
! tangoesque scheme
*background: #111111
*foreground: #babdb6
! Black (not tango) + DarkGrey
*color0:  #000000
*color8:  #555753
! DarkRed + Red
*color1:  #ff6565
*color9:  #ff8d8d
! DarkGreen + Green
*color2:  #93d44f
*color10: #c8e7a8
! DarkYellow + Yellow
*color3:  #eab93d
*color11: #ffc123
! DarkBlue + Blue
*color4:  #204a87
*color12: #3465a4
! DarkMagenta + Magenta
*color5:  #ce5c00
*color13: #f57900
!DarkCyan + Cyan (both not tango)
*color6:  #89b6e2
*color14: #46a4ff
! LightGrey + White
*color7:  #cccccc
*color15: #ffffff

You also have to tell X to use that file (I’m using the xrdb command to do that).

My .xinitrc file has:

xrdb -load ~/.Xresources
exec i3

I occasionally use emacs (but mostly because of org-mode) which I like for its list management functionality. I keep a bunch of .org files on the USB drive for notes and I set up emacs in the linux environment on the Chromebook to look like it does in my Arch install. This is basically just copying my .emacs.d folder and .emacs init file over to my home directory (and installing emacs of course). The only change I need to make is my initial-buffer-choice path so that the file I want to load up when I start emacs can be found. I don’t have a clue when it comes to lisp, so I’m not going to offer any advice here.

update 170922: one important thing I do is access work servers and since I could never get the VPN to work on the Chromebook to access our Sonicwall (turns out ChromeOS doesn’t support XAUTH) I had about given up. Recently we enabled SSL access to the firewall so I can now use the official Sonicwall Mobile Connect application (the first time you connect remember to add the port :4433) which works fine. The bigger issue with this is that there isn’t any free RDP client that works for me on ChromeOS (the Google Chrome RDP app requires Chrome to be installed on the server), but I just switch over to Crouton and run rdesktop -f <server>. I use tkabber to access my jabber server also under Crouton.