Chrome OS devices

From ArchWiki
Revision as of 14:57, 19 September 2014 by Dhead (talk | contribs) (→‎Installing Arch Linux: move creating installation media before how to boot)
Jump to navigation Jump to search


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.

Model Specific Overview

Chromebook Models
Available Brand Model Processor RAM Storage Screen Resolution Weight Base Price
Dec 2010 Google Cr-48 1.66 GHz Intel Atom N455 2 GB
DDR3
16 GB SSD 12.1 in
(30.7 cm)
1280x800
(16:10)
3.8 lb
(1.7 kg)
Not for sale.
Jun 2011 Samsung Series 5
XE500C21
1.66 GHz Intel Atom N570 3.06-3.26 lb
(1.4–1.5 kg)
$349.99 Wi-Fi
$449.99 3G
Jul 2011 Acer AC700 11.6 in
(29.5 cm)
1366x768
(16:9)
3.19 lb
(1.4 kg)
$299.99 Wi-Fi
$399.99 3G
May 2012 Samsung Series 5
XE550C22
1.3 GHz Intel Celeron 867
1.6 Ghz Intel Core i5 2467M
4 GB
DDR3
12.1 in
(30.7 cm)
1280x800
(16:10)
3.3 lb
(1.5 kg)
$449.99 Wi-Fi
$549.99 3G
Oct 2012 Series 3
XE303C12
1.7 GHz Samsung Exynos 5250 2 GB
DDR3
11.6 in
(29.5 cm)
1366x768
(16:9)
2.43 lb
(1.1 kg)
$249.99 Wi-Fi
$329.99 3G
Nov 2012 Acer C7 1.1 GHz Intel Celeron 847
1.5 GHz Intel Celeron 1007U
2-4 GB
DDR3
320 GB HDD
16 GB SSD
3-3.05 lb
(1.4 kg)
$199.99 Wi-Fi
Feb 2013 HP Pavilion 14
Chromebook
1.1 GHz Intel Celeron 847 14 in
(35.6 cm)
3.96 lb
(1.8 kg)
$329.99 Wi-Fi
Lenovo ThinkPad X131e
Chromebook
1.5 GHz Intel Celeron 1007U 4 GB
DDR3
16 GB SSD 11.6 in
(29.5 cm)
3.92 lb
(1.8 kg)
$429 Wi-Fi
Google Chromebook
Pixel
1.8 GHz Intel Core i5 3427U 32 GB SSD
64 GB SSD
12.85 in
(32.6 cm)
2560x1700
(3:2)
3.35 lb
(1.5 kg)
$1249 Wi-Fi
$1499 LTE
Oct 2013 HP Chromebook 11 1.7 GHz Samsung Exynos 5250 2 GB
DDR3
16 GB SSD 11.6 in
(29.5 cm)
1366x768
(16:9)
2.3 lb
(1.04 kg)
$279 Wi-Fi
Nov 2013 Chromebook 14 1.4 GHz Intel Celeron 2955U 2 GB DDR3
4 GB DDR3
14 in
( 35.6 cm)
4.07 lb
(1.84 kg)
$299 Wi-Fi
$349 HSPA+
Unknown Acer C720 2 GB
DDR3
11.6 in
(29.5 cm)
2.76 lb
(1.25 kg)
$199 Wi-Fi

General Chromebook Installation

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

Developer Mode information on all models is at [1].

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.


Installation on a Haswell Chromebook

Warning: This article relies on third-party scripts and modifications, and may irreparably damage your hardware or data. Proceed at your own risk.
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.

Understanding the installation process

Arch Linux installation process on Haswell Chromebooks (Acer C720, HP 14 (Celeron 2955U), Dell 11, Toshiba CB30/CB35) should be the same with few minor adjustments. 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 for example).

The installation steps

  • Enable developer mode.
  • Enable legacy boot / SeaBIOS.
  • Set SeaBIOS as default (optional, requires removing the write protect screw).
  • Boot Arch Linux installation media and install Arch.

Choosing between pre-installed version of SeaBIOS or a custom ROM

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

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.

To enable Developer Mode:

  • Turn on the Chromebook.
  • 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 Developer Mode you will need to access the superuser shell.; how you do this depends on whether you've configured Chrome OS or not.

Accessing the Superuser shell without Chrome OS configuration

If you haven't configured Chrome OS, just press Ctrl + Alt + F2 (F2 is the "forward" arrow on the top row, →), you'll 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

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 won't 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 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.

Boot to SeaBIOS by default

To boot SeaBIOS by default, you will need to run set_gbb_flags.sh.

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, Developer Information for Chrome OS Devices or google it.
  • Inside your superuser shell enter:
# sudo su
  • Run set_gbb_flags.sh with no parameters.
# set_gbb_flags.sh
  • Make sure you get the following output, see [2].
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 0×489

Installing Arch Linux

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements. See Help:Style for reference.Tango-edit-clear.png

