Update (08/15/2020): The CB3-431 described in this post is the one released around 2016. Acer is still selling Chromebooks under model code CB3-431. But I’m not sure if the one Acer is selling now is the same as the one in this post.
Update (10/11/2018): It seems the current official
linux kernel (4.18.12-arch1-1) works fine now. Now I always boot into the official kernel, instead of the
linux-galliumos kernel. And I haven’t encountered any problem so far.
Get tired of using Crouton and
chroot? Can’t stand Ubuntu and low-performance & fake X windows anymore? Try turning your Acer Chromebook 14 (CB3-431) into an Arch Linux machine!
This post collects the required information from the internet and describes a procedure that worked on my machine. The majority of the procedure are coming from Arch Linux’s wiki:
Though the information in the WiKi pages is out of date to some degree, they are still good references.
- An external keyboard is required because the internal one does not work out of the box at the beginning. Either a USB keyboard or a wireless one with a dongle works. A Bluetooth keyboard, however, may not work.
- I use Arch Linux only, so I chose the UEFI way and completely wiped out Chrome OS. For dual booting, those who are interested may need to do their own googling and cannot simply follow this post.
- Prepare a bootable Arch Linux installation USB stick in advance. The one I am using is the 2018.03.01 release, which has kernel v4.14.6.
- A knowledge of how to do regular Arch Linux installation on regular laptops and desktops is required because I am not going to explain that here.
- I am no computer engineer nor OS engineer, so many technical terms may not be correct in this post. Corrections are welcome.
Disclaimer: The procedure described in this post includes practices that are not encouraged by Acer. It also uses an executable shell script from a third-party organization. So please be aware of the risk involved. If your Chromebook turns into a brick, I am not going to be responsible for that.
1. Turn the hard write-protection off
This needs small-size screwdrivers.
- Loosen the screws on the back of the machine and remove the back panel.
- There is a screw at the center after removing the back panel. This screw is obviously larger than others and is next to a black ribbon cable. Remove it. (Keep the screw properly in case you want to re-enable the hard write-protection in the future.)
- Put the back panel back.
For more details, see this instruction.
2. Turn the soft write-protection off
See this for more details. I believe most readers of this post have already been using the developer mode for some reasons and know what these are. The following is a brief procedure:
- Enable the developer mode.
- Log in to a superuser shell.
- Disable the soft write-protection:
# flashrom --wp-disable.
3. Use MrChromebox’s firmware utility script to install full UEFI firmware.
In a superuser shell, run the shell script. After getting into the main menu, first select option 4: Set Boot Options. And in the child menu, select 1. This allows the system directly go into the boot menu without you pressing any key (such as
Next, when back to the main menu, select option 3: Install/Update Full ROM Firmware. Making a backup of original stock firmware is optional.
4. Reboot and install Arch Linux as usual
Insert Arch Linux USB & the external keyboard, and then reboot. The machine should directly go to the bootloader of the bootable Arch Linux USB. From this point, Arch Linux can be installed as usual. Nothing different than regular installation. However, do make sure that UEFI mode is in use.
Regarding the bootloader, I am using
systemd-boot. Grub is more popular among those who install Linux on a Chromebook.
5. Replace the original Linux kernel with the one from Gallium OS (note: see Update 1)
After installation, install
linux-galliumos from AUR.
Remember to let the bootloader boot into Gallium OS’s kernel afterward, instead of the original one. For example, if using
systemd-boot, either create a new boot entry or modify an old one with the following option:
- Avoid using
yaourtor similar utilities to automatically build and install
linux-galliumos. At least not with the default configuration of these utilities. With
yaourtand default configuration, for example, it will try to download and build the package in
/tmp, which consumes the memory. However, there is only about 4GB of memory on CB3-431, so using
yaourtwill run out of the memory and crash if there is no swap space. Even if with enough swap space, it’s still not encouraged because things will get slowed down when swap is involved. The simplest solution is just to build the package manually at the places that are not using memory.
- To accelerate the building process of this package, it is better to build the package on other Arch Linux machines that have more CPU cores. And then copy the resulting
*.pkg.tar.xztarball back and install it. Don’t forget to set the
/etc/makepkg.confto use more cores, and remember not to use any machine specific optimization compilation flags.
As for the original kernel, it is optional to keep them. I am not sure when the official kernel will support Braswell architecture. I do not even know if this support is on the schedule.
After booting with Gallium OS’s kernel, the internal keyboard should work out of the box.
6. Fix sound with Gallium OS patches
Install PulseAudio as usual. And then install galliumos-braswell-config from AUR. The
--force flag may be required in the
pacman command to overwrite some files owned by PulseAudio.
galliumos-braswell-config overwrites some files also owed by PulseAudio, when upgrading system packages in the future,
pacman may complain that some files are owned by both the two packages. I believe this complaining is normal due to it’s true.
We are free to do anything we want from this point. However, do remember there is only about 32GB or even less space on the MMC disk of CB3-431, and about 4GB memory. So choose what you are going to install wisely.
Also, here are two extra settings that are not necessary:
6-1. Install xkeyboard-config-chromebook from AUR.
I am not sure how this changes the use of the internal keyboard. I just found it from Arch Linux’s wiki page and thought it would not do any harm, so I installed it. But I did not feel any difference.
The touchpad works out of the box after using Gallium OS’s kernel. The driver used by default is
libinput, and it works fine. I did not try
xf86-input-synaptics. I did two extra settings:
- As suggested by Arch Linux’s wiki, I put some settings in
libinput:name:*Elan Touchpad:dmi:*svnGOOGLE:*pnEdgar* LIBINPUT_ATTR_PRESSURE_RANGE=1:15
But to be honest, I do not know what this is doing.
- To have the same touchpad experience as in original Chrome OS, I have the following settings to the touchpad in X environments:
cat /etc/X11/xorg.conf.d/30-touchpad.conf --------------------------------------------------------- Section "InputClass" Identifier "Elan Touchpad" Driver "libinput" Option "NaturalScrolling" "true" Option "Tapping" "true" Option "MiddleEmulation" "true" Option "TappingButtonMap" "lrm" Option "TappingDrag" "true" EndSection
So tapping and scrolling experience became the same as they were in the original Chrome OS.