As I mentioned in my previous article, I bought a Chromebook with the intention of using it as a portable machine for web development, writing, and general productivity on the go.
Chrome OS is quite limited so, in practice, my goal requires installing a version of Linux on the Chromebook. And since I don’t dislike Chrome OS for Netflix and casual browsing, I decided to dual-boot GalliumOS and Chrome OS on my Toshiba Chromebook 2 (model CB35-C3300 specifically).
Below, I’ll give you step by step instructions on how to accomplish that.
Create recovery media and back up your Chromebook
Before even thinking of touching your Chromebook, I recommend creating recovery media via a USB stick. You can do so by following Google’s instructions here.
Note that recovering your Chromebook will only bring it back to its original conditions, as it came to you from the manufacturer.
So if you’ve been using your Chromebook already and have data or customizations that are not synced in the cloud, make sure you backup your Chromebook before proceeding.
Choose a firmware
Toshiba Chromebook 2 models from 2015 use a Broadwell microarchitecture which means that it is recommended that you upgrade their firmware prior to installing GalliumOS.
You have two main choices for upgrading/flashing your firmware. John Lewis’ rom or Mr. Chromebox’s utility script.
Both will work, however, there is an important distinction that led me to use Mr. Chromebox’s script.
John Lewis’ script assumes that you’ll be dual-booting Linux from USB or an SD card. If no such stick or card is present, the system will default to booting from the internal hard drive.
This is all fine and dandy until you have GalliumOS installed on the internal disk and happen to have an SD card or low profile USB stick attached to your Chromebook for extra storage.
In such instances, what happens is that the BIOS (i.e., SeaBIOS) will try to boot from the external storage, won’t find the operating system, and fail to boot (typically remaining stuck on Booting from Hard Disk…
) until you eject the card and reboot.
This happened to me, as I wanted GalliumOS installed on the internal disk while leveraging a 64 GB card for extra data storage. Mr. Chromebox’s firmware worked out of the box for this layout.
Unlike John Lewis’ script, Mr. Chromebox’s script also asked me if I wanted to set my default boot device to USB, so it’s worth noting that it does support the other approach as well.
Long story short, provided your Chromebook is supported, use Mr. Chromebox’s script.
Flash your firmware
OK, assuming you are going with Mr. Chromebox, here are the steps:
- Hold
ESC
andF3
(the refresh symbol key) at the same time, then press the power button. - You’ll get a scary warning that
Chrome OS is missing or damaged
. Don’t worry about it. PressCTRL +D
. Then when prompted, press the enter key. - Your laptop will reboot a few times and make some warning sounds here and there as it does so. This is all part of the process. Let it do its thing.
- When step 3 has concluded, you’ll be booted into a brand new Chrome OS installation in developer mode. Enter your WiFi password and sign in.
- Press
CTRL+ALT+T
to open a crosh session in your browser. Then typeshell
and hit enter there. - Download and execute Mr. Chromebox’s utility by running:
cd; curl -L -O https://mrchromebox.tech/firmware-util.sh && sudo bash firmware-util.sh
- Amongst the available options, for the Toshiba Chromebook 2 2015 pick option 1 (
RW_LEGACY
) and answerN
(so no) to the question about installing on USB, unless you want to boot from a USB stick or SD card. - Follow the prompts until you receive a message about the successful completion of the firmware upgrade.
Install GalliumOS with chrx
chrx is a script that will download and install GalliumOS for you. It can even be used to install other Linux distros, but I suggest you stick to the highly optimized GalliumOS.
Once you’re done with the firmware upgrade described above, you can install and run chrx by entering following command in the shell:
curl -O https://chrx.org/go && sh go
Follow the prompts. At some point, you’ll be asked to provide a size for GalliumOS’ partition. The default, 9 GB, is sensible if you plan to keep Chrome OS.
Two reboots will happen and you’ll find yourself in a brand new Chrome OS installation again. Only this time, not only will you be in developer mode, but you’ll also have a partition ready for GalliumOS.
You know the drill by now:
- Connect to the WiFi
- Login with Google
- Press
CTRL+ALT+T
to open crosh in a tab - Type
shell
and hit enter
Now we can finally use chrx to install GalliumOS. By default it creates a chrx
user for you, which is not ideal, so specify the username (and hostname for good measure). I used:
cd; curl -O https://chrx.org/go && sh go -U tony -H cb
Change tony
to your username, and cb
to whatever you want your box to be called.
If curl fails with a (23) Failed writing body
error, you are likely running the command in the root filesystem /
rather than the home directory ~
, which means that you don’t have writing permission. cd
, as per the command above, before you curl.
Go along with the prompt and any confirmation requests.
Once your machine reboots, you’ll see a developer mode warning screen at boot and you can now use:
CTRL + D
to log into Chrome OSCTRL + L
to log into GalliumOS
(D for default, L for Legacy Boot Mode, but it might be easier to remember L for Linux.)
It’s annoying that the developer warning screen exists, but to remove it you’ll need to perform some hardware surgery, so I have not bothered with it for now.
At boot, do not press the spacebar, or you’ll be kicked out of developer mode, and you’ll have to redo the process of getting back in developer mode.
This matters more so if you leave your Chromebook unattended or if you let your kids or a non-technical oriented person also use your laptop.
Conclusion
In this article, we saw how you can run GalliumOS (a lightweight Ubuntu distro) and Chrome OS on a Toshiba Chromebook 2 (2015).
We first created recovery media and backed up the machine, next we upgraded the firmware, then leveraging chrx we installed GalliumOS.
Finally, using CTRL+D
and CTRL+L
, we choose which of the two operating systems we want to boot when we start our Chromebook.
My first impression of the Toshiba and the dual boot setup are mostly positive.
Provided you are a developer or someone who is technically minded, I definitely recommend this setup for a portable development machine on the cheap.
Get more stuff like this
Subscribe to my mailing list to receive similar updates about programming.
Thank you for subscribing. Please check your email to confirm your subscription.
Something went wrong.
Thanks for the write up; I’m installing this on my CB35-C3335 model and this really helped cut down on researching all of the information out there.
Would this also work with the Acer Chromebook 14 CB3-431?
It would, actually. I have the EXACT same Chromebook. Mind you, i’m only 11 and already coding my Chromebook on my own. So, yes. It does work. Good Luck! 😀
Hey, the way I do it, you have to use esc+F3+Power to run gallium OS. That takes a long time. Is there any other way that you can do this? I know you can run different scripts, then use Shift+crtl+alt+F1/F2 to change it. So, any other way to dual-boot?
Thanks for this instruction. It worked as you said and am pleased. I have one small issue. Perhaps you can help me. I would like to add another 1gb to the Chrome side as it says that i have to low unused amount of space. On the Linux side, I have >3gb. How can I reconfigure chromebook partition?
Paul
Antonio,
I am working based on your article with Linux now and thank you. Can you advise how to reduce the linux partition and add 1gb to the chrome side?
Paul
Hi,
is there a possibility to use 3 different distros beside chrome os ?
Every time I re-partition the linux partition, chrome os fails …
hi, everything works fine until battery reach critical level and Toshiba shuts down. after I plug power, dual boot screen appears, but won’t load gallium. this happened few times now.(like 5-6 times) I have to install gallium all over again, every time. Believe this is some MBR problem? do you have any idea?