Reason: Duplicated content (Discuss in Talk:Chrome OS devices#)

Preparing the installation media

32-bit installation

Create an Arch Linux Installer USB drive.

64-bit installation with the newest 2014.07.03 ISO

Create a new FAT32 partition on your USB drive e.g. with gparted and label it as ArchLinux.

Warning: Without the label it won't work
  • Mount the new partition (replace x with the correct letter as shown with sudo fdisk -l and username with your own username)
# mount /dev/sdx1 /mnt/ -o uid=username,gid=users

Install GRUB2 on the USB drive

# grub-install --no-floppy --root-directory=/mnt /dev/sdx

Create a new directory in /mnt/boot

# /mnt/boot/archlinux-20140703-dual

Mount the archlinux-2014.07.03-dual.iso

$ mkdir ~/iso
# mount -o loop archlinux-2014.07.03-dual.iso ~/iso

Copy the mounted files to the usb drive

$ cp -r ~/iso/arch/* /mnt/boot/archlinux-20140703-dual

Create the grub.cfg file

/mnt/boot/grub/grub.cfg
menuentry "Arch Linux 64 Bit" {
 linux /boot/archlinux-20140703-dual/boot/x86_64/vmlinuz archisobasedir=/boot/archlinux-20140703-dual archisolabel=ArchLinux
 initrd /boot/archlinux-20140703-dual/boot/x86_64/archiso.img
}

Booting the installation media

Plug the USB drive into the Chromebook and start SeaBIOS with Ctrl + L at the white boot splash screen. 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 installation can proceed as normal.

Note: Choose GRUB as your boot loader for now instead of Syslinux. See Known Issues

Video Driver

See Intel Graphics.

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.

Install a patched kernel

Install linux-chromebookAUR from AUR, see the comments for pre-built packages.

Manually build the modules

Visit the specific Chromebook model ArchWiki page for information how to manually build the modules.


Touchpad Configuration

There are few options how to set the touchpad.

  • Visit the specific Chromebook model ArchWiki page for touchpad config file.
  • Copy the config file from ChromeOS.
  • Download a config file from the Chromium project [3], you can find out your touchpad model by running cat /proc/bus/input/devices
  • Use a graphical tool like Synaptiks for KDE.

Fixing suspend

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 linux-chromebookAUR you might no need the following fix. With the recent 3.17rc5 kernel the suspend fix still needed.

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

NOTE: Lid suspend doesn't work directly after boot, you need to wait a little.

Create the following cros-acpi-wakeup.conf file.

/etc/tmpfiles.d/cros-acpi-wakeup.conf
w /proc/acpi/wakeup - - - - EHCI
w /proc/acpi/wakeup - - - - HDEF
w /proc/acpi/wakeup - - - - XHCI
w /proc/acpi/wakeup - - - - LID0
w /proc/acpi/wakeup - - - - TPAD
w /proc/acpi/wakeup - - - - TSCR

Then, create the following 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.

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

case $1/$2 in
  pre/*)
    # Unbind ehci for preventing error 
    echo -n "0000:00:1d.0" | tee /sys/bus/pci/drivers/ehci-pci/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 ehci for preventing error 
    echo -n "0000:00:1d.0" | tee /sys/bus/pci/drivers/ehci-pci/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 add the following kernel boot parameters. Different combinations have been mentioned, with tpm_tis.interrupts=0 being the most important.

/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet add_efi_memmap boot=local noresume noswap i915.modeset=1 tpm_tis.force=1 tpm_tis.interrupts=0 nmi_watchdog=panic,lapic"

Then rebuild your grub config.

Known issues

Syslinux

Syslinux fails to set the bootable flag with syslinux-install_update -i -a -m. After setting the bootable flag manually in fdisk and installing Syslinux to the MBR with syslinux-install_update -i -m, SeaBIOS boots Syslinux, but Syslinux then complains about a missing OS. Use GRUB for now.

Post Installation Configuration

Hotkeys

The Chromebook function keys recognized as standard F1-F10 by the kernel, it's preferable to map accordingly to their appearance.

Sxhkd configuration

Sxhkd can specify behavior similar to the shortcut defaults in Chrome OS. Besides the sxhkd daemon, this requires amixer, xorg-xbacklight, and xautomation.

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

Xbindkeys configuration

There is another way to configure hot keys using xbindkeys. This requires amixer and xorg-xbacklight. xvkbd is also needed for sending strings (key shortcuts) to focus windows. Some of the configuration comes from the thread vilefridge's xbindkeys configuration.

See [7] for an example configuration in ~/.xbindkeysrc. Then edit Xinit and add:

xbindkeys &

Alternate xbindkeys configuration

Volchange uses PulseAudio for volume up/down/mute and a few other changes. [8]

After saving the script, make it executable

$ chmod u+x ~/.local/bin/volchange

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

Patch xkeyboard-config

Install xkeyboard-config-chromebookAUR, for more details visit [10].

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

Ignore by Gnome

Install gnome-tweak-tool, 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!.


Samsung Series 5 550

Reminder- Needs to be moved to its own page given the boatload of new development surrounding this model including with coreboot / seabios.

Developer Mode

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.

The second level (described above) is what we want in order to install Arch.

http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/samsung-series-5-chromebook/b.jpg

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.

Warning: Be gentle with the developer switch! Some people have reported that the developer switch breaks easily.

Chromebook Pixel

Suspending more than once causes a reboot unless the tpm module is enabled with specific options:

modprobe tpm_tis force=1 interrupts=0

See also