Difference between revisions of "Chrome OS devices"

From ArchWiki
Jump to: navigation, search
(Model Specific Overview: Added Samsung Chromebook (ARM))
m (Typo on "Partitioning")
 
(458 intermediate revisions by 44 users not shown)
Line 1: Line 1:
 
[[Category:Laptops]]
 
[[Category:Laptops]]
{{Stub|Draft...}}
+
[[ja:Chrome OS デバイス]]
This article is to provide information on how to get Arch up and running on the Chromebook series of laptops (or netbooks) as built by Samsung, Acer, Google.
+
{{Related articles start}}
 +
{{Related|Chrome OS devices/Chromebook}}
 +
{{Related|Chrome OS devices/Custom firmware}}
 +
{{Related|Installation guide}}
 +
{{Related|Laptop}}
 +
{{Related articles end}}
 +
{{Warning|This article relies on third-party scripts and modifications, and may irreparably damage your hardware or data. Proceed at your own risk.}}
 +
This article was created to provide information on how to get Arch installed on the series of Chrome OS devices built by Acer, HP, Samsung, Toshiba, and Google. Currently this page is being overhauled, and more model specific pages are being built with some of the information listed below.  
  
Discussion of this topic began in this forum thread:
+
== Introduction ==
https://bbs.archlinux.org/viewtopic.php?id=148602
+
  
Initially written with the intention of getting a Samsung Series 5 550 to dual boot with Arch.  (Only reason for the dual boot is to potentially collect firmware changes pushed downward from Chromeos).
+
=== Legacy boot ===
  
 +
