Fedora on an Acer C720P Chromebook
Table of Contents
Yes, you are reading correctly: I decided to buy a freacking Chromebook. I really needed a lightweight notebook with me for my daily hackings while waiting for my subway station, and this one seemed to be the best option available when comparing models and prices. To be fair, and before you throw me rocks, I visited the LibreBoot X60’s website for some time, because I was strongly considering buying one (even considering its weight); however, they did not have it in stock, and I did not want to wait anymore, so…
Anyway, as one might expect, configuring GNU/Linux on notebooks is becoming harder as time goes by, either because the infamous Secure Boot (anti-)feature, or because they come with more and more devices that demand proprietary crap to be loaded. But fortunately, it is still possible to overcome most of those problems and still get a GNU/Linux distro running.
References
For main reference, I used the following websites:
- ACER Chromebook C720P: touchpad and touchscreen do not work, a bug related to the Fedora support for the machine.
- Fedora 20 (LXDE LiveCD) on my Acer c720p Chromebook, by Perry Myers.
- Acer C720 Chromebook, a wiki page from Arch[GNU/]Linux.
- Chromebook, a wiki page from Arch[GNU/]Linux.
I also used other references for small problems that I had during the configuration, and I will list them when needed.
Backing up ChromeOS
The first thing you will probably want to do is to make a recovery image
of the ChromeOS that comes pre-installed in the machine, in case things
go wrong. Unfortunately, to do that you need to have a Google account,
otherwise the system will fail to record the image. So, if you want to
let Google know that you bought a Chromebook, login into the system,
open Chrome, and go to the special URL chrome://imageburner
. You will
need a 4 GiB pendrive/sdcard. It should be pretty straightforward to do
the recording from there.
Screw the screw
Now comes the hard part. This notebook comes with a write-protect screw. You might be thinking: what is the purpose of this screw?
Well, the thing is: Chromebooks come with their own boot scheme, which unfortunately doesn’t work to boot Linux. However, newer models also offer a “legacy boot” option (SeaBIOS), and this can boot Linux. So far, so good, but…
When you switch to SeaBIOS (details below), the system will complain that it cannot find ChromeOS, and will ask if you want to reinstall the system. This will happen every time you boot the machine, because the system is still entering the default BIOS. In order to activate SeaBIOS, you have to press CTRL-L (Control + L) every time you boot! And this is where the screw comes into play.
If you remove the write-protect screw, you will be able to make the system use SeaBIOS by default, and therefore will not need to worry about pressing CTRL-L every time. Sounds good? Maybe not so much…
The first thing to consider is that you will lose your warranty the moment you open the notebook case. As I was not very concerned about it, I decided to try to remove the screw, and guess what happened? I stripped the screw! I am still not sure why that happened, because I was using the correct screw driver for the job, but when I tried to remove the screw, it seemed like butter and started to “decompose”!
Anyway, after spending many hours trying to figure out a way to remove the screw, I gave up. My intention is to always suspend the system, so I rarely need to press CTRL-L anyway…
Well, that’s all I have to say about this screwed screw. If you decide to try removing it, keep in mind that I cannot help you in any way, and that you are entirely responsible for what happens.
Now, let’s install the system :-).
Enable Developer Mode
You need to enable the Developer Mode in order to be able to enable SeaBIOS. To do that, follow these steps from the Arch[GNU/]Linux wiki page.
I don’t remember if this step works if you don’t have activated the ChromeOS (i.e., if you don’t have a Google account associated with the device). For my use, I just created a fake account to be able to proceed.
Accessing the superuser shell inside ChromeOS
Now, you will need to access the superuser (root
) shell inside
ChromeOS, to enable SeaBIOS. Follow the steps described in the
Arch[GNU/]Linux wiki page.
For this specific step, you don’t need to login, which is good.
Enabling SeaBIOS
We’re almost there! The last step before you boot your Fedora LiveUSB is to actually enable SeaBIOS. Just go inside your superuser shell (from the previous step) and type:
> crossystem dev_boot_usb=1 dev_boot_legacy=1
And that’s it!
If you managed to successfuly remove the write-protect screw, you may also want to enable booting SeaBIOS by default. To do that, there is a guide, again on Arch[GNU/]Linux wiki. DO NOT DO THAT IF YOU DID NOT REMOVE THE WRITE-PROTECT SCREW!!!!
Booting Fedora
Now, we should finally be able to boot Fedora! Remember, you will have to press CTRL-L after you reboot (if you have not removed the write-protect screw), otherwise the system will just complain and not boot into SeaBIOS. So, press CTRL-L, choose the boot order (you will probably want to boot from USB first, if your Fedora is on a USB stick), choose to boot the live Fedora image, and… bum!! You will probably see a message complaining that there was not enough memory to boot (the message is “Not enough memory to load specified image”).
You can solve that by passing the mem
parameter to Linux. So, when
GRUB complains that it was unable to load the specified image, it will
give you a command prompt (boot:
), and you just need to type:
boot: linux mem=1980M
And that’s it, things should work.
Installing the system
I won’t guide you through the installation process; I just want to
remember you that you have a 32 GiB SSD drive, so think carefully before
you decide how you want to set up the partitions. What I did was to
reserve 1 GB for my swap, and take all the rest to the root partition
(i.e., I did not create a separate /home
partition).
You will also notice that the touchpad does not work (neither does the touchscreen). So you will have to do the installation using a USB mouse for now.
Getting the touchpad to work
I strongly recommend you to read this Fedora bug, which is mostly about the touchpad/touchscreen support, but also covers other interesting topics as well.
Anyway, the bug is still being constantly updated, because the proposed patches to make the touchpad/touchscreen work were not fully integrated into Linux yet. So, depending on the version of Linux that you are running, you will probably need to run a different version of the scripts that are being kindly provided in the bug.
As of this writing, I am running Linux 3.16.2-201.fc20, and the script that does the job for me is this one. If you are like me, you will never run a script without looking at what it does, so go there and do it, I will wait :-).
OK, now that you are confident, run the script (as root
, of course),
and confirm that it actually installs the necessary drivers to make the
devices work. In my case, I only got the touchpad working, even though
the touchscreen is also covered by this script. However, since I don’t
want the touchscreen, I did not investigate this further.
After the installation, reboot your system and at least your touchpad should be working :-). Or kind of…
What happened to me was that I was getting strange behaviors with the touchpad. Sometimes (randomly), its sensitivity became weird, and it was very hard to move the pointer or to click on things. Fortunately, I found the solution in the same bug, in this comment by Yannick Defais. After creating this X11 configuration file, everything worked fine.
Getting suspend to work
Now comes the hard part. My next challenge was to get suspend to work, because (as I said above) I don’t want to poweroff/poweron every time.
My first obvious attempt was to try to suspend using the current configuration that came with Fedora. The notebook actually suspended, but then it resumed 1 second later, and the system froze (i.e., I had to force the shutdown by holding the power button for a few seconds). Hmm, it smelled like this would take some effort, and my nose was right.
After a lot of search (and asking in the
bug), I found
out about a few Linux flags that I could provide in boot time. To save
you time, this is what I have now in my /etc/default/grub
file:
GRUB_CMDLINE_LINUX="tpm_tis.force=1 tpm_tis.interrupts=0 ..."
The final ...
means that you should keep whatever was there before you
included those parameters, of course. Also, after you edit this file,
you need to regenerate the GRUB configuration file on /boot
. Run the
following command as root
:
> grub2-mkconfig -o /boot/grub2/grub.cfg
Then, after I rebooted the system, I found that only adding those flags
was still not enough. I saw a bunch of errors on dmesg
, which showed
me that there was some problem with EHCI and xHCI. After a few more
research, I found the this
comment
on an Arch[GNU/]Linux forum. Just follow the steps there (i.e., create
the necessary files, especially the
/usr/lib/systemd/system-sleep/cros-sound-suspend.sh
), and things
should start to get better. But not yet…
Now, you will see that suspend/resume work OK, but when you suspend, the system will still resume after 1 second or so. Basically, this happens because the system is using the touchpad and the touchscreen to determine whether it should resume from suspend or not. So basically what you have to do is to disable those sources of events:
echo TPAD > /proc/acpi/wakeup
echo TSCR > /proc/acpi/wakeup
And voilà! Now everything should work as expected :-). You might want to
issue those commands every time you boot the system, in order to get
suspend to work every time, of course. To do that, you can create a
/etc/rc.d/rc.local
, which gets executed when the system starts:
> cat /etc/rc.d/rc.local
#!/bin/bash
suspend_tricks()
{
echo TPAD > /proc/acpi/wakeup
echo TSCR > /proc/acpi/wakeup
}
suspend_tricks
exit 0
Don’t forget to make this file executable:
> chmod +x /etc/rc.d/rc.local
Conclusion
Overall, I am happy with the machine. I still haven’t tried installing Linux-libre on it, so I am not sure if it can work without binary blobs and proprietary craps.
I found the keyboard comfortable, and the touchpad OK. The only extra
issue I had was using the Canadian/French/whatever keyboard that comes
with it, because it lacks some useful keys for me, like Page Up/Down,
Insert, and a few others. So far, I am working around this issue by
using xbindkeys
and xvkdb
.
I do not recommend this machine if you are not tech-savvy enough to follow the steps listed in this post. If that is the case, then consider buying a machine that can easily run GNU/Linux, because you feel much more comfortable configuring it!