Difference between revisions of "Chrome OS devices"

From ArchWiki
Jump to navigation Jump to search
(remove stub-draft)
(added linux-max98090 kernel repo)
 
(440 intermediate revisions by 51 users not shown)
Line 1: Line 1:
 
[[Category:Laptops]]
 
[[Category:Laptops]]
[[ja:Chromebook]]
+
[[ja:Chrome OS デバイス]]
This article is to provide information on how to get Arch up and running on the Chromebook series of laptops built by Acer, HP, Samsung, Toshiba, and Google. Currently overhauling all of this and trying to get more specific model pages built with uniform methods listed here.  
+
{{Related articles start}}
 +
{{Related|Chrome OS devices/Crostini}}
 +
{{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.
 +
 
 +
{{Note|This article describes how to install Arch Linux by activating developer mode. For instructions on how to install Arch Linux in a ChromeOS container without having to enable developer mode see [[Crostini]]}}
 +
 
 +
== Introduction ==
 +
 
 +
=== Legacy Boot Mode ===
 +
 
 +
All recent Intel-based Chrome OS devices (starting with the 2013 Chromebook Pixel) feature a Legacy Boot Mode, designed to allow the user to boot Linux. Legacy Boot Mode has a dedicated firmware region, {{ic|RW_LEGACY}}, which is designed to be user-writeable (hence the 'RW' notation) and is completely separate from the ChromeOS portion of the firmware (ie, it is safe to update and cannot brick the device). It is enabled by the [http://www.coreboot.org/SeaBIOS SeaBIOS] payload of  [http://www.coreboot.org/ coreboot], the open-source firmware used for all Chrome OS devices (with the exception of the first generation of Chromebooks and a few early ARM models).  SeaBIOS behaves like a traditional BIOS that boots into the MBR of the disk, and from there into standard bootloaders like Syslinux and GRUB.
 +
 
 +
Models with a Core-i based SoC (Haswell, Broadwell, Skylake, KabyLake) mostly ship with a functional Legacy Boot Mode payload; updating to a 3rd party build can provide bug fixes and additional features.  Models with an Atom-based SoC (Baytrail, Braswell, Apollolake) have Legacy Boot Mode capability, but do not ship with a RW_LEGACY/SeaBIOS payload (that part of the firmware is blank).  These models require a 3rd party RW_LEGACY firmware to be loaded for Legacy Boot Mode to be functional.
 +
 
 +
 
 +
==== Models without Legacy Boot Mode/SeaBIOS ====
 +
 
 +
One of the following approaches can be taken in order to install Arch Linux on Chrome OS devices which did not ship with SeaBIOS as part of the installed firmware:
 +
 
 +
* If the device supports Legacy Boot Mode, but does not ship with a functional {{ic|RW_LEGACY}} payload (or doesn't ship with one at all), one can flash a SeaBIOS payload to the {{ic|RW_LEGACY}} part of the firmware. This is 100% safe, as it writes to a user-writeable area of the firmware image which is completely separate from/does not affect ChromeOS.  The easiest way to install/update the RW_LEGACY firmware on your ChromeOS device is via MrChromebox's [[Chrome_OS_devices/Custom_firmware#Flashing_with_MrChromebox.27s_Firmware_Utility_Script|Firmware Utility Script]], which supports the widest range of devices and offers the most up-to-date SeaBIOS builds; one can also update the {{ic|RW_LEGACY}} firmware manually with Chrome OS' {{ic|flashrom}} (requires downloading/compiling your own build), or use John Lewis' {{ic|flash_chromebook_rom.sh}} script (no longer supported).
 +
 
 +
* Flash a full [[Custom firmware for Chrome OS devices|custom firmware]] which includes either a SeaBIOS or UEFI payload, and removes all the ChromeOS-specific parts.
 +
 
 +
* Flash the {{ic|BOOT_STUB}} part of the firmware. This method replaces the stock ChromeOS payload (depthcharge) with SeaBIOS. This is theoretically a 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 and {{ic|Flash BOOT_STUB firmware}} option in MrChromebox's.
 +
 
 +
* 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 models without SeaBIOS by flashing a custom firmware.
 +
 
 +
=== Firmware write protection intro ===
  
==Model Specific Overview==
+
All Chrome OS devices features firmware write protection, which restricts write access to certain regions of the flash chip. It is important to be aware of it as one might need to disable the hardware write protection as part of the installation process (to update GBB flags or flash a custom firmware).
<center>
 
{| class="wikitable"
 
|-
 
|+ style="background:#BFD7FF"| Chromebook Models
 
|-
 
! Available
 
! Brand
 
! Model
 
! Processor
 
! RAM
 
! Storage
 
! Screen
 
! Resolution
 
! Weight
 
! Base Price
 
|-
 
| Dec 2010
 
| Google
 
| Cr-48
 
| 1.66 GHz Intel Atom N455
 
| rowspan="3"|2 GB<br>DDR3
 
| rowspan="5"|16 GB SSD
 
| rowspan="2"|12.1 in<br>(30.7 cm)
 
| rowspan="2"|1280x800<br>(16:10)
 
| 3.8 lb<br>(1.7 kg)
 
| Not for sale.
 
|-
 
| Jun 2011
 
| Samsung
 
| Series 5<br>XE500C21
 
| rowspan="2"|1.66 GHz Intel Atom N570
 
| 3.06-3.26 lb<br>(1.4–1.5 kg)
 
| $349.99 Wi-Fi<br>$449.99 3G
 
|-
 
| Jul 2011
 
| Acer Inc.|Acer
 
| AC700
 
| 11.6 in<br>(29.5 cm)
 
| 1366x768<br>(16:9)
 
| 3.19 lb<br>(1.4 kg)
 
| $299.99 Wi-Fi<br>$399.99 3G
 
|-
 
| May 2012
 
| rowspan="2"|Samsung
 
| [[#Samsung Series 5 550|Series 5<br>XE550C22]]
 
| 1.3 GHz Intel Celeron 867<br>1.6 Ghz Intel Core i5 2467M
 
| 4 GB<br>DDR3
 
| 12.1 in<br>(30.7 cm)
 
| 1280x800<br>(16:10)
 
| 3.3  lb<br>(1.5 kg)
 
| $449.99 Wi-Fi<br>$549.99 3G
 
|-
 
| Oct 2012
 
| [[Samsung_Chromebook_(ARM)|Series 3<br>XE303C12]]
 
| 1.7 GHz Samsung Exynos 5250
 
| 2 GB<br>DDR3
 
| rowspan="2"|11.6 in<br>(29.5 cm)
 
| rowspan="4"|1366x768<br>(16:9)
 
| 2.43 lb<br>(1.1 kg)
 
| $249.99 Wi-Fi<br>$329.99 3G
 
|-
 
| Nov 2012
 
| [http://us.acer.com/ac/en/US/content/models/chromebooks/chromebook-c Acer]
 
| [[Acer_C7_Chromebook|C7]]
 
| 1.1 GHz Intel Celeron 847<br>1.5 GHz Intel Celeron 1007U
 
| rowspan="2"|2-4 GB<br>DDR3
 
| rowspan="2"|320 GB HDD<br>16 GB SSD
 
| 3-3.05 lb<br>(1.4 kg)
 
| $199.99 Wi-Fi
 
|-
 
| rowspan="3"|Feb 2013
 
| HP
 
| Pavilion 14<br>Chromebook
 
| 1.1 GHz Intel Celeron 847
 
| 14 in<br>(35.6 cm)
 
| 3.96 lb<br>(1.8 kg)
 
| $329.99 Wi-Fi
 
|-
 
| Lenovo
 
| ThinkPad X131e<br>Chromebook
 
| 1.5 GHz Intel Celeron 1007U
 
| rowspan="2"|4 GB<br>DDR3
 
| 16 GB SSD
 
| 11.6 in<br>(29.5 cm)
 
| 3.92 lb<br>(1.8 kg)
 
| $429 Wi-Fi
 
|-
 
| Google
 
| Chromebook<br>Pixel
 
| 1.8 GHz Intel Core i5 3427U
 
| 32 GB SSD<br>64 GB SSD
 
| 12.85 in<br>(32.6 cm)
 
| 2560x1700<br>(3:2)
 
| 3.35 lb<br>(1.5 kg)
 
| $1249 Wi-Fi<br>$1499 LTE
 
|-
 
| Oct 2013
 
| rowspan="2"|HP
 
| Chromebook 11
 
| 1.7 GHz Samsung Exynos 5250
 
| rowspan="1"|2 GB<br>DDR3
 
| rowspan="2"|16 GB SSD
 
| 11.6 in<br>(29.5 cm)
 
| rowspan="5"|1366x768<br>(16:9)
 
| 2.3 lb<br>(1.04 kg)
 
| $279 Wi-Fi
 
|-
 
| Nov 2013
 
| [[HP_Chromebook_14|Chromebook 14]]
 
| rowspan="4"|1.4 GHz Intel Celeron 2955U
 
| rowspan="2"|2 GB DDR3<br>4 GB DDR3
 
| 14 in<br>( 35.6 cm)
 
| 4.07 lb<br>(1.84 kg)
 
| $299 Wi-Fi<br>$349 HSPA+
 
|-
 
| Nov 2013
 
| Acer
 
| [[Acer_C720_Chromebook|C720]]
 
| 16 GB SSD<br>32 GB SSD
 
| 11.6 in<br>(29.5 cm)
 
| 2.76 lb<br>(1.25 kg)
 
| $199 Wi-Fi
 
|-
 
| Jan 2014
 
| Toshiba
 
| [[Toshiba Chromebook CB30/CB35|Chromebook CB30/CB35]]
 
| 2 GB DDR3
 
| rowspan="2"|16 GB SSD
 
| 13.3 in<br>(33.8 cm)
 
| 3.3 lb<br>(1.5 kg)
 
| $299 Wi-Fi
 
|-
 
| Apr 2014
 
| Dell
 
| [[Dell Chromebook 11|Chromebook 11]]
 
| 2 GB DDR3<br>4 GB DDR3
 
| 11.6 in<br>(29.5 cm)
 
| 2.9 lb<br>(1.31 kg)
 
| $299 Wi-Fi<br>$349 Wi-Fi
 
|}
 
</center>
 
  
== General Chromebook Installation ==
+
For more details see [[Custom firmware for Chrome OS devices#Firmware write protection|Firmware write protection]].
=== Pre-requisites ===
 
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.
 
  
=== Developer Mode ===
+
=== Prerequisites ===
Developer Mode information on all models is at [http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices].
 
  
First, enable '''''developer mode''''' on your Chromebook. Although everything in the "Downloads" area syncs to your Google Drive account, this will delete data stored on the hard or solid state drive.
+
* 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 devices|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_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.
  
 +
== Chrome OS devices ==
  
== Installation on a Haswell Chromebook ==
+
See [[Chrome_OS_devices/Chromebook|Chromebook models]] for hardware comparison with details about SeaBIOS availability and storage expansion.
  
{{Warning|This article relies on third-party scripts and modifications, and may irreparably damage your hardware or data. Proceed at your own risk.}}
+
=== General hardware recommendations and remarks ===
  
{{Note|Some of the installation steps described might be the same for Bay-Trail and pre-Haswell Chromebook models. As it's not feasible to test all pre-Haswell models it would be better if users with such devices will open an ArchWiki page and detail the installation steps they followed.}}
+
* 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.
 +
* 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].
  
=== Understanding the installation process ===
+
== Installation ==
  
Arch Linux installation process on Haswell Chromebooks ([[Acer C720 Chromebook|Acer C720]], [[HP Chromebook 14]], [[Dell Chromebook 11]], [[Toshiba CB30/CB35]]) should be the same with few minor adjustments.
+
{{Warning|Installation on ChromeOS devices that do not ship with SeaBIOS requires flashing a custom firmware, certain types of which have the potential to brick your device. Proceed at your own risk.}}
Visit the specific Chromebook model ArchWiki page, google for guides and posts about installing Linux on the same Chromebook model, read the following steps and make sure you understand the installation process completely before making any changes.
 
  
If you install Arch Linux on a Chromebook model that doesn't have its own ArchWiki page then please consider creating one (See the [[Acer_C720_Chromebook|Acer C720]] for example).
+
{{Note|While the following information should fit all the ChromeOS 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 installation steps ====
+
The general installation procedure:
 
* Enable developer mode.
 
* Enable developer mode.
* Enable legacy boot / SeaBIOS.
+
* ChromeOS device with functional Legacy Boot Mode/SeaBIOS:
* Set SeaBIOS as default (optional, requires removing the write protect screw).
+
** Enable Legacy Boot Mode.
 +
** Set SeaBIOS as default (optional but highly recommended, requires disabling the write protection).
 +
* ChromeOS device without functional Legacy Boot Mode:
 +
** Flash one of the following types of custom firmware
 +
*** Flash RW_LEGACY firmware (zero risk)
 +
*** Flash BOOT_STUB firmware (very low risk).
 +
*** Flash Full custom firmware (low risk).
 +
* Prepare the installation media.
 
* Boot Arch Linux installation media and install Arch.
 
* Boot Arch Linux installation media and install Arch.
  
==== Choosing between pre-installed version of SeaBIOS or a custom ROM ====
+
=== Enabling developer mode ===
The pre-installed SeaBIOS route has the advantage of being officially implemented by Google whereas the custom ROM route has other advantages such as being more up-to-date, reducing the boot time, removing the Developer Mode screen and enabling VMX.
 
  
=== 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 ChromeOS, which is required for making changes to the system like allow booting through SeaBIOS.
 
 
[http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/acer-c720-chromebook#TOC-Developer-Mode Developer Mode] is necessary to access the superuser shell inside Chrome OS; which is required to make the changes to the system to allow you to boot through SeaBIOS.
 
  
 
{{Warning|Enabling Developer Mode will wipe all of your data.}}
 
{{Warning|Enabling Developer Mode will wipe all of your data.}}
  
To enable Developer Mode:  
+
To enable developer mode:  
  
* Turn on the Chromebook.
 
 
* Press and hold the {{ic|Esc + F3 (Refresh)}} keys, then press the {{ic|Power}} button. This enters Recovery Mode.
 
* Press and hold the {{ic|Esc + F3 (Refresh)}} keys, then press the {{ic|Power}} button. This enters Recovery Mode.
 +
** Chromeboxes have a dedicated Recovery button, which should be pressed/held while powering on
 
* Press {{ic|Ctrl + D}} (no prompt). It will ask you to confirm, then the system will revert its state and enable Developer 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.}}
+
{{Note|Press {{ic|Ctrl + D}} (or wait 30 seconds for the beep and boot) at the white boot splash screen to enter ChromeOS.}}
  
 
=== Accessing the superuser shell ===
 
=== Accessing the superuser shell ===
  
After you have enabled Developer Mode you will need to access the superuser shell.; how you do this depends on whether you've configured Chrome OS or not.
+
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 ChromeOS or not.
  
==== Accessing the Superuser shell without Chrome OS configuration ====
+
==== Accessing the superuser shell without logging into ChromeOS ====
  
If you haven't configured Chrome OS, just press {{ic|Ctrl + Alt + F2}} (F2 is the "forward" arrow on the top row, →), you'll see a login prompt.
+
If you have not configured ChromeOS, 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.
 
* Use {{ic|chronos}} as the username, it should not prompt you for a password.
* Become superuser with {{ic|sudo bash}}.
+
* Become superuser with [[sudo]], use the command {{ic|sudo su -}}.
  
==== Accessing the superuser shell with Chrome OS configuration ====
+
==== Accessing the superuser shell when logged into ChromeOS ====
  
If you have configured Chrome OS already:
+
If you have configured ChromeOS already:
  
 
* Open a crosh window with {{ic|Ctrl + Alt + T}}.
 
* Open a crosh window with {{ic|Ctrl + Alt + T}}.
 
* Open a bash shell with the {{ic|shell}} command.
 
* Open a bash shell with the {{ic|shell}} command.
* Become superuser with {{ic|sudo bash}}
+
* Become superuser with [[sudo]], use the command {{ic|sudo su -}} to accomplish that.
  
=== Enabling SeaBIOS ===
+
=== Enabling Legacy Boot Mode ===
  
This method will allow you to access the pre-installed version of SeaBIOS through the Developer Mode screen in coreboot.
+
If your ChromeOS device did not ship with Legacy Boot Mode support via SeaBIOS, or you prefer to install a custom firmware, then continue to [[#Flashing a custom firmware|Flashing a custom firmware]].
 +
 
 +
This will enable the pre-installed version of SeaBIOS through the Developer Mode screen in coreboot.
  
 
* Inside your superuser shell enter:
 
* Inside your superuser shell enter:
  # crossystem dev_boot_usb=1 dev_boot_legacy=1
+
  # crossystem dev_boot_legacy=1
 
* Reboot the machine.
 
* Reboot the machine.
  
 
You can now start SeaBIOS by pressing {{ic|Ctrl + L}} at the white boot splash screen.
 
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 won't 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 removing the write-protect screw, 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.}}
+
{{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 requires disabling the hardware firmware write protection.}}
 +
 
 +
You should now have SeaBIOS enabled on your ChromeOS 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 ====
 
==== Boot to SeaBIOS by default ====
  
To boot SeaBIOS by default, you will need to run {{ic|set_gbb_flags.sh}}.
+
To boot SeaBIOS by default, you will need to run the [https://chromium.googlesource.com/chromiumos/platform/vboot_reference/+/master/scripts/image_signing/set_gbb_flags.sh {{ic|set_gbb_flags.sh}}] script, which is part of ChromeOS. The script uses flashrom and gbb_utility to read the RO_GBB firmware region, modify the flags, and write it back to flash. The GBB flags can also be set using MrChromebox's [https://mrchromebox.tech/#fwscript Firmware Utility Script] under either ChromeOS or Arch (the latter requiring booting with specific kernel parameters to relax memory access restrictions).
  
{{Warning|If you do not remove the write-protect screw then your system will become corrupted, on empty battery Chrome OS is forced to recover and you lose your Arch Linux. For information about the location of the write-protect screw visit the specific Chromebook model ArchWiki page, [http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices Developer Information for Chrome OS Devices] or google it.}}
+
{{Warning|If you do not set the GBB flags, then a fully discharged or disconnected battery will reset {{ic|dev_boot_legacy}} crossystem flag to its default value, removing the ability to boot in Legacy Boot Mode.  While this used to require you to recover Chrome OS and wipe your Arch Linux installation on the internal storage, the GalliumOS developers have created a set of "fixflags" recovery images, which rather than wiping internal storage, will instead simply re-set the {{ic|dev_boot_legacy}} crossystem flag.  See [https://galliumos.org/fixflags galliumos.org/fixflags]}}
  
* Inside your superuser shell enter:
+
* Disable the hardware write protection.
  # sudo su
+
 
 +
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|ChromeOS 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-devices Developer Information for ChromeOS Devices] and [http://www.coreboot.org/Chromebooks coreboot's Chromebooks page].
 +
 
 +
More information about the firmware protection available at the [[Custom firmware for ChromeOS devices#Firmware write protection|Custom firmware for ChromeOS devices]] page.
 +
 
 +
* Switch to the [[#Accessing the superuser shell|superuser shell]].
 +
 
 +
* 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.
 
* Run {{ic|set_gbb_flags.sh}} with no parameters.
  # set_gbb_flags.sh
+
  # /usr/share/vboot/bin/set_gbb_flags.sh
  
* Make sure you get the following output, see [https://johnlewis.ie/how-to-make-seabios-the-default-on-your-acer-c720/].
+
* This will list all of the available flags. The ones of interest to us are:
 
  GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001
 
  GBB_FLAG_DEV_SCREEN_SHORT_DELAY 0x00000001
 
  GBB_FLAG_FORCE_DEV_SWITCH_ON 0x00000008
 
  GBB_FLAG_FORCE_DEV_SWITCH_ON 0x00000008
Line 240: Line 156:
 
  GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY 0x00000400
 
  GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY 0x00000400
  
* Now set SeaBIOS as default.
+
* So, to set SeaBIOS as default, with a 1s timeout, prevent accidentally exiting Developer Mode via spacebar, and ensure Legacy Boot Mode remains enabled in the event of battery drain/disconnect, we set the flags as such:
  # set_gbb_flags.sh 0×489
+
  # /usr/share/vboot/bin/set_gbb_flags.sh 0x489
  
=== Installing Arch Linux ===
+
* Enable back the software write protection.
 +
# flashrom --wp-enable
 +
 
 +
{{Note|All of these steps are automated by MrChromebox's Firmware Utility Script, so if using that to install/update your RW_LEGACY firmware, easiest to just set the flags via the script as well.}}
 +
 
 +
Your ChromeOS 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 can optionally re-enable the hardware write protection.
 +
 
 +
=== Flashing a custom firmware ===
 +
 
 +
{{Note|The following steps explain how to flash a custom firmware from ChromeOS, for information on how to flash a custom firmware from Arch Linux visit the [[Custom firmware for ChromeOS devices]] page}}
  
{{Note|Choose [https://wiki.archlinux.org/index.php/Beginners%27_Guide#GRUB GRUB] as your boot loader for now instead of Syslinux. See [[#Syslinux | Known Issues]]}}
+
* Disable the hardware write protection.
  
==== Preparing the installation media ====
+
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|ChromeOS 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 ChromeOS Devices] and [http://www.coreboot.org/Chromebooks coreboot's Chromebooks page].
  
===== 32-bit installation =====
+
More information about the firmware protection available at the [[Custom firmware for ChromeOS devices#Firmware write protection|Custom firmware for ChromeOS devices]] page.
  
Create an [https://wiki.archlinux.org/index.php/USB_Flash_Installation_Media Arch Linux Installer USB drive].
+
* Enter the command to run either MrChromebox's or John Lewis's firmware script.
  
===== 64-bit installation =====
+
{{Note|The reason for not posting here is to force you to visit the site and read the instructions before proceeding.}}
  
{{Note|Due to a bug ({{Bug|40637}}) in recent versions of the 64-bit Arch Linux Install Medium (after 2013.10.01), a 64-bit installation with the official image is not currently possible. The instructions below outline a method of modifying the image so that it will boot properly and a 64-bit installation can be performed.}}
+
* After the exiting the script, be sure to copy the backed up firmware to an external storage before rebooting the system (if the script doesn't provide that option for you).
  
Create a new FAT32 partition on your USB drive e.g. with gparted and '''label it as ArchLinux'''.
+
You should now have a custom firmware installed on your device, cross your fingers and reboot.
  
{{Warning|Without the label it won't work}}
+
After flashing the firmware you can continue to [[#Installing Arch Linux|Installing Arch Linux]].
  
*Mount the new partition (replace x with the correct letter as shown with sudo fdisk -l and username with your own username)
+
=== Installing Arch Linux ===
  
# mount /dev/sdx1 /mnt/ -o uid=username,gid=users
+
==== Preparing the installation media ====
  
Install GRUB2 on the USB drive
+
Create an [[USB flash installation media|Arch Linux Installer USB drive]].
  
# grub-install --no-floppy --root-directory=/mnt /dev/sdx
+
{{Note|If the USB loads but fails to boot into Arch, it may be due a bug in the syslinux the current (2017.03.01) installer uses. The 2016.11.01 version from the [[Arch Linux Archive]] will work until the issue is resolved.}}
  
Create a new directory in /mnt/boot
+
==== Booting the installation media ====
  
# /mnt/boot/archlinux-20140703-dual
+
* Plug the USB drive to the ChromeOS 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.
  
Mount the archlinux-2014.07.03-dual.iso
+
The Arch Linux installer boot menu should appear and the [[Installation guide|installation]] process can proceed as normal.
  
$ mkdir ~/iso
+
{{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]].}}
# mount -o loop archlinux-2014.07.03-dual.iso ~/iso
 
  
Copy the mounted files to the usb drive
+
After finishing installing Arch Linux continue by following the [[#Post installation configuration|Post Installation Configuration]].
  
$ cp -r ~/iso/arch/* /mnt/boot/archlinux-20140703-dual
+
== Post installation configuration ==
  
Create the grub.cfg file
+
=== Patched kernels ===
 +
{{Note|You can most likely ignore this section unless your device requires patched kernel support.}}
  
{{hc|head=/mnt/boot/grub/grub.cfg|
+
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.
output=menuentry "Arch Linux 64 Bit" {
+
 
linux /boot/archlinux-20140703-dual/boot/x86_64/vmlinuz archisobasedir=/boot/archlinux-20140703-dual archisolabel=ArchLinux
+
{{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].
initrd /boot/archlinux-20140703-dual/boot/x86_64/archiso.img
+
 
}
+
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.
  
==== Booting the installation media ====
+
=== Video driver ===
  
Plug the USB drive into the Chromebook and start SeaBIOS with {{ic|Ctrl + L}} at the white boot splash screen. 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 installation can proceed as normal.
+
See [[Intel graphics]].
  
=== Video Driver ===
+
=== Touchpad and touchscreen ===
  
See [[Intel Graphics]].
+
See [[Touchpad Synaptics]], [[libinput]], and [[Touchscreen]].
  
=== Touchpad and Touchscreen kernel modules ===
+
==== Touchpad and touchscreen kernel modules ====
  
Patches are required for kernel 3.16 to enable the touchpad and touchscreen, some of these patches already merged into kernel 3.17rc1.
+
Since kernel 3.17 all the related patches merged into the upstream sources, meaning the {{Pkg|linux}} package in core supports these devices.
  
==== Install a patched kernel ====
+
===== What to do if your touchpad or touchscreen is not supported? =====
  
Install {{AUR|linux-chromebook}} from [[AUR]], see the comments for pre-built packages.
+
* 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].
  
==== Manually build the modules ====
+
==== Touchpad configuration ====
  
{{Poor writing|Low quality scripts}}
+
There are few options how to set the touchpad:
  
Enabling the touchpad currently requires building a set of patched Haswell Chromebook kernel modules.
+
* 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]].
  
* For kernel 3.16.1, simply run [https://github.com/masmullin2000/arch-c720p this script] (includes patches for [[Acer C720 Chromebook|Acer C720]], [[HP Chromebook 14]], [[Dell Chromebook 11]], [[Toshiba CB30/CB35]]).
+
==== Chromium OS input drivers ====
  
$ pacman -S wget sudo patch make gcc git
+
{{Out of date|{{ic|xf86-input-cmt}} development is not active and it is probably not needed anymore in any case since [[libinput]]'s compatibility with Chrome OS devices's touchpads is fairly good.}}
$ git clone https://github.com/masmullin2000/arch-c720p.git
 
$ cd arch-c720p
 
$ sh ./touch.sh
 
  
=== Touchpad Configuration ===
+
{{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.
  
There are few options how to set the touchpad.
+
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
  
* Visit the specific Chromebook model ArchWiki page for touchpad config file.
+
After reboot, you should be able to use the touchpad normally.
* Copy the config file from ChromeOS.
 
* Download a config file from the Chromium project [https://chromium.googlesource.com/chromiumos/platform/xorg-conf/+/master], you can find out your touchpad model by running {{ic|cat /proc/bus/input/devices}}
 
* Use a [[Touchpad_Synaptics#Configuration_on_the_fly|touchpad configuration tool]] like [[Touchpad_Synaptics#Graphical_tools | Synaptiks]] 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}}, does not work at all.
 
  
 
=== Fixing suspend ===
 
=== Fixing suspend ===
Line 333: Line 270:
  
 
The following are instructions to fix the suspend functionality.
 
The following are instructions to fix the suspend functionality.
Depending if you use the pre-installed SeaBIOS or John Lewis' pre-built custom ROMs with {{AUR|linux-chromebook}} you might not need the following fix.
+
Users of a pre-installed SeaBIOS or John Lewis' pre-built SeaBIOS you will need this fix.
With the recent 3.17rc5 kernel the suspend fix still needed.
+
This procedure is not needed with Matt DeVillier's custom firmware since problematic ACPI wake devices (such as {{ic|TPAD}}) are firmware-disabled.
  
 
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]
 
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]
  
When using the stock coreboot included on Haswell Chromebooks, the general idea is to disable the EHCI_PCI and TPM modules, which cause the suspend/resume cycle to fail. There are multiple ways to achieve this.
+
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
  
==== With a patched kernel ====
+
awk '{if ($1 != "LID0" && $3 == "*enabled") print $1}' < /proc/acpi/wakeup | while read NAME
 +
do echo "$NAME" > /proc/acpi/wakeup
 +
done
  
{{AUR|linux-chromebook}} from the [[AUR]] provides these fixes without the need for any additional kernel parameters.
+
exit 0
 +
</nowiki>}}
  
==== With kernel parameters ====
+
Now give the file executable permissions:
 +
# chmod +x /usr/local/sbin/suspend-device-fix.sh
  
Add the following to your GRUB configuration
+
Create a systemd service to execute the script on every boot.
 +
{{hc|head=/etc/systemd/system/suspend-fix.service|
 +
output=[Unit]
 +
Description=Suspend Fix
  
{{hc|head=/etc/default/grub|
+
[Service]
output=GRUB_CMDLINE_LINUX_DEFAULT="tpm_tis.interrupts=0 modprobe.blacklist=ehci_pci"}}
+
Type=simple
 +
ExecStart=/usr/local/sbin/suspend-device-fix.sh
  
Then [[GRUB#Generating main configuration file|rebuild your grub config]].
+
[Install]
 +
WantedBy=multi-user.target
 +
}}
  
==== With systemd ====
+
First [[start]] {{ic|suspend-fix.service}}. If it properly starts, then [[enable]] it to be started on bootup.
  
Create the following {{ic|cros-acpi-wakeup.conf}} file.
+
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/tmpfiles.d/cros-acpi-wakeup.conf|
+
{{hc|head=/etc/rc.d/rc.local|
output=w /proc/acpi/wakeup - - - - EHCI
+
output=<nowiki>
w /proc/acpi/wakeup - - - - HDEF
+
echo 1 > /sys/devices/pci0000\:00/0000\:00\:1d.0/remove
w /proc/acpi/wakeup - - - - XHCI
+
</nowiki>}}
w /proc/acpi/wakeup - - - - LID0
 
w /proc/acpi/wakeup - - - - TPAD
 
w /proc/acpi/wakeup - - - - TSCR}}
 
  
Then, create the following {{ic|cros-sound-suspend.sh}} file. Only the EHCI binding/unbinding lines are listed below; see the alternatives linked above for additional sound suspend handling if you experience issues.
+
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|
 
{{hc|head=/usr/lib/systemd/system-sleep/cros-sound-suspend.sh|
Line 372: Line 331:
 
case $1/$2 in
 
case $1/$2 in
 
   pre/*)
 
   pre/*)
     # Unbind ehci for preventing error  
+
     # Unbind ath9k for preventing error and full sleep mode (wakeup by LID after hibernating)
     echo -n "0000:00:1d.0" | tee /sys/bus/pci/drivers/ehci-pci/unbind
+
     echo -n "0000:01:00.0" | tee /sys/bus/pci/drivers/ath9k/unbind
 
     # Unbind snd_hda_intel for sound
 
     # 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:1b.0" | tee /sys/bus/pci/drivers/snd_hda_intel/unbind
Line 379: Line 338:
 
     ;;
 
     ;;
 
   post/*)
 
   post/*)
     # Bind ehci for preventing error  
+
     # Bind ath9k for preventing error and and full sleep mode (wakeup by LID after hibernating)
     echo -n "0000:00:1d.0" | tee /sys/bus/pci/drivers/ehci-pci/bind
+
     echo -n "0000:01:00.0" | tee /sys/bus/pci/drivers/ath9k/bind
 
     # bind snd_hda_intel for sound
 
     # 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:1b.0" | tee /sys/bus/pci/drivers/snd_hda_intel/bind
Line 390: Line 349:
 
  # chmod +x /usr/lib/systemd/system-sleep/cros-sound-suspend.sh
 
  # chmod +x /usr/lib/systemd/system-sleep/cros-sound-suspend.sh
  
This method also requires the {{ic|1=tpm_tis.interrupts=0}} kernel parameter in your GRUB configuration.
+
Then [[GRUB#Generate_the_main_configuration_file|rebuild your grub config]].
 +
 
 +
=== Fixing audio ===
  
{{hc|head=/etc/default/grub|
+
==== Baytrail based models ====
output=GRUB_CMDLINE_LINUX_DEFAULT="quiet tpm_tis.interrupts=0"}}
+
 
 +
Audio on most baytrail models should work on {{Pkg|linux}} since fix merged into 4.19.7 [https://git.archlinux.org/linux.git/commit/?h=v4.19.7-arch1&id=f35f68c68ce48a8b70a4c3674663513825b7a1bc], to fix regression in 4.18.15, see bug report [https://lkml.org/lkml/2018/10/30/676].
 +
 
 +
{{Note|If you find audio is less stable (see journal PLL mesages) using {{Pkg|linux}}, consider custom kernel with reverted fixes from custom repo [https://github.com/JSkier21/linux-max98090 linux-max98090]}}
 +
 
 +
It is likely that you will also need to use {{ic|alsamixer}} from {{Pkg|alsa-utils}} to turn on "Left Speaker Mixer Left DAC" and "Right Speaker Mixer Right DAC". For more information, see [https://bugs.archlinux.org/task/48936].
 +
 
 +
==== 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>}} or {{ic|<nowiki>model=,alc283-dac-wcaps</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.
  
Then [[GRUB#Generating main configuration file|rebuild your grub config]].
+
* To fix [[Flash]] audio with PulseAudio, use the {{ic|~/.asoundrc}} file from [https://gist.githubusercontent.com/dhead666/0eebff16cd9578c5e035/raw/d4c974fcd50565bf116c57b1884170ecb47f8bf6/.asoundrc].
  
=== Known issues ===
+
==== Chromebook Pixel 2015 ====
  
==== Syslinux ====
+
{{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.
  
Syslinux fails to set the bootable flag with {{ic|syslinux-install_update -i -a -m}}. After setting the bootable flag manually in {{ic|fdisk}} and installing Syslinux to the MBR with {{ic|syslinux-install_update -i -m}}, SeaBIOS boots Syslinux, but Syslinux then complains about a missing OS. Use GRUB for now.
+
=== Hotkeys ===
  
==Post Installation Configuration==
+
[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}}.
  
===Hotkeys===
+
==== xkeyboard configuration ====
  
[https://support.google.com/chromebook/answer/1047364?hl=en The Chromebook function keys] recognized as standard F1-F10 by the kernel, it's preferable to map accordingly to their appearance.
+
{{Pkg|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 ====
 
==== Sxhkd configuration ====
  
[[Sxhkd]] can specify behavior similar to the shortcut defaults in Chrome OS. Besides the sxhkd daemon, this requires [[Advanced Linux Sound Architecture|amixer]], {{Pkg|xorg-xbacklight}}, and {{Pkg|xautomation}}.
+
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 [http://pastie.org/9550934] for an example configuration in {{ic|~/.config/sxhkd/sxhkdrc}}.
+
* See [https://gist.github.com/dhead666/191722ec04842d8d330b] for an example configuration in {{ic|~/.config/sxhkd/sxhkdrc}}.
  
 
==== Xbindkeys configuration ====
 
==== Xbindkeys configuration ====
  
There is another way to configure hot keys using [[xbindkeys]]. This requires [[Advanced Linux Sound Architecture|amixer]] and {{Pkg|xorg-xbacklight}}. [http://homepage3.nifty.com/tsato/xvkbd/ xvkbd] is also needed for sending strings (key shortcuts) to focus windows. Some of the configuration comes from the thread [https://bbs.archlinux.org/viewtopic.php?id=173418&p=3 vilefridge's 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 {{AUR|xvkbd}}.
  
See [http://pastie.org/9550940] for an example configuration in {{ic|~/.xbindkeysrc}}. Then edit [[Xinit]] and add:
+
* 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.
  
xbindkeys &
+
===== Alternate xbindkeys configuration =====
  
==== 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 {{AUR|xvkbd}}.
  
[http://pastie.org/9550960 Volchange] uses PulseAudio for volume up/down/mute and a few other changes. [http://www.debianuserforums.org/viewtopic.php?f=55&t=1453#p14351]
+
* Download the script from [http://pastie.org/9550960].
 +
* Make it executable
 +
$ chmod u+x ~/.local/bin/volchange
  
After saving the script, make it executable
+
See [https://gist.github.com/dhead666/4e23b506441ad424e26e] for a matching {{ic|~/.xbindkeysrc}}.
  
$ chmod u+x ~/.local/bin/volchange
+
==== Patch xkeyboard-config ====
  
See [http://pastie.org/9550957] for a matching {{ic|~/.xbindkeysrc}}.
+
Another option is to install {{AUR|xkeyboard-config-chromebook}}, for more details visit [https://github.com/dhead666/archlinux-pkgbuilds/tree/master/xkeyboard-config-chromebook].
  
==== Patch xkeyboard-config ====
+
==== Mapping in Gnome with gsettings set ====
  
Install {{AUR|xkeyboard-config-chromebook}}, for more details visit [https://github.com/dhead666/archlinux-pkgbuilds/tree/master/xkeyboard-config-chromebook].
+
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 ===
 
=== Power key and lid switch handling ===
Line 451: Line 433:
 
Then [[restart]] logind for the changes to take effect.
 
Then [[restart]] logind for the changes to take effect.
  
Power key and lid switch events will still be logged to journald by logind. See [[https://wiki.archlinux.org/index.php/Power_management#ACPI_events]].
+
Power key and lid switch events will still be logged to journald by logind. See [[Power management#ACPI events]].
  
 
==== Ignore by Gnome ====
 
==== Ignore by Gnome ====
  
[[Pacman|Install]] {{Pkg|gnome-tweak-tool}}, open the Tweak Tool and under Power change the Power Button Action.
+
[[Install]] {{Pkg|gnome-tweaks}}, open the Tweak Tool and under Power change the Power Button Action.
 
 
 
 
==  Working inside Chrome OS ==
 
 
 
=== cgpt command ===
 
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.
 
 
 
Use:
 
cgpt create /dev/sda
 
Used to initialise a disk with GPT headers.
 
 
 
Use:
 
cgpt show /dev/sda
 
To list all partitions on disk with boot information for each.
 
 
 
Use:
 
cgpt add [options] /dev/sda
 
Used to modify boot options
 
 
 
===== Example =====
 
  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 6 -t unused /dev/sda
 
Example: delete partition #6.
 
 
 
cgpt add -i 1-12
 
: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!.
+
== Known issues ==
  
==Chromebook Pixel==
+
=== Syslinux ===
Suspending more than once [https://plus.google.com/109560881064626882142/posts/gyjF87fq9Js causes a reboot] unless the tpm module is enabled with  specific options:
 
  
modprobe tpm_tis force=1 interrupts=0
+
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 ==
 
== 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]
 
* 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 19:31, 3 January 2019

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.

Note: This article describes how to install Arch Linux by activating developer mode. For instructions on how to install Arch Linux in a ChromeOS container without having to enable developer mode see Crostini

Introduction

Legacy Boot Mode

All recent Intel-based Chrome OS devices (starting with the 2013 Chromebook Pixel) feature a Legacy Boot Mode, designed to allow the user to boot Linux. Legacy Boot Mode has a dedicated firmware region, RW_LEGACY, which is designed to be user-writeable (hence the 'RW' notation) and is completely separate from the ChromeOS portion of the firmware (ie, it is safe to update and cannot brick the device). It is enabled by the SeaBIOS payload of coreboot, the open-source firmware used for all Chrome OS devices (with the exception of the first generation of Chromebooks and a few early ARM models). SeaBIOS behaves like a traditional BIOS that boots into the MBR of the disk, and from there into standard bootloaders like Syslinux and GRUB.

Models with a Core-i based SoC (Haswell, Broadwell, Skylake, KabyLake) mostly ship with a functional Legacy Boot Mode payload; updating to a 3rd party build can provide bug fixes and additional features. Models with an Atom-based SoC (Baytrail, Braswell, Apollolake) have Legacy Boot Mode capability, but do not ship with a RW_LEGACY/SeaBIOS payload (that part of the firmware is blank). These models require a 3rd party RW_LEGACY firmware to be loaded for Legacy Boot Mode to be functional.


Models without Legacy Boot Mode/SeaBIOS

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

  • If the device supports Legacy Boot Mode, but does not ship with a functional RW_LEGACY payload (or doesn't ship with one at all), one can flash a SeaBIOS payload to the RW_LEGACY part of the firmware. This is 100% safe, as it writes to a user-writeable area of the firmware image which is completely separate from/does not affect ChromeOS. The easiest way to install/update the RW_LEGACY firmware on your ChromeOS device is via MrChromebox's Firmware Utility Script, which supports the widest range of devices and offers the most up-to-date SeaBIOS builds; one can also update the RW_LEGACY firmware manually with Chrome OS' flashrom (requires downloading/compiling your own build), or use John Lewis' flash_chromebook_rom.sh script (no longer supported).
  • Flash a full custom firmware which includes either a SeaBIOS or UEFI payload, and removes all the ChromeOS-specific parts.
  • Flash the BOOT_STUB part of the firmware. This method replaces the stock ChromeOS payload (depthcharge) with SeaBIOS. This is theoretically a 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 and Flash BOOT_STUB firmware option in MrChromebox's.
  • 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 models without SeaBIOS by flashing a custom firmware.

Firmware write protection intro

All Chrome OS devices features firmware write protection, which restricts write access to certain regions of the flash chip. It is important to be aware of it as one might need to disable the hardware 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 ChromeOS devices that do not ship with SeaBIOS requires flashing a custom firmware, certain types of which have the potential to brick your device. Proceed at your own risk.
Note: While the following information should fit all the ChromeOS 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.
  • ChromeOS device with functional Legacy Boot Mode/SeaBIOS:
    • Enable Legacy Boot Mode.
    • Set SeaBIOS as default (optional but highly recommended, requires disabling the write protection).
  • ChromeOS device without functional Legacy Boot Mode:
    • Flash one of the following types of custom firmware
      • Flash RW_LEGACY firmware (zero risk)
      • Flash BOOT_STUB firmware (very low risk).
      • Flash Full custom firmware (low risk).
  • 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 ChromeOS, 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:

  • Press and hold the Esc + F3 (Refresh) keys, then press the Power button. This enters Recovery Mode.
    • Chromeboxes have a dedicated Recovery button, which should be pressed/held while powering on
  • 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 ChromeOS.

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 ChromeOS or not.

Accessing the superuser shell without logging into ChromeOS

If you have not configured ChromeOS, 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, use the command sudo su -.

Accessing the superuser shell when logged into ChromeOS

If you have configured ChromeOS already:

  • Open a crosh window with Ctrl + Alt + T.
  • Open a bash shell with the shell command.
  • Become superuser with sudo, use the command sudo su - to accomplish that.

Enabling Legacy Boot Mode

If your ChromeOS device did not ship with Legacy Boot Mode support via SeaBIOS, or you prefer to install a custom firmware, then continue to Flashing a custom firmware.

This will enable the pre-installed version of SeaBIOS through the Developer Mode screen in coreboot.

  • Inside your superuser shell enter:
# crossystem 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 requires disabling the hardware firmware write protection.

You should now have SeaBIOS enabled on your ChromeOS 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 the set_gbb_flags.sh script, which is part of ChromeOS. The script uses flashrom and gbb_utility to read the RO_GBB firmware region, modify the flags, and write it back to flash. The GBB flags can also be set using MrChromebox's Firmware Utility Script under either ChromeOS or Arch (the latter requiring booting with specific kernel parameters to relax memory access restrictions).

Warning: If you do not set the GBB flags, then a fully discharged or disconnected battery will reset dev_boot_legacy crossystem flag to its default value, removing the ability to boot in Legacy Boot Mode. While this used to require you to recover Chrome OS and wipe your Arch Linux installation on the internal storage, the GalliumOS developers have created a set of "fixflags" recovery images, which rather than wiping internal storage, will instead simply re-set the dev_boot_legacy crossystem flag. See galliumos.org/fixflags
  • 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 ChromeOS device. If there is no information about your device on the ArchWiki then turn to Developer Information for ChromeOS Devices and coreboot's Chromebooks page.

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

  • 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.
# /usr/share/vboot/bin/set_gbb_flags.sh
  • This will list all of the available flags. The ones of interest to us are:
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
  • So, to set SeaBIOS as default, with a 1s timeout, prevent accidentally exiting Developer Mode via spacebar, and ensure Legacy Boot Mode remains enabled in the event of battery drain/disconnect, we set the flags as such:
# /usr/share/vboot/bin/set_gbb_flags.sh 0x489
  • Enable back the software write protection.
# flashrom --wp-enable
Note: All of these steps are automated by MrChromebox's Firmware Utility Script, so if using that to install/update your RW_LEGACY firmware, easiest to just set the flags via the script as well.

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

Flashing a custom firmware

Note: The following steps explain how to flash a custom firmware from ChromeOS, for information on how to flash a custom firmware from Arch Linux visit the Custom firmware for ChromeOS 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 ChromeOS device. If there is no information about your device on the ArchWiki then turn to Information for ChromeOS Devices and coreboot's Chromebooks page.

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

  • Enter the command to run either MrChromebox's or John Lewis's firmware script.
Note: The reason for not posting here is to force you to visit the site and read the instructions before proceeding.
  • After the exiting the script, be sure to copy the backed up firmware to an external storage before rebooting the system (if the script doesn't provide that option for you).

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.

Note: If the USB loads but fails to boot into Arch, it may be due a bug in the syslinux the current (2017.03.01) installer uses. The 2016.11.01 version from the Arch Linux Archive will work until the issue is resolved.

Booting the installation media

  • Plug the USB drive to the ChromeOS 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.

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 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 [7].
    • 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

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

Reason: xf86-input-cmt development is not active and it is probably not needed anymore in any case since libinput's compatibility with Chrome OS devices's touchpads is fairly good. (Discuss in Talk:Chrome OS devices#)

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. Users of a pre-installed SeaBIOS or John Lewis' pre-built SeaBIOS you will need this fix. This procedure is not needed with Matt DeVillier's custom firmware since problematic ACPI wake devices (such as TPAD) are firmware-disabled.

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

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

Baytrail based models

Audio on most baytrail models should work on linux since fix merged into 4.19.7 [10], to fix regression in 4.18.15, see bug report [11].

Note: If you find audio is less stable (see journal PLL mesages) using linux, consider custom kernel with reverted fixes from custom repo linux-max98090

It is likely that you will also need to use alsamixer from alsa-utils to turn on "Left Speaker Mixer Left DAC" and "Right Speaker Mixer Right DAC". For more information, see [12].

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 or model=,alc283-dac-wcaps).
/etc/modprobe.d/alsa.conf
options snd_hda_intel index=1 model=,alc283-chrome
  • Use the ~/.asoundrc file from [13].
  • 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 [14].

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 [15] 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 xvkbdAUR.

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 xvkbdAUR.

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

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

Patch xkeyboard-config

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

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

Install gnome-tweaks, 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