This post is not a tutorial or a walkthrough or comprehensive introduction or anything else that would probably be beneficial or helpful to those you reading it.

Instead, it’s a bit of a waffle.

I’ve just spent a few hours playing with something very cool on my over-powered and under-used Acer Chromebook Spin 13. I’ve scratched an itch I’ve had for the longest time and it’s so satisfying. So, a bit like when I resurrected an ancient Chromebook, I want to tell someone about it — but this time without any weird spooky gifs 😅.

Run Linux on Modern Intel Chromebooks

Breath is a bit different to other “run Linux on a Chromebook” efforts. In some ways it’s a “hack”, but one that’s firmly within the technical boundaries of how Google makes ChromeOS run. In short, it lets you run a full Linux distro on a modern Intel Chromebook without needing to flash custom firmware, replace the boot loader, or even wipe ChromeOS.

Better yet: it’s the only current solution that delivers a Linux experience that supports all drivers (touchscreen, stylus, touchpad, audio, etc) out of the box.

Now, the ‘modern’ qualifier I used a few lines back is important here. The more recent a Chromebook is the less likely it is to have full mainline Linux kernel support or support from third-party projects like Crouton or GalliumOS (itself largely undeveloped these days).

Sure, you can flash some custom firmware and get a regular distro to boot on most Chromebooks regardless of age, but not without some major sacrifice: some hardware features.

Breath takes a different approach to the likes of Crouton, GalliumOS, and Crostini, and it’s why it’s so effective.

“Breath bootstraps Linux the way Chromebooks like it. It doesn’t rely on ChromeOS or custom firmware and supports all drivers on modern (post 2018) Chromebooks,” reads the website. You do need to put your Chromebook into developer mode but you do not need to flash any alternative firmware to get Linux to boot.

Breath is not a distro itself but a script that you run to build a Linux distro image (based on Ubuntu or Arch) you flash to a USB and boot from. You then run the distro off of a USB (ideally a relatively fast one) or install it to the internal storage, wiping ChromeOS.

The process is essentially this:

  1. Put Chromebook into developer mode
  2. Enable USB booting via ChromeOS Shell prompt
  3. On a different machine, get Breath via git
  4. Run build script to create a custom IMG file
  5. Flash custom image file to USB
  6. Boot Chromebook from the USB

And that’s basically it.

The Breath docs walks through the whole thing step-by-step. It’s really easy to follow along. Building the custom image does take a while, and you’ll need plenty of disk space to do it as the resulting IMG it generates is ~12GB in size.

I Wanted Full Linux Desktop, Not Crostini Apps

Result 👍

I own a Acer Chromebook Spin 13 (I used to blog about ChromeOS regularly). It’s modestly powerful device, hardware-wise: Intel Core i5-8250U, 8GB RAM, 2K 3:2 touchscreen, large SSD, etc. But it’s relatively un-powerful on the software side.

ChromeOS is fast on it, mind. Plus it can run Android apps and Linux apps. But it just isn’t regular Linux.

I want GNOME Shell, I want Firefox, I want to use the stylus to write in Xournal, I want my favourite command line apps, and my favourite GNOME extensions, and so on.

And thanks to Breath, I can have it!

Yes, I’m writing this post from Ubuntu 22.04 LTS with GNOME Shell desktop running on my device. While the overall experience isn’t perfect it’s so close to being the full Linux experience I want. Amusingly, the Ubuntu image Breath builds does not include snapd at all which was a surprise (and some will say key feature).

Not perfect yet though. I haven’t managed to get audio working, and as Chromebook has a 2K 3:2 screen the UI scaling is a bit off by default. Experimental fractional scaling uses more CPU power but it does deliver a UI size that isn’t quite so My First OS looking:

At 150% scaling everything looks in proportion

More pressingly, the OS does freeze for a split second during use, and apps throw a ‘no responding’ error (as pictured above). This is transient; the system/app recover and work as normal without any dramatic intervention (like a hard reboot).

I’d guess this is a bottleneck caused by the cheap USB drive I’m using. I plan to order a 128GB USB Type-C flash drive with 3x better read/write speeds to use instead (I could solve it now by installing Ubuntu to the internal drive but I don’t want to wipe ChromeOS as I do like to try out new ChromeOS features when they land in the developer channel).

Update: August

I bought a 64GB USB drive with better read/write speeds and —hurrah— it solves the intermittent pauses I was experiencing initially. Audio remains a work in progress.

But so far, so good. If I can get audio to work, and if switching to a host drive with better data throughput nixes the pauses, this will probably become my main Linux laptop: it’s faster than all my others, it has a much better screen, and, in a, weird way, using it after jumping through a few hoops to “tailor” it to my needs is… satisfying.

Also have an issue with the keyboard backlight not coming on under Linux, so I’ll have to report that.

Anyway, if you’ve got a 8th-generation Intel Chromebook that you’d use more with proper™ Linux on it, I highly recommend giving Breath a go. The little bit of effort you have to put it at the start is more than worth it the minute the screen lights up with the Ubuntu boot splash.