Some of the newer Chrome OS devices (Intel's Haswell and Broadwell based models) feature a "legacy boot" mode that makes it easier to boot Linux and other operating systems. The legacy boot mode is provided by the [http://www.coreboot.org/SeaBIOS SeaBIOS] payload of  [http://www.coreboot.org/ Coreboot], which is the firmware for the Intel based Chrome OS devices (with the exception of the first generation of Chromebooks). SeaBIOS behaves like a traditional BIOS that boots into the MBR of the disk, and from there into standard bootloaders like Syslinux and GRUB.
  
==Model Specific Overview==
+
On the Chrome OS devices that shipped with SeaBIOS, the installation process of Arch Linux should be similar with a few minor adjustments.
(as copied from Wikipedia)
+
{| class="wikitable"
+
|-
+
|+ style="background:#BFD7FF"| Chromebook models
+
|-
+
! Manufacturer
+
! Model
+
! Available
+
! Generation
+
! Processor
+
! RAM
+
! Storage
+
! Screen size
+
! Weight
+
! Base price
+
|-
+
| Google
+
| Cr-48
+
| Dec 2010
+
| Prototype
+
| 1.66 GHz Intel Atom N455
+
| 2 GB DDR3
+
| 16 GB Solid-state drive
+
| 12.1 in
+
| 3.8 lb
+
| Not for retail sale
+
|-
+
| Samsung
+
| Series 5 (XE500C21)
+
| Jun 2011
+
| 1
+
| 1.66 GHz Intel Atom N570
+
| 2 GB DDR3
+
| 16 GB Solid-state drive
+
| 12.1 in
+
| 3.06 - 3.26 lb
+
| $349.99 Wi-Fi<br>$449.99 3G
+
|-
+
| Acer Inc.|Acer
+
| AC700
+
| Jul 2011
+
| 1
+
| 1.66 GHz Intel Atom N570
+
| 2 GB DDR3
+
| 16 GB Solid-state drive
+
| 11.6 in
+
| 3.19 lb
+
| $299.99 Wi-Fi<br>$399.99 3G
+
|-
+
| Samsung
+
| [[#Samsung Series 5 550|Series 5<br>XE550C22]]
+
| May 2012
+
| 2
+
| 1.3 GHz Intel Celeron 867
+
| 4 GB DDR3
+
| 16 GB Solid-state drive
+
| 12.1 in
+
| 3.3  lb
+
| $449.99 Wi-Fi<br>$549.99 3G
+
|-
+
| Samsung
+
| [[Samsung_Chromebook_(ARM)|Series 3<br>XE303C12]]
+
| Oct 2012
+
| 3
+
| 1.7 GHz Samsung Exynos 5 Dual
+
| 2 GB DDR3
+
| 16 GB Solid-state drive
+
| 11.6 in
+
| 2.43 lb
+
| $249.99 Wi-Fi<br>$329.99 3G
+
|-
+
| Acer Inc.|Acer
+
| [[Acer_C7_Chromebook|C7 Chromebook]]
+
| Nov 2012
+
| 3
+
| 1.1 GHz Intel Celeron 847
+
| 2 GB DDR3
+
| 320 GB HDD
+
| 11.6 in
+
| 3 lb
+
| $199.99 Wi-Fi
+
|}
+
  
== General Chromebook Installation ==
+
==== Models without SeaBIOS ====
=== Pre-requisites ===
+
One thing to note is that if you need to claim your free 100gb of google drive space, you probably want to do that before your install of arch.  This needs to happen from chromeos (version > 23) and will not work from linux.  It is a good idea to use this google drive before installing Arch as it will sync/backup the chromeos system as designed.
+
  
=== Developer Mode ===
+
One of the following approaches can be taken in order to install Arch Linux on Chrome OS devices that did not shipped with SeaBIOS as part of the installed firmware:
A wealth of information is at http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/samsung-sandy-bridge#TOC-Entering-Developer-Mode .  The notes below are primarily taken from there.
+
  
The first step is to enable '''''developer mode''''' on the Chromebook system. Be aware that although everything in the "Downloads" area goes to your online google drive account, this will delete all stored data.
+
* With a very few models it is possible to only flash a SeaBIOS payload to the {{ic|RW_LEGACY}} part of the firmware flash memory (e.g. Acer C740, Acer C910 and Google Chromebook Pixel 2), it is possible to update the {{ic|RW_LEGACY}} manually with Chrome OS' {{ic|flashrom}} or leave it to John Lewis' {{ic|flash_chromebook_rom.sh}} script to flash SeaBIOS if the script support for a specific device is limited to {{ic|RW_LEGACY}} update, the advantage with this method is that the stock firmware is not changed (as {{ic|RW_LEGACY}} was missing).
 +
* Flash a full [[Custom firmware for Chrome OS devices|custom firmware]] which includes a SeaBIOS payload.
 +
* Only write to the {{ic|BOOT_STUB}} part of the firmware flash memory, this method adds a SeaBIOS payload and update the firmware to only load this payload, it is a much safer approach than flashing the full firmware but there might be some limitations (e.g. no support in suspend or VMX), this is the {{ic|Modify ROM to run SeaBIOS exclusively}} option in John Lewis' {{ic|flash_chromebook_rom.sh}} script.
 +
* Take the ChrUbuntu approach which uses the Chrome OS kernel and modules.
 +
* Build and sign your own kernel, see [https://plus.google.com/+OlofJohansson/posts/34PYU79eUqP] [http://pomozok.wordpress.com/2014/10/11/building-chromeos-kernel-without-chroot/] [https://github.com/drsn0w/chromebook_kernel_tools/blob/master/install_linux.md].
 +
The [[#Installation|Installation]] process described on this page tries to cover the method of installing Arch Linux on these non SeaBIOS models by flashing a custom firmware.
  
=== Repartitioning ===
+
=== Firmware write protection intro ===
A script referenced from http://chromeos-cr48.blogspot.co.uk/2012/04/chrubuntu-1204-now-with-double-bits.html points to the shell script at http://goo.gl/i817v and discusses repartitioning.  The script should be run as the '''''chronos''''' user.
+
  
=== cgpt command ===
+
All Chrome OS devices features a firmware write protection. It is important to be aware of it as one might need to disable the write protection as part of the installation process (to update GBB flags or flash a custom firmware).
You'll save your self a lot of time if you understand this command before you attempt to install Arch on a chromebook.
+
  
This is NON-EXHAUSTIVE but it'll help most people reading this. cgpt --help is nice too.
+
For more details see [[Custom firmware for Chrome OS devices#Firmware write protection|Firmware write protection]].
  
Use:
+
=== Prerequisites ===
cgpt showpartiton /dev/sda
+
to list all partitions on disk with boot information for each.
+
  
Use:
+
* You should claim your free 100GB-1TB of Google Drive space before you install Arch. This needs to happen from ChromeOS(version > 23), not linux. This will sync/backup ChromeOS, as designed
cgpt add [options] /dev/sda
+
* Visit the ArchWiki page for your [[#Chrome OS devices|Chrome OS device]].
used to modify boot options
+
* If there is no ArchWiki page for your device then before proceeding, gather information about the device and if you succeed in installing Arch Linux, then consider adding a new ArchWiki page for your model (you can use the [[Acer C720]] as an example for device shipped with SeaBios or the [[Acer_C710_Chromebook|Acer C710]] as device that did not ship with it).
 +
* Read this guide completely and make sure you understand all the steps before making any changes.
  
===== Example =====
+
== Chrome OS devices ==
  cgpt add -i 6 -P 5 -S 0 -T 1 /dev/sda
+
Example: modify partition #6, set priority to 5, successful to false, and boot tries to once(1), on device /dev/sda
+
  
cgpt add -i 1-12
+
See [[Chrome_OS_devices/Chromebook|Chromebook models]] for hardware comparison with details about SeaBIOS availability and storage expansion.
:Partition number to change
+
cgpt add -P 9-0
+
:Priority 9 > 1 (Higher number will try to boot first)
+
cgpt add -T 0-99
+
:Tries, used with the successful flag. Will try to boot this partition x times until tries = 0 then it will try next lower priority partition.
+
cgpt add -S 0-1
+
:Successful flag, if 1 will try to boot this partition forever. Be careful with this one! If 0 and tries > 0 it will try to boot this partition until it' out of tries.
+
  
If installing yourself, don't forget to copy this onto your arch partition!.
+
=== General hardware recommendations and remarks ===
  
==Samsung Series 5 550==
+
* MyDigitalSSD M.2 NGFF SSD drives are probably the most popular choice when upgrading the internal SSD of a Chrome OS device. There are multiple accounts of failing MyDigitalSSD SSD drives at the Acer C720 topic on the Arch forums [https://bbs.archlinux.org/viewtopic.php?pid=1461993#p1461993] [https://bbs.archlinux.org/viewtopic.php?pid=1474680#p1474680] [https://bbs.archlinux.org/viewtopic.php?pid=1460460#p1460460] and much more on the web. If the SSD was upgraded to a MyDigitalSSD model then it is highly recommended to backup the system and data frequently. It might be advisable to upgrade the SDD with a different brand. Notice that this might be due to a SSD firmware issue so updating the SSD firmware is highly recommended.
===Developer Mode===
+
* Transcend MTS400 M.2 NGFF SSD drives are failing (at least with stock Coreboot firmware) when ALPM is enabled, ATM there is no SSD firmware update that fixing this bug, so it is highly advisable to disabled ALPM if a power management daemon has been installed (which enabled it), see [[Solid_State_Drives#Resolving_SATA_power_management_related_errors|Resolving SATA power management related errors]] and [http://superuser.com/questions/887916/transcend-mts400-ssd-crashes-my-acer-c720-chromebook-how-to-disable-sata-power how to disable ALPM in Chrome OS].
Developer mode on the Samsung Series 5 has two levels of access, "dev-switch on" and "dev-mode BIOS". With the first level you enable a command line shell, which lets you look around inside the GNU/Linux operating system, but does not let you run your own versions.  
+
  
The second level of access installs a special BIOS component that provides the ability to boot your own operating systems from either removable (USB/SD) or fixed (SSD) drives. Both levels of access are completely reversible, so don't be afraid to experiment. 
+
== Installation ==
  
The second level (described above) is what we want in order to install Arch.
+
{{Warning|Installation on Chrome OS devices that do not ship with SeaBIOS requires flashing a custom firmware, a process that may brick your device. Proceed at your own risk.}}
  
http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/b.jpg
+
{{Note|While the following information should fit all the Chrome OS devices with Coreboot firmware (shipped with SeaBIOS payload or without), it is possible that with some models you may need to make further adjustments.}}
  
The switch is behind a little door on the right-hand side of the chromebook (as linked above). To enable the developer switch you open the door, use something pointy (paperclip or toothpick) to move the switch towards the back of the device, and reboot.  
+
The general installation procedure:
 +
* Enable developer mode.
 +
* Chrome OS device with SeaBIOS:
 +
** Enable legacy boot / SeaBIOS.
 +
** Set SeaBIOS as default (optional but recommended, requires disabling the write protection).
 +
* Chrome OS device without SeaBIOS:
 +
** Flash a custom firmware.
 +
* Prepare the installation media.
 +
* Boot Arch Linux installation media and install Arch.
  
{{Warning|Be gentle with the developer switch! Some people have reported that the developer switch breaks easily.}}
+
=== Enabling developer mode ===
 +
 
 +
[http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook#TOC-Developer-Mode Developer Mode] is necessary in order to access the superuser shell inside Chrome OS, which is required for making changes to the system like allow booting through SeaBIOS.
 +
 
 +
{{Warning|Enabling Developer Mode will wipe all of your data.}}
 +
 
 +
To enable developer mode:
 +
 
 +
* Turn on the Chrome OS device.
 +
* Press and hold the {{ic|Esc + F3 (Refresh)}} keys, then press the {{ic|Power}} button. This enters Recovery Mode.
 +
* Press {{ic|Ctrl + D}} (no prompt). It will ask you to confirm, then the system will revert its state and enable Developer Mode.
 +
{{Note|Press {{ic|Ctrl + D}} (or wait 30 seconds for the beep and boot) at the white boot splash screen to enter Chrome OS.}}
 +
 
 +
=== Accessing the superuser shell ===
 +
 
 +
After you have enabled the Developer Mode you will need to access the superuser shell. How you do this depends on whether you have configured Chrome OS or not.
 +
 
 +
==== Accessing the superuser shell without Chrome OS configuration ====
 +
 
 +
If you have not configured Chrome OS, just press {{ic|Ctrl + Alt + F2}} (F2 is the "forward" arrow on the top row, →), you will see a login prompt.
 +
 
 +
* Use {{ic|chronos}} as the username, it should not prompt you for a password.
 +
* Become superuser with {{ic|sudo bash}}.
 +
 
 +
==== Accessing the superuser shell with Chrome OS configuration ====
 +
 
 +
If you have configured Chrome OS already:
 +
 
 +
* Open a crosh window with {{ic|Ctrl + Alt + T}}.
 +
* Open a bash shell with the {{ic|shell}} command.
 +
* Become superuser with {{ic|sudo bash}}
 +
 
 +
=== Enabling SeaBIOS ===
 +
 
 +
If your Chrome OS device did not ship with SeaBIOS or you prefer to install a custom firmware, then continue to [[#Flashing a custom firmware|Flashing a custom firmware]].
 +
 
 +
This method will allow you to access the pre-installed version of SeaBIOS through the Developer Mode screen in Coreboot.
 +
 
 +
* Inside your superuser shell enter:
 +
# crossystem dev_boot_usb=1 dev_boot_legacy=1
 +
* Reboot the machine.
 +
 
 +
You can now start SeaBIOS by pressing {{ic|Ctrl + L}} at the white boot splash screen.
 +
 
 +
{{Note|If you intend to stay using pre-installed SeaBIOS route and think you will not appreciate having to press {{ic|Ctrl + L}} every time you boot to reach SeaBIOS then you can set Coreboot to boot to SeaBIOS by default. This currently must be done inside of Chrome OS and requires disabling the write protection (hardware and software), it might be a good idea to do this now so that you will not have to re-install Chrome OS later with recovery install media. If you are choosing to keep Chrome OS (installing Arch on external storage or  [[#Alternative installation, Install Arch Linux in addition to Chrome OS|on the internal storage side by side with Chrome OS]] then set SeaBIOS to default later.}}
 +
 
 +
You should now have SeaBIOS enabled on your Chrome OS device, if you choose to not set it as default then you can continue to [[#Installing Arch Linux|Installing Arch Linux]].
 +
 
 +
==== Boot to SeaBIOS by default ====
 +
 
 +
To boot SeaBIOS by default, you will need to run [https://chromium.googlesource.com/chromiumos/platform/vboot_reference/+/master/scripts/image_signing/set_gbb_flags.sh {{ic|set_gbb_flags.sh}}] in Chrome OS (already included in Chrome OS, it will not work correctly in Arch Linux).
 +
 
 +
{{Warning|If you do not set the GBB flags then your system might become corrupted on empty battery, resetting {{ic|dev_boot_usb}} {{ic|dev_boot_legacy}} to their default values, forcing you to recover Chrome OS and wiping your Arch Linux installation on the internal storage, though it might be possible to modify Chrome OS recovery image to set these values again [http://dev.chromium.org/chromium-os/developer-information-for-chrome-os-devices/workaround-for-battery-discharge-in-dev-mode].}}
 +
 
 +
{{Warning|If you do not disable the write protection before setting the GBB flags you endanger wiping out the RW-LEGACY part of the firmware (i.e. SeaBIOS) and your system might not boot (should be recoverable with Chrome OS recovery media). Updated versions of [https://chromium.googlesource.com/chromiumos/platform/vboot_reference/+/master/scripts/image_signing/set_gbb_flags.sh {{ic|set_gbb_flags.sh}}] will not let you set the GBB flags without disabling the write protection.}}
 +
 
 +
* Disable the hardware write protection.
 +
 
 +
To find the location of the hardware write-protect screw/switch/jumper and how to disable it visit the ArchWiki page for your [[#Chrome OS devices|Chrome OS device]]. If there is no information about your device on the ArchWiki then turn to [http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devicesDeveloper Information for Chrome OS Devices] and [http://www.coreboot.org/Chromebooks Coreboot's Chromebooks page].
 +
 
 +
More information about the firmware protection available at the [[Custom firmware for Chrome OS devices#Firmware write protection|Custom firmware for Chrome OS devices]] page.
 +
 
 +
* Inside your [[#Accessing the superuser shell|superuser shell]] enter:
 +
# sudo su
 +
 
 +
* Disable the software write protection.
 +
# flashrom --wp-disable
 +
 
 +
* Check that write protection is disabled.
 +
# flashrom --wp-status
 +
 
 +
* Run {{ic|set_gbb_flags.sh}} with no parameters.
 +
# set_gbb_flags.sh
 +
 
 +
{{Note|Recent versions of Chrome OS have moved the script to /usr/share/vboot/bin/set_gbb_flags.sh which is not in $PATH by default.}}
 +
 
 +
* Make sure you get the following output, see [https://johnlewis.ie/how-to-make-seabios-the-default-on-your-acer-c720/].
 +
GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001
 +
GBB_FLAG_FORCE_DEV_SWITCH_ON 0x00000008
 +
GBB_FLAG_FORCE_DEV_BOOT_LEGACY 0x00000080
 +
GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY 0x00000400
 +
 
 +
* Now set SeaBIOS as default.
 +
# set_gbb_flags.sh 0x489
 +
 
 +
* Enable back the software write protection.
 +
# flashrom --wp-enable
 +
 
 +
Your Chrome OS device now will boot to SeaBIOS by default, you can continue to [[#Installing Arch Linux|Installing Arch Linux]], if your device is booting correctly then you should re-enable the hardware write protection.
 +
 
 +
=== Flashing a custom firmware ===
 +
 
 +
{{Note|The following steps explain how to flash a custom firmware from Chrome OS, for information on how to flash a custom firmware from Arch Linux visit the [[Custom firmware for Chrome OS devices]] page}}
 +
 
 +
* Disable the hardware write protection.
 +
 
 +
To find the location of the hardware write-protect screw/switch/jumper and how to disable it visit the ArchWiki page for your [[#Chrome OS devices|Chrome OS device]]. If there is no information about your device on the ArchWiki then turn to [http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devicesDeveloper Information for Chrome OS Devices] and [http://www.coreboot.org/Chromebooks Coreboot's Chromebooks page].
 +
 
 +
More information about the firmware protection available at the [[Custom firmware for Chrome OS devices#Firmware write protection|Custom firmware for Chrome OS devices]] page.
 +
 
 +
* Enter the command shown on the [https://johnlewis.ie/custom-chromebook-firmware/rom-download/ Download ROM page at John Lewis site].
 +
 
 +
{{Note|The reason for not posting here is to force you to visit the site and read the page before proceeding.}}
 +
 
 +
* After the script exited copy the backed up firmware to an external storage before rebooting the system.
 +
 
 +
You should now have a custom firmware installed on your device, cross your fingers and reboot.
 +
 
 +
After flashing the firmware you can continue to [[#Installing Arch Linux|Installing Arch Linux]].
 +
 
 +
=== Installing Arch Linux ===
 +
 
 +
==== Preparing the installation media ====
 +
 
 +
Create an [[USB flash installation media|Arch Linux Installer USB drive]].
 +
 
 +
==== Booting the installation media ====
 +
 
 +
* Plug the USB drive to the Chrome OS device and start SeaBIOS with {{ic|Ctrl + L}} at the white boot splash screen (if SeaBIOS is not set as default).
 +
* Press {{ic|Esc}} to get a boot menu and select the number corresponding to your USB drive.
 +
 
 +
The Arch Linux installer boot menu should appear and the [[installation]] process can proceed as normal.
 +
 
 +
{{Note|For now choose [[GRUB]] as your bootloader: you can choose MBR or GPT: [[Partitioning]]. If you choose GPT then do not forget to add a [[GRUB#GUID_Partition_Table_.28GPT.29_specific_instructions|BIOS Boot Partition]]. Also see [[#Syslinux|Known Issues]].}}
 +
 
 +
After finishing installing Arch Linux continue by following the [[#Post installation configuration|Post Installation Configuration]].
 +
 
 +
==== Alternative installation, Install Arch Linux in addition to Chrome OS ====
 +
 
 +
{{Poor writing|needs more details and convert the use of the script to manually re-partitioning steps with cgpt}}
 +
 
 +
It is possible to have both Arch Linux and Chrome OS installed on the internal drive.
 +
 
 +
===== Re-partition the drive =====
 +
 
 +
{{Accuracy|Dubious script from untrusted and obfuscated source.}}
 +
 
 +
In order to partition the drive, we will run the first stage of the ChruBuntu script in Chrome OS. After logging in, open a shell with {{ic|Ctrl + Alt + T}}, run {{ic|shell}}, then {{ic|cd ~/}} to enter the home directory. Once there, run the following:
 +
 
 +
curl -L -O http://goo.gl/9sgchs; sudo bash 9sgchs
 +
 
 +
It will ask how much space to partition for the alternate partition. 8GB is a safe number for the 16GB SSD. More than 9 may not work.
 +
 
 +
===== Fixing the filesystem =====
 +
 
 +
Reboot the system so Chrome OS will repair the filesystem after the previous re-partitioning process.
 +
Once this is done, verify that the disk space has been reduced by opening a file manager and clicking the gear in the top right of the window.
 +
 
 +
===== Continue the installation process =====
 +
 
 +
[[#Installing Arch Linux|Continue the installation process]] but instead of wiping the internal drive and creating a new filesystem you should install Arch to the existing empty partition that we designated for Arch in the previous step.
 +
 
 +
So after booting the installation media:
 +
 
 +
* Run the command {{ic|fdisk -l}} to list drives and partitions. Find the internal drive and note the name of the partition matching the size you specified in the ChrUbuntu script.
 +
* Use {{ic|mkfs.ext4 /dev/sdxY}} (where xY is drive letter and partition number, eg. /dev/sda7) This will create the filesystem for arch.
 +
* Following the [[GRUB2#GUID_Partition_Table_.28GPT.29_specific_instructions|instructions for installing GRUB on GPT]], use gdisk to create a 1007kb partition and set the type to EF02.
 +
 
 +
{{Note|Contrary to what some people say, the grub partition does '''not''' need to be the first partition on the disk. The existing ChromeOS partitions make this difficult to do anyways.}}
 +
 
 +
===== Choosing between Arch Linux and Chrome OS =====
 +
 
 +
Reboot your system and press {{ic|Ctrl + l}} to load SeaBIOS in order to boot into Arch, or press {{ic|Ctrl + d}} in order to boot into ChromeOS.
 +
 
 +
Now you can also [[#Boot to SeaBIOS by default|set SeaBIOS as default]] (or even later as you are keeping Chrome OS).
 +
 
 +
== Post installation configuration ==
 +
 
 +
=== Patched kernels ===
 +
{{Note|You can most likely ignore this section unless your device requires patched kernel support.}}
 +
 
 +
It is recommended to use the official {{Pkg|linux}} package for most Chrome OS devices with the exception being newer devices which might need patched kernel support such as the Chromebook Pixel 2015.
 +
 
 +
{{AUR|linux-samus4}} provides patches for the Chromebook Pixel 2015 to fix touchpad, touchscreen, and sound functionality which has not been merged into upstream linux yet. More information is available at [https://github.com/raphael/linux-samus its GitHub page].
 +
 
 +
If your devices requires a patched kernel, it is advised to review the list of patches and decide if the patch list is getting decidedly small enough that you no longer require a patched kernel and instead you can use the official {{Pkg|linux}} package instead.
 +
 
 +
See [[kernels]] for more information.
 +
 
 +
=== Video driver ===
 +
 
 +
See [[Intel graphics]].
 +
 
 +
=== Touchpad and touchscreen ===
 +
 
 +
See [[Touchpad Synaptics]], [[libinput]], and and [[Touchscreen]].
 +
 
 +
==== Touchpad and touchscreen kernel modules ====
 +
 
 +
Since kernel 3.17 all the related patches merged into the upstream sources, meaning the {{Pkg|linux}} package in core supports these devices.
 +
 
 +
===== What to do if your touchpad or touchscreen is not supported? =====
 +
 
 +
* Review the list of patches in {{Aur|linux-chromebook}}{{Broken package link|{{aur-mirror|linux-chromebook}}}}, if a related patch for your Chromebook model exist then [[#Patched kernels|install this package]].
 +
* If there is no such patch do not worry as the developers should be able to add it by request as the Chromium OS sources includes the related changes.
 +
* You can also try to find the related commits by yourself and create a proper patch, some hints:
 +
** Dig into your Chrome OS system, look at the obvious suspects like boot log, {{ic|/proc/bus/input/devices}} and {{ic|/sys/devices}}.
 +
** The Linux kernel sources for Chromium OS are at [https://chromium.googlesource.com/chromiumos/third_party/kernel].
 +
** Each kernel source for the latest Chromium OS release has its own branch, name convention: {{ic|release-R*-*-chromeos-KERNELVER}}, where {{ic|R*-*}} is the Chromium OS release and {{ic|KERNELVER}} is the kernel version.
 +
** Review the git log of {{ic|drivers/platform}}, {{ic|drivers/i2c/busses}} and {{ic|drivers/input/touchscreen}}.
 +
* {{AUR|linux-samus4}} includes touchpad and touchscreen support for the Chromebook Pixel 2015.  More information is available at [https://github.com/raphael/linux-samus its GitHub page].
 +
 
 +
==== Touchpad configuration ====
 +
 
 +
There are few options how to set the touchpad:
 +
 
 +
* Visit the ArchWiki page for your Chromebook model (see [[#Chromebook_Models|Chromebook models]]{{Broken section link}}) for touchpad xorg.conf.d file.
 +
* Use a [[Touchpad_Synaptics#Configuration_on_the_fly|touchpad configuration tool]] like [[Touchpad_Synaptics#Graphical_tools|Synaptics]] for [[KDE]], although it is said to be currently unmaintained and seems to crash under KDE 4.11, it works well with KDE 4.12.2. Another utility, {{AUR|kcm_touchpad}}{{Broken package link|{{aur-mirror|kcm_touchpad}}}}, does not work at all.
 +
 
 +
==== Chromium OS input drivers ====
 +
 
 +
{{AUR|xf86-input-cmt}} offers a port of the Chromium OS input driver: [https://github.com/hugegreenbug/xf86-input-cmt xf86-input-cmt] as an alternative for the [[Synaptics|Synaptics input driver]]. It provides tweaked configuration files for most devices, and provides functionality that the [[Synaptics|Synaptics input driver]] does not such as palm rejection. Additionally, it enables functionality not enabled by default in the Chromium OS input driver such as tap-to-drag.
 +
 
 +
Please note, the input driver does not work under [https://github.com/hugegreenbug/xf86-input-cmt/issues/5 some circumstances] where you have insufficient permissions to access {{ic|/dev/input/event}}
 +
This will affect you if you use [[startx]] to load a DE/WM session.
 +
If this is the case or if the driver does not load for any other cases, you should run:
 +
# usermod -a -G input $USER
 +
Where $USER is the current user wanting to use the input driver.
 +
 +
It should also be noted that some users have reported the driver does not work in [[GDM]] but works normally after log in.
 +
If you are affected by this, you should run:
 +
# usermod -a -G input gdm
 +
 
 +
After reboot, you should be able to use the touchpad normally.
 +
 
 +
=== Fixing suspend ===
 +
{{Note|Lid suspend might not work directly after boot, you might need to wait a little.}}
 +
 
 +
The following are instructions to fix the suspend functionality.
 +
Even if you are using a pre-installed SeaBIOS or John Lewis' pre-built SeaBIOS you will still need this fix.
 +
 
 +
There have been a few alternatives discussed and those may work better for some. [https://bbs.archlinux.org/viewtopic.php?pid=1364376#p1364376] [https://bbs.archlinux.org/viewtopic.php?pid=1364521#p1364521]
 +
 
 +
To fix suspend, the general idea is to disable the EHCI_PCI module, which interferes with the suspend cycle. There are multiple ways to achieve this.
 +
 
 +
==== With kernel parameters ====
 +
Add the following to your GRUB configuration:-
 +
 
 +
{{hc|head=/etc/default/grub|
 +
output=GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=ehci_pci"}}
 +
 
 +
Then [[GRUB#Generate_the_main_configuration_file|rebuild your grub config]]. After rebuilding your GRUB config, reboot your computer.
 +
 
 +
==== With systemd ====
 +
 
 +
Sometimes the synaptics touchpad, and various other parts of the laptop are used as wakeup devices causing certain movements of the laptop during suspend to end suspend. In order to disable all wakeup devices except for the laptop lid sensor, create the following {{ic|suspend-device-fix.sh}} file.
 +
 
 +
{{hc|head=/usr/local/sbin/suspend-device-fix.sh|
 +
output=<nowiki>#!/bin/bash
 +
 
 +
awk '{if ($1 != "LID0" && $3 == "*enabled") print $1}' < /proc/acpi/wakeup | while read NAME
 +
do echo "$NAME" > /proc/acpi/wakeup
 +
done
 +
 
 +
exit 0
 +
</nowiki>}}
 +
 
 +
Now give the file executable permissions:
 +
# chmod +x /usr/local/sbin/suspend-device-fix.sh
 +
 
 +
Create a systemd service to execute the script on every boot.
 +
{{hc|head=/etc/systemd/system/suspend-fix.service|
 +
output=[Unit]
 +
Description=Suspend Fix
 +
 
 +
[Service]
 +
Type=simple
 +
ExecStart=/usr/local/sbin/suspend-device-fix.sh
 +
 
 +
[Install]
 +
WantedBy=multi-user.target
 +
}}
 +
 
 +
First [[start]] {{ic|suspend-fix.service}}. If it properly starts, then [[enable]] it to be started on bootup.
 +
 
 +
Add the following line at the end of {{ic|/etc/rc.d/rc.local}} (if it does not exist, just create it) to prevent bad handling of EHCI USB:
 +
 
 +
{{hc|head=/etc/rc.d/rc.local|
 +
output=<nowiki>
 +
echo 1 > /sys/devices/pci0000\:00/0000\:00\:1d.0/remove
 +
</nowiki>}}
 +
 
 +
Then, create the following {{ic|cros-sound-suspend.sh}} file. Only the Ath9k binding/unbinding lines are listed below; see the alternatives linked above for additional sound suspend handling if you experience issues.
 +
 
 +
{{hc|head=/usr/lib/systemd/system-sleep/cros-sound-suspend.sh|
 +
output=<nowiki>#!/bin/bash
 +
 
 +
case $1/$2 in
 +
  pre/*)
 +
    # Unbind ath9k for preventing error and full sleep mode (wakeup by LID after hibernating)
 +
    echo -n "0000:01:00.0" | tee /sys/bus/pci/drivers/ath9k/unbind
 +
    # Unbind snd_hda_intel for sound
 +
    echo -n "0000:00:1b.0" | tee /sys/bus/pci/drivers/snd_hda_intel/unbind
 +
    echo -n "0000:00:03.0" | tee /sys/bus/pci/drivers/snd_hda_intel/unbind
 +
    ;;
 +
  post/*)
 +
    # Bind ath9k for preventing error and and full sleep mode (wakeup by LID after hibernating)
 +
    echo -n "0000:01:00.0" | tee /sys/bus/pci/drivers/ath9k/bind
 +
    # bind snd_hda_intel for sound
 +
    echo -n "0000:00:1b.0" | tee /sys/bus/pci/drivers/snd_hda_intel/bind
 +
    echo -n "0000:00:03.0" | tee /sys/bus/pci/drivers/snd_hda_intel/bind
 +
    ;;
 +
esac</nowiki>}}
 +
 
 +
Make sure to make the script executable:
 +
# chmod +x /usr/lib/systemd/system-sleep/cros-sound-suspend.sh
 +
 
 +
Then [[GRUB#Generate_the_main_configuration_file|rebuild your grub config]].
 +
 
 +
=== Fixing audio ===
 +
 
 +
==== Haswell based models ====
 +
 
 +
One or more of followings might help solving audio related issues, setting {{ic|snd_hda_intel}} module index reported the most useful. It is highly possible that you will not need to make any change.
 +
 
 +
* Create {{ic|/etc/modprobe.d/alsa.conf}}, the option {{ic|index}} will make sure the analog output is the default (and not HDMI), the option {{ic|model}} will notify the driver our board model which will make the built-in microphone usable (you can try instead {{ic|<nowiki>model=alc283-sense-combo</nowiki>}}).
 +
 
 +
{{hc|head=/etc/modprobe.d/alsa.conf|
 +
output=options snd_hda_intel index=1 model=,alc283-chrome}}
 +
 
 +
* Use the {{ic|~/.asoundrc}} file from [https://gist.githubusercontent.com/dhead666/52d6d7d97eff76935713/raw/5b32ee11a2ebbe7a3ee0f928e49b980361a57548/.asoundrc].
 +
 
 +
* If having problems with headphones (perhaps no audio playing), try {{ic|alsactl restore}} in terminal. Now, ALSA should automatically switch between channels when using headphones/speakers.  
 +
 
 +
* To fix [[Flash]] audio with PulseAudio, use the {{ic|~/.asoundrc}} file from [https://gist.githubusercontent.com/dhead666/0eebff16cd9578c5e035/raw/d4c974fcd50565bf116c57b1884170ecb47f8bf6/.asoundrc].
 +
 
 +
==== Chromebook Pixel 2015 ====
 +
 
 +
{{AUR|linux-samus4}} includes a patch for Broadwell SoC sound devices.  [https://github.com/raphael/linux-samus Its GitHub page] includes additional instructions for initializing the sound device.
 +
 
 +
=== Hotkeys ===
 +
 
 +
[https://support.google.com/chromebook/answer/1047364?hl=en The Chromebook function keys] recognized as standard F1-F10 by the kernel, it is preferable to map them accordingly to their appearance. It would also be nice to get the keys {{ic|Delete, Home, End, PgUp, PgDown}} which in Chrome OS mapped to {{ic|Alt + : BackSpace, Right, Left, Up, Down}}.
 +
 
 +
==== xkeyboard configuration ====
 +
 
 +
[https://www.archlinux.org/packages/extra/any/xkeyboard-config/ xkeyboard-config 2.16-1] added a {{ic|chromebook}} model that enables the Chrome OS style functions for the function keys.  You can, for example, set this using {{ic|localectl set-x11-keymap us chromebook}}.  See the {{ic|chromebook}} definition in {{ic|/usr/share/X11/xkb/symbols/inet}} for the full mappings.
 +
==== Sxhkd configuration ====
 +
 
 +
One way to set the hotkeys would be by using the [[Sxhkd]] daemon. Besides {{Pkg|sxhkd}}, this also requires [[Advanced Linux Sound Architecture|amixer]], {{Pkg|xorg-xbacklight}}, and {{Pkg|xautomation}}.
 +
 
 +
* See [https://gist.github.com/dhead666/191722ec04842d8d330b] for an example configuration in {{ic|~/.config/sxhkd/sxhkdrc}}.
 +
 
 +
==== Xbindkeys configuration ====
 +
 
 +
Another way to configure hotkeys would be by using [[Xbindkeys]]. Besides {{Pkg|xbindkeys}} this requires [[Advanced Linux Sound Architecture|amixer]] and {{Pkg|xorg-xbacklight}} and {{Pkg|xvkbd}}.
 +
 
 +
* See [https://gist.github.com/dhead666/08562a9a760b18b6e758] for an example configuration in {{ic|~/.xbindkeysrc}}.
 +
* See [https://bbs.archlinux.org/viewtopic.php?id=173418&p=3 vilefridge's xbindkeys configuration] for another example.
 +
 
 +
===== Alternate xbindkeys configuration =====
 +
 
 +
[http://pastie.org/9550960  Volchange] (originated in the [http://www.debianuserforums.org/viewtopic.php?f=55&t=1453#p14351 Debian User Forums])) can manipulate the volume with PulseAudio instead of using [[Advanced Linux Sound Architecture|amixer]]. Besides [http://pastie.org/9550960 Volchange] this requires {{Pkg|xorg-xbacklight}} and {{Pkg|xvkbd}}.
 +
 
 +
* Download the script from [http://pastie.org/9550960].
 +
* Make it executable
 +
$ chmod u+x ~/.local/bin/volchange
 +
 
 +
See [https://gist.github.com/dhead666/4e23b506441ad424e26e] for a matching {{ic|~/.xbindkeysrc}}.
 +
 
 +
==== Patch xkeyboard-config ====
 +
 
 +
Another option is to install {{AUR|xkeyboard-config-chromebook}}, for more details visit [https://github.com/dhead666/archlinux-pkgbuilds/tree/master/xkeyboard-config-chromebook].
 +
 
 +
==== Mapping in Gnome with gsettings set ====
 +
 
 +
Some of the function keys can be mapped in Gnome with the advantage of HUD notifications on changes (like volume and brightness changes) which can supplement one of the mapping methods mentioned above. This [https://gist.github.com/dhead666/0b9c1cc9def939705594 linked example] maps the brightness and volume actions. Notice that {{Pkg|xdotool}} is required.
 +
 
 +
=== Power key and lid switch handling ===
 +
 
 +
==== Ignore using logind ====
 +
 
 +
Out of the box, {{ic|systemd-logind}} will catch power key and lid switch events and handle them: it will shut down the Chromebook on a power key press, and a suspend on a lid close. However, this policy might be a bit harsh given that the power key is an ordinary key at the top right of the keyboard that might be pressed accidentally.
 +
 
 +
To configure logind to ignore power key presses and lid switches, add the lines to {{ic|logind.conf}} below.
 +
 
 +
{{hc|head=/etc/systemd/logind.conf|
 +
output=HandlePowerKey=ignore
 +
HandleLidSwitch=ignore}}
 +
 
 +
Then [[restart]] logind for the changes to take effect.
 +
 
 +
Power key and lid switch events will still be logged to journald by logind. See [[Power management#ACPI events]].
 +
 
 +
==== Ignore by Gnome ====
 +
 
 +
{{Out of date|This setting seems to be gone in tweak tool.}}
 +
 
 +
[[Install]] {{Pkg|gnome-tweak-tool}}, open the Tweak Tool and under Power change the Power Button Action.
 +
 
 +
== Known issues ==
 +
 
 +
=== Syslinux ===
 +
 
 +
Follow Syslinux installation instructions carefully. Try manual installation to see where the problem comes from. If you see [[Syslinux#Missing_operating_system|Missing Operation System]] then it may be because you need to use correct bootloader binary. If syslinux does not work try another [[bootloader]] such as [[GRUB]].
 +
 
 +
== See also ==
 +
 
 +
* [http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices Developer Information for Chrome OS Devices at the Chromium Projects site]
 +
* [https://bbs.archlinux.org/viewtopic.php?id=173418 BBS topic about the Acer C720] which include generic information on Haswell Based Chromebooks.
 +
* Re-partitioning in Chrome OS [http://chromeos-cr48.blogspot.co.uk/2012/04/chrubuntu-1204-now-with-double-bits.html], [http://goo.gl/i817v]
 +
* [http://bit.ly/NewChromebooks Brent Sullivan's the always updated list of Chrome OS devices]
 +
* [http://prodct.info/chromebooks/ Google Chromebook Comparison Chart]

Latest revision as of 10:38, 20 November 2016

Warning: This article relies on third-party scripts and modifications, and may irreparably damage your hardware or data. Proceed at your own risk.

This article was created to provide information on how to get Arch installed on the series of Chrome OS devices built by Acer, HP, Samsung, Toshiba, and Google. Currently this page is being overhauled, and more model specific pages are being built with some of the information listed below.

Contents

Introduction

Legacy boot

Some of the newer Chrome OS devices (Intel's Haswell and Broadwell based models) feature a "legacy boot" mode that makes it easier to boot Linux and other operating systems. The legacy boot mode is provided by the SeaBIOS payload of Coreboot, which is the firmware for the Intel based Chrome OS devices (with the exception of the first generation of Chromebooks). SeaBIOS behaves like a traditional BIOS that boots into the MBR of the disk, and from there into standard bootloaders like Syslinux and GRUB.

On the Chrome OS devices that shipped with SeaBIOS, the installation process of Arch Linux should be similar with a few minor adjustments.

Models without SeaBIOS

One of the following approaches can be taken in order to install Arch Linux on Chrome OS devices that did not shipped with SeaBIOS as part of the installed firmware:

  • With a very few models it is possible to only flash a SeaBIOS payload to the RW_LEGACY part of the firmware flash memory (e.g. Acer C740, Acer C910 and Google Chromebook Pixel 2), it is possible to update the RW_LEGACY manually with Chrome OS' flashrom or leave it to John Lewis' flash_chromebook_rom.sh script to flash SeaBIOS if the script support for a specific device is limited to RW_LEGACY update, the advantage with this method is that the stock firmware is not changed (as RW_LEGACY was missing).
  • Flash a full custom firmware which includes a SeaBIOS payload.
  • Only write to the BOOT_STUB part of the firmware flash memory, this method adds a SeaBIOS payload and update the firmware to only load this payload, it is a much safer approach than flashing the full firmware but there might be some limitations (e.g. no support in suspend or VMX), this is the Modify ROM to run SeaBIOS exclusively option in John Lewis' flash_chromebook_rom.sh script.
  • Take the ChrUbuntu approach which uses the Chrome OS kernel and modules.
  • Build and sign your own kernel, see [1] [2] [3].

The Installation process described on this page tries to cover the method of installing Arch Linux on these non SeaBIOS models by flashing a custom firmware.

Firmware write protection intro

All Chrome OS devices features a firmware write protection. It is important to be aware of it as one might need to disable the write protection as part of the installation process (to update GBB flags or flash a custom firmware).

For more details see Firmware write protection.

Prerequisites

  • You should claim your free 100GB-1TB of Google Drive space before you install Arch. This needs to happen from ChromeOS(version > 23), not linux. This will sync/backup ChromeOS, as designed
  • Visit the ArchWiki page for your Chrome OS device.
  • If there is no ArchWiki page for your device then before proceeding, gather information about the device and if you succeed in installing Arch Linux, then consider adding a new ArchWiki page for your model (you can use the Acer C720 as an example for device shipped with SeaBios or the Acer C710 as device that did not ship with it).
  • Read this guide completely and make sure you understand all the steps before making any changes.

Chrome OS devices

See Chromebook models for hardware comparison with details about SeaBIOS availability and storage expansion.

General hardware recommendations and remarks

  • MyDigitalSSD M.2 NGFF SSD drives are probably the most popular choice when upgrading the internal SSD of a Chrome OS device. There are multiple accounts of failing MyDigitalSSD SSD drives at the Acer C720 topic on the Arch forums [4] [5] [6] and much more on the web. If the SSD was upgraded to a MyDigitalSSD model then it is highly recommended to backup the system and data frequently. It might be advisable to upgrade the SDD with a different brand. Notice that this might be due to a SSD firmware issue so updating the SSD firmware is highly recommended.
  • Transcend MTS400 M.2 NGFF SSD drives are failing (at least with stock Coreboot firmware) when ALPM is enabled, ATM there is no SSD firmware update that fixing this bug, so it is highly advisable to disabled ALPM if a power management daemon has been installed (which enabled it), see Resolving SATA power management related errors and how to disable ALPM in Chrome OS.

Installation

Warning: Installation on Chrome OS devices that do not ship with SeaBIOS requires flashing a custom firmware, a process that may brick your device. Proceed at your own risk.
Note: While the following information should fit all the Chrome OS devices with Coreboot firmware (shipped with SeaBIOS payload or without), it is possible that with some models you may need to make further adjustments.

The general installation procedure:

  • Enable developer mode.
  • Chrome OS device with SeaBIOS:
    • Enable legacy boot / SeaBIOS.
    • Set SeaBIOS as default (optional but recommended, requires disabling the write protection).
  • Chrome OS device without SeaBIOS:
    • Flash a custom firmware.
  • Prepare the installation media.
  • Boot Arch Linux installation media and install Arch.

Enabling developer mode

Developer Mode is necessary in order to access the superuser shell inside Chrome OS, which is required for making changes to the system like allow booting through SeaBIOS.

Warning: Enabling Developer Mode will wipe all of your data.

To enable developer mode:

  • Turn on the Chrome OS device.
  • Press and hold the Esc + F3 (Refresh) keys, then press the Power button. This enters Recovery Mode.
  • Press Ctrl + D (no prompt). It will ask you to confirm, then the system will revert its state and enable Developer Mode.
Note: Press Ctrl + D (or wait 30 seconds for the beep and boot) at the white boot splash screen to enter Chrome OS.

Accessing the superuser shell

After you have enabled the Developer Mode you will need to access the superuser shell. How you do this depends on whether you have configured Chrome OS or not.

Accessing the superuser shell without Chrome OS configuration

If you have not configured Chrome OS, just press Ctrl + Alt + F2 (F2 is the "forward" arrow on the top row, →), you will see a login prompt.

  • Use chronos as the username, it should not prompt you for a password.
  • Become superuser with sudo bash.

Accessing the superuser shell with Chrome OS configuration

If you have configured Chrome OS already:

  • Open a crosh window with Ctrl + Alt + T.
  • Open a bash shell with the shell command.
  • Become superuser with sudo bash

Enabling SeaBIOS

If your Chrome OS device did not ship with SeaBIOS or you prefer to install a custom firmware, then continue to Flashing a custom firmware.

This method will allow you to access the pre-installed version of SeaBIOS through the Developer Mode screen in Coreboot.

  • Inside your superuser shell enter:
# crossystem dev_boot_usb=1 dev_boot_legacy=1
  • Reboot the machine.

You can now start SeaBIOS by pressing Ctrl + L at the white boot splash screen.

Note: If you intend to stay using pre-installed SeaBIOS route and think you will not appreciate having to press Ctrl + L every time you boot to reach SeaBIOS then you can set Coreboot to boot to SeaBIOS by default. This currently must be done inside of Chrome OS and requires disabling the write protection (hardware and software), it might be a good idea to do this now so that you will not have to re-install Chrome OS later with recovery install media. If you are choosing to keep Chrome OS (installing Arch on external storage or on the internal storage side by side with Chrome OS then set SeaBIOS to default later.

You should now have SeaBIOS enabled on your Chrome OS device, if you choose to not set it as default then you can continue to Installing Arch Linux.

Boot to SeaBIOS by default

To boot SeaBIOS by default, you will need to run set_gbb_flags.sh in Chrome OS (already included in Chrome OS, it will not work correctly in Arch Linux).

Warning: If you do not set the GBB flags then your system might become corrupted on empty battery, resetting dev_boot_usb dev_boot_legacy to their default values, forcing you to recover Chrome OS and wiping your Arch Linux installation on the internal storage, though it might be possible to modify Chrome OS recovery image to set these values again [7].
Warning: If you do not disable the write protection before setting the GBB flags you endanger wiping out the RW-LEGACY part of the firmware (i.e. SeaBIOS) and your system might not boot (should be recoverable with Chrome OS recovery media). Updated versions of set_gbb_flags.sh will not let you set the GBB flags without disabling the write protection.
  • Disable the hardware write protection.

To find the location of the hardware write-protect screw/switch/jumper and how to disable it visit the ArchWiki page for your Chrome OS device. If there is no information about your device on the ArchWiki then turn to Information for Chrome OS Devices and Coreboot's Chromebooks page.

More information about the firmware protection available at the Custom firmware for Chrome OS devices page.

# sudo su
  • Disable the software write protection.
# flashrom --wp-disable
  • Check that write protection is disabled.
# flashrom --wp-status
  • Run set_gbb_flags.sh with no parameters.
# set_gbb_flags.sh
Note: Recent versions of Chrome OS have moved the script to /usr/share/vboot/bin/set_gbb_flags.sh which is not in $PATH by default.
  • Make sure you get the following output, see [8].
GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001
GBB_FLAG_FORCE_DEV_SWITCH_ON 0x00000008
GBB_FLAG_FORCE_DEV_BOOT_LEGACY 0x00000080
GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY 0x00000400
  • Now set SeaBIOS as default.
# set_gbb_flags.sh 0x489
  • Enable back the software write protection.
# flashrom --wp-enable

Your Chrome OS device now will boot to SeaBIOS by default, you can continue to Installing Arch Linux, if your device is booting correctly then you should re-enable the hardware write protection.

Flashing a custom firmware

Note: The following steps explain how to flash a custom firmware from Chrome OS, for information on how to flash a custom firmware from Arch Linux visit the Custom firmware for Chrome OS devices page
  • Disable the hardware write protection.

To find the location of the hardware write-protect screw/switch/jumper and how to disable it visit the ArchWiki page for your Chrome OS device. If there is no information about your device on the ArchWiki then turn to Information for Chrome OS Devices and Coreboot's Chromebooks page.

More information about the firmware protection available at the Custom firmware for Chrome OS devices page.

Note: The reason for not posting here is to force you to visit the site and read the page before proceeding.
  • After the script exited copy the backed up firmware to an external storage before rebooting the system.

You should now have a custom firmware installed on your device, cross your fingers and reboot.

After flashing the firmware you can continue to Installing Arch Linux.

Installing Arch Linux

Preparing the installation media

Create an Arch Linux Installer USB drive.

Booting the installation media

  • Plug the USB drive to the Chrome OS device and start SeaBIOS with Ctrl + L at the white boot splash screen (if SeaBIOS is not set as default).
  • Press Esc to get a boot menu and select the number corresponding to your USB drive.

The Arch Linux installer boot menu should appear and the installation process can proceed as normal.

Note: For now choose GRUB as your bootloader: you can choose MBR or GPT: Partitioning. If you choose GPT then do not forget to add a BIOS Boot Partition. Also see Known Issues.

After finishing installing Arch Linux continue by following the Post Installation Configuration.

Alternative installation, Install Arch Linux in addition to Chrome OS

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements.Tango-edit-clear.png

Reason: needs more details and convert the use of the script to manually re-partitioning steps with cgpt (Discuss in Talk:Chrome OS devices#)

It is possible to have both Arch Linux and Chrome OS installed on the internal drive.

Re-partition the drive

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Dubious script from untrusted and obfuscated source. (Discuss in Talk:Chrome OS devices#)

In order to partition the drive, we will run the first stage of the ChruBuntu script in Chrome OS. After logging in, open a shell with Ctrl + Alt + T, run shell, then cd ~/ to enter the home directory. Once there, run the following:

curl -L -O http://goo.gl/9sgchs; sudo bash 9sgchs

It will ask how much space to partition for the alternate partition. 8GB is a safe number for the 16GB SSD. More than 9 may not work.

Fixing the filesystem

Reboot the system so Chrome OS will repair the filesystem after the previous re-partitioning process. Once this is done, verify that the disk space has been reduced by opening a file manager and clicking the gear in the top right of the window.

Continue the installation process

Continue the installation process but instead of wiping the internal drive and creating a new filesystem you should install Arch to the existing empty partition that we designated for Arch in the previous step.

So after booting the installation media:

  • Run the command fdisk -l to list drives and partitions. Find the internal drive and note the name of the partition matching the size you specified in the ChrUbuntu script.
  • Use mkfs.ext4 /dev/sdxY (where xY is drive letter and partition number, eg. /dev/sda7) This will create the filesystem for arch.
  • Following the instructions for installing GRUB on GPT, use gdisk to create a 1007kb partition and set the type to EF02.
Note: Contrary to what some people say, the grub partition does not need to be the first partition on the disk. The existing ChromeOS partitions make this difficult to do anyways.
Choosing between Arch Linux and Chrome OS

Reboot your system and press Ctrl + l to load SeaBIOS in order to boot into Arch, or press Ctrl + d in order to boot into ChromeOS.

Now you can also set SeaBIOS as default (or even later as you are keeping Chrome OS).

Post installation configuration

Patched kernels

Note: You can most likely ignore this section unless your device requires patched kernel support.

It is recommended to use the official linux package for most Chrome OS devices with the exception being newer devices which might need patched kernel support such as the Chromebook Pixel 2015.

linux-samus4AUR provides patches for the Chromebook Pixel 2015 to fix touchpad, touchscreen, and sound functionality which has not been merged into upstream linux yet. More information is available at its GitHub page.

If your devices requires a patched kernel, it is advised to review the list of patches and decide if the patch list is getting decidedly small enough that you no longer require a patched kernel and instead you can use the official linux package instead.

See kernels for more information.

Video driver

See Intel graphics.

Touchpad and touchscreen

See Touchpad Synaptics, libinput, and and Touchscreen.

Touchpad and touchscreen kernel modules

Since kernel 3.17 all the related patches merged into the upstream sources, meaning the linux package in core supports these devices.

What to do if your touchpad or touchscreen is not supported?
  • Review the list of patches in linux-chromebookAUR[broken link: archived in aur-mirror], if a related patch for your Chromebook model exist then install this package.
  • If there is no such patch do not worry as the developers should be able to add it by request as the Chromium OS sources includes the related changes.
  • You can also try to find the related commits by yourself and create a proper patch, some hints:
    • Dig into your Chrome OS system, look at the obvious suspects like boot log, /proc/bus/input/devices and /sys/devices.
    • The Linux kernel sources for Chromium OS are at [9].
    • Each kernel source for the latest Chromium OS release has its own branch, name convention: release-R*-*-chromeos-KERNELVER, where R*-* is the Chromium OS release and KERNELVER is the kernel version.
    • Review the git log of drivers/platform, drivers/i2c/busses and drivers/input/touchscreen.
  • linux-samus4AUR includes touchpad and touchscreen support for the Chromebook Pixel 2015. More information is available at its GitHub page.

Touchpad configuration

There are few options how to set the touchpad:

Chromium OS input drivers

xf86-input-cmtAUR offers a port of the Chromium OS input driver: xf86-input-cmt as an alternative for the Synaptics input driver. It provides tweaked configuration files for most devices, and provides functionality that the Synaptics input driver does not such as palm rejection. Additionally, it enables functionality not enabled by default in the Chromium OS input driver such as tap-to-drag.

Please note, the input driver does not work under some circumstances where you have insufficient permissions to access /dev/input/event This will affect you if you use startx to load a DE/WM session. If this is the case or if the driver does not load for any other cases, you should run:

# usermod -a -G input $USER

Where $USER is the current user wanting to use the input driver.

It should also be noted that some users have reported the driver does not work in GDM but works normally after log in. If you are affected by this, you should run:

# usermod -a -G input gdm

After reboot, you should be able to use the touchpad normally.

Fixing suspend

Note: Lid suspend might not work directly after boot, you might need to wait a little.

The following are instructions to fix the suspend functionality. Even if you are using a pre-installed SeaBIOS or John Lewis' pre-built SeaBIOS you will still need this fix.

There have been a few alternatives discussed and those may work better for some. [10] [11]

To fix suspend, the general idea is to disable the EHCI_PCI module, which interferes with the suspend cycle. There are multiple ways to achieve this.

With kernel parameters

Add the following to your GRUB configuration:-

/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=ehci_pci"

Then rebuild your grub config. After rebuilding your GRUB config, reboot your computer.

With systemd

Sometimes the synaptics touchpad, and various other parts of the laptop are used as wakeup devices causing certain movements of the laptop during suspend to end suspend. In order to disable all wakeup devices except for the laptop lid sensor, create the following suspend-device-fix.sh file.

/usr/local/sbin/suspend-device-fix.sh
#!/bin/bash

awk '{if ($1 != "LID0" && $3 == "*enabled") print $1}' < /proc/acpi/wakeup | while read NAME
do echo "$NAME" > /proc/acpi/wakeup
done

exit 0

Now give the file executable permissions:

# chmod +x /usr/local/sbin/suspend-device-fix.sh

Create a systemd service to execute the script on every boot.

/etc/systemd/system/suspend-fix.service
[Unit]
Description=Suspend Fix

[Service]
Type=simple
ExecStart=/usr/local/sbin/suspend-device-fix.sh

[Install]
WantedBy=multi-user.target

First start suspend-fix.service. If it properly starts, then enable it to be started on bootup.

Add the following line at the end of /etc/rc.d/rc.local (if it does not exist, just create it) to prevent bad handling of EHCI USB:

/etc/rc.d/rc.local
echo 1 > /sys/devices/pci0000\:00/0000\:00\:1d.0/remove

Then, create the following cros-sound-suspend.sh file. Only the Ath9k binding/unbinding lines are listed below; see the alternatives linked above for additional sound suspend handling if you experience issues.

/usr/lib/systemd/system-sleep/cros-sound-suspend.sh
#!/bin/bash

case $1/$2 in
  pre/*)
    # Unbind ath9k for preventing error and full sleep mode (wakeup by LID after hibernating) 
    echo -n "0000:01:00.0" | tee /sys/bus/pci/drivers/ath9k/unbind
    # Unbind snd_hda_intel for sound
    echo -n "0000:00:1b.0" | tee /sys/bus/pci/drivers/snd_hda_intel/unbind
    echo -n "0000:00:03.0" | tee /sys/bus/pci/drivers/snd_hda_intel/unbind
    ;;
  post/*)
    # Bind ath9k for preventing error and and full sleep mode (wakeup by LID after hibernating) 
    echo -n "0000:01:00.0" | tee /sys/bus/pci/drivers/ath9k/bind
    # bind snd_hda_intel for sound
    echo -n "0000:00:1b.0" | tee /sys/bus/pci/drivers/snd_hda_intel/bind
    echo -n "0000:00:03.0" | tee /sys/bus/pci/drivers/snd_hda_intel/bind
    ;;
esac

Make sure to make the script executable:

# chmod +x /usr/lib/systemd/system-sleep/cros-sound-suspend.sh

Then rebuild your grub config.

Fixing audio

Haswell based models

One or more of followings might help solving audio related issues, setting snd_hda_intel module index reported the most useful. It is highly possible that you will not need to make any change.

  • Create /etc/modprobe.d/alsa.conf, the option index will make sure the analog output is the default (and not HDMI), the option model will notify the driver our board model which will make the built-in microphone usable (you can try instead model=alc283-sense-combo).
/etc/modprobe.d/alsa.conf
options snd_hda_intel index=1 model=,alc283-chrome
  • Use the ~/.asoundrc file from [12].
  • If having problems with headphones (perhaps no audio playing), try alsactl restore in terminal. Now, ALSA should automatically switch between channels when using headphones/speakers.
  • To fix Flash audio with PulseAudio, use the ~/.asoundrc file from [13].

Chromebook Pixel 2015

linux-samus4AUR includes a patch for Broadwell SoC sound devices. Its GitHub page includes additional instructions for initializing the sound device.

Hotkeys

The Chromebook function keys recognized as standard F1-F10 by the kernel, it is preferable to map them accordingly to their appearance. It would also be nice to get the keys Delete, Home, End, PgUp, PgDown which in Chrome OS mapped to Alt + : BackSpace, Right, Left, Up, Down.

xkeyboard configuration

xkeyboard-config 2.16-1 added a chromebook model that enables the Chrome OS style functions for the function keys. You can, for example, set this using localectl set-x11-keymap us chromebook. See the chromebook definition in /usr/share/X11/xkb/symbols/inet for the full mappings.

Sxhkd configuration

One way to set the hotkeys would be by using the Sxhkd daemon. Besides sxhkd, this also requires amixer, xorg-xbacklight, and xautomation.

  • See [14] for an example configuration in ~/.config/sxhkd/sxhkdrc.

Xbindkeys configuration

Another way to configure hotkeys would be by using Xbindkeys. Besides xbindkeys this requires amixer and xorg-xbacklight and xvkbd.

Alternate xbindkeys configuration

Volchange (originated in the Debian User Forums)) can manipulate the volume with PulseAudio instead of using amixer. Besides Volchange this requires xorg-xbacklight and xvkbd.

  • Download the script from [16].
  • Make it executable
$ chmod u+x ~/.local/bin/volchange

See [17] for a matching ~/.xbindkeysrc.

Patch xkeyboard-config

Another option is to install xkeyboard-config-chromebookAUR, for more details visit [18].

Mapping in Gnome with gsettings set

Some of the function keys can be mapped in Gnome with the advantage of HUD notifications on changes (like volume and brightness changes) which can supplement one of the mapping methods mentioned above. This linked example maps the brightness and volume actions. Notice that xdotool is required.

Power key and lid switch handling

Ignore using logind

Out of the box, systemd-logind will catch power key and lid switch events and handle them: it will shut down the Chromebook on a power key press, and a suspend on a lid close. However, this policy might be a bit harsh given that the power key is an ordinary key at the top right of the keyboard that might be pressed accidentally.

To configure logind to ignore power key presses and lid switches, add the lines to logind.conf below.

/etc/systemd/logind.conf
HandlePowerKey=ignore
HandleLidSwitch=ignore

Then restart logind for the changes to take effect.

Power key and lid switch events will still be logged to journald by logind. See Power management#ACPI events.

Ignore by Gnome

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: This setting seems to be gone in tweak tool. (Discuss in Talk:Chrome OS devices#)
Install gnome-tweak-tool, open the Tweak Tool and under Power change the Power Button Action.

Known issues

Syslinux

Follow Syslinux installation instructions carefully. Try manual installation to see where the problem comes from. If you see Missing Operation System then it may be because you need to use correct bootloader binary. If syslinux does not work try another bootloader such as GRUB.

See also