Sometime during late 2019 I found a cheap Asus Chromebook C201P on Tradera, the Swedish version of ebay, and of course I couldn't resist buying it. I was looking for a new EDC laptop, something a little lighter in weight compared to lugging around my refurbished ThinkPad X200 with extended battery and that hefty charger. I wanted something slim and lightweight that could live in my backpack while I'm out and about and it would primarily be used for reading math pdfs, do some coding, surfing, listening to SomaFM (Deep Space One, Drone Zone) or MPD streams, SSHing into other machines and maybe watch a YouTube video or two.
My requirements was pretty minimal and the most resource heavy program I planned on running was probably Firefox so I was even considering maybe going back to using some old classic Asus Eee mini PC, but IIRC they are quite heavy compared to their size and the battery time on those tiny machines sadly leaves a lot to be desired.
|CPU||Rockchip RK3288 1.8 GHz|
|DISPLAY||11.6” HD (1366x768)|
|Ports and connectivity|
|2x USB Type-A 2.0|
|Audio jack combo|
|Web camera HD webcam|
|Microphone Digital microphone|
As you can see this is not a powerhouse of a computer but it serves my modest needs well.
Anyway, I bought the C201 and it arrived in the mail a few days later. It looked almost unused and it worked just fine. I've never really played around with Chrome OS before so I did a few test runs and it seems convenient, easy to use and looks OK but it's obviously not for me.
What first struck me is that I actually think the keyboard is pretty good even though it is missing some vital keys and some are renamed as per usual on Chromebooks, it's very comfortable to type on. With only 2 gigs of RAM it surprised me how snappy it is. The screen looks nice and the battery time is amazingly good compared to my other machines.
So why did I want this particular Chromebook model?
You can easily flash Libreboot onto it!
Before even thinking about doing this I think one should pause and read through this information thoroughly a couple of times first.
Flashing the firmware is easy, albeit a little scary. You just have to follow these instructions very carefully. Basically it amounts to:
- Gaining root privileges on ChromeOS
- Configure verified boot parameters
- Take it apart and remove a write-protect screw and put it back together again
- Pray to an $entity of choice
- Flash Libreboot to SPI, which either can be done internally, via software or externally, with a SPI flash programmer
- Optionally, re-insert the write-protect screw
I chose to flash my C201 via the software route, and there was a couple of anxious seconds here and there but in the end everything went smoothly.
The practical benefit of this is that you get a few extra seconds at boot up for choosing boot medium (internal, SD card, USB, etc).
After flashing the firmware it was time to try get some Linux distribution working on the C201. The distro of my choice is the Universal Operating System Debian and Libreboot recommends it so it was a no brainer.
InstallingDebianOnAsusC201 gives you decently detailed instructions on how to install Debian. I tried and failed miserably. The instructions are somewhat dated at this point and I think it would be pretty easy to modify them to get it working with more recent releases of Debian but I simply lack the know-how so I started searching for alternatives.
This list was particularly helpful and allowed me to explore a number of alternatives of which Arch ARM was the least worst experience but, even after finding some useful hacks, there were so many issues I never got it to a stage where I felt comfortable enough to actually use the machine for anything important which defeated the whole purpose of getting this laptop in the first place. I never even considered overwriting the internal eMMC so I ran everything from a SD card just to be sure I wouldn't brick the device.
Long story short, I finally gave up on getting a usable Linux system on my C201 and it ended up collecting dust for many months.
PrawnOS to the rescue!
I don't remember how I found it exactly but one day I managed to stumbled upon PrawnOS.
A build system for making blobless Debian and mainline Linux kernel with support for libre ath9k wireless, dmcrypt/LUKS root partition encryption, and graphics acceleration using panfrost.
- No blobs, anywhere.
- Sources from only main, not contrib or non-free which keeps Debian libre.
- Currently PrawnOS supports xfce and gnome as choices for desktop enviroment.
- full root filesystem encryption
- mesa with support for panfrost for graphics acceleration
- functional sound, touchpad, keyboard mappings
- Patches for reliable USB on veyron devices.
- Patches to support the custom GPT partition table required to boot on veyron devices.
- Support for Atheros AR9271 and AR7010 WiFi dongles.
- Support for CSR8510 (and possibly other) bluetooth dongles.
I immediately downloaded the latest release and dd'd the image do a SD card to try it out. In all honesty, my expectations were low to non-existent, it all sounded to good to be true, but god damn everything worked! Full disk encryption, audio, graphics! All the weird issues gone. No fiddling needed and I had a fully operational Debian system at my disposal. A wonderful feeling.
What more could you ask for?
The Wi-Fi issue
The built-in WiFi card requires the proprietary non-free binary firmware blob brcmfmac4354-sdio.bin which is, by design, not included in PrawnOS which is of course completely understandable since it aims to provide a completely libre system. I, of course, knew all of this beforehand but I did a very good job of ignoring it.
While I'm all for Free Software and try my best to avoid running proprietary software when I can, at the end of the day I'm a pragmatist I guess. Some people are willing to go great length to ensure they only use free software (e.g. AsusC201-usb-wifi-from-webcam !1 ).
I was now in the absurd situation where I had a fully functional system with a fully functional built-in WiFi-card not working due to self-imposed ideological restrictions. The situation felt ridiculous, to say the least. But I had some options:
- Try to build and install non-free drivers for the internal WIFI, post-installation of PrawnOS
- Try to build PrawnOS with the standard mainline kernel including binary blobs
- Buy a USB WiFi adapter
I briefly looked into the first two possibilities. The first one
seemed to be impossible or at least hard while dealing with the libre
kernel. The second option seemed more doable but a little over my head
so I opted for buying a
AR9271 WiFi adapter from China. When it
arrived it was the wrong chipset so I had to order another one and made
sure it had the AR9271 chipset this time.
It arrived at last.
Antenna not included in picture.
This adapter was so bulky and inconvenient that I finally ordered the more expensive Penguin Wireless N USB Adapter for GNU / Linux (TPE-N150USB) from Think Penguin. The package mysteriously disappeared somewhere and never arrived. I contacted Think Penguin about this and they were kind enough to do a reship. It was a long waiting time but I was very happy when it finally arrived.
The adapter works very well and thanks to PrawnOS no compiling of drivers necessary. At this point I finally had a usable completely libre laptop! Quite a project with a lot of waiting.
It was a lot of hassle to get the Asus Chromebook C201P to a point where I could use it as intended. A combination of stupidity and bad luck I guess. It now lives in my backpack, I carry it with me almost everywhere I go and I use it daily. I'm really satisfied with how it all turned out but the road to get there ...
It works well for everything I do. It's light weight, the charger is tiny and the battery life is very good. I still like the keyboard a lot and the WiFi adapter is great and small enough not the be in the way.
After using my C201P for a couple weeks I didn't boot into Chrome OS even once so I made the decision to nuke the internal eMMC and attempt to install PrawnOS to it. This was scary but it worked out just fine without any complications whatsoever. Since eMMC is only 16GB I opted for having /home on a SD card. To achieve this is I pretty much followed this guide Keyfile-based LUKS encryption in Debian. This makes the startup a bit slower but it's absolutely something I can live with. As a side note, without FDE the startup is blazing fast.
I have my usual i3wm setup with a homemade battery indicator for i3blocks written in Python and a small script to show disk usage on both / and /home.
I thought that the lack of an Ethernet port and only having two USB ports, where one of the USB ports is always occupied by the WiFi adapter, would be a nuisance but it's been totally fine so far.
But I'm considering investing in a USB to Ethernet Adapter and maybe a CSR8510 Bluetooth USP adapter.
On the software side I have no major complaints. Hibernation can sometimes be a little shaky but besides this everything works as expected. I've been using this system for a while now and it seems stable enough.
Here's a picture of the obligatory laptop stickers for good measure so customs easily can identify me in the future.
Since there was a lot of waiting time I stitched together a crusty padded laptop bag with a builtin pocket for the charger, adapters and stuff. It's a little oversized but it works.
Not the most charming picture though.
- Living libre can be hard.
- I know a lot less about Linux than I think.
- Always know what you're getting yourself into.
UPDATE Thu 25 Mar 2021 10:09:01 PM CET
I think the following two blog posts from cafebedouin.org are worth reading.
I'm actually working on replicating this. More on this in a later post ↩