Difference between revisions of "Archive:Chromebox"

From Official Kodi Wiki
Jump to: navigation, search
(Known issues + Fixes/Workarounds)
(This was plain wrong. VAAPI does full range by default - so if full range is wanted - everything can stay is. Prefer Render needs only to be disabled when Limited Range is needed - but still setting the gpu to full range is needed!)
Line 172: Line 172:
 
:*: Use 'DP1' instead of 'HDMI1' if connected via the DisplayPort output. See [http://wiki.openelec.tv/index.php?title=Autostart.sh the OpenELEC Autostart wiki page] for more info.   
 
:*: Use 'DP1' instead of 'HDMI1' if connected via the DisplayPort output. See [http://wiki.openelec.tv/index.php?title=Autostart.sh the OpenELEC Autostart wiki page] for more info.   
 
:*: You may also need to select the Kodi option 'Used limited color range' under Settings-->System-->Video Output.  Use the video clip and image above as a guide.
 
:*: You may also need to select the Kodi option 'Used limited color range' under Settings-->System-->Video Output.  Use the video clip and image above as a guide.
:*: '''Note:''' full range output requires the following setting as well:  Settings-->Video-->Acceleration-->Prefer VAAPI Rendering: disabled/de-selected.  
+
:*: '''Note:''' If you want to output Limited color range, you are required to do the following setting as well:  Settings-->Video-->Acceleration-->Prefer VAAPI Rendering: disabled/de-selected.  
  
 
No Audio and/or corrupted video on Wakeup from Suspend:
 
No Audio and/or corrupted video on Wakeup from Suspend:

Revision as of 11:22, 2 February 2015

Chromebox
Asus chromebox.jpg
Released 2014-03-14 (US)
OS Chrome OS
CPU Intel® Celeron 2955U/2957U
Intel® Core i3-4010U
Intel® Core i7-4600U
Storage 16GB internal SSD (M.2 SATA)
RAM 2 GB/4GB standard, 16GB max
Dual Channel DDR3L-12800
Graphics Intel® HD Graphics/GT1 (Celeron)
Intel® HD Graphics 4400/GT2 (i3/i7)
Connectivity HDMI, Displayport, Bluetooth 4.0, USB 3.0, Wifi 802.11 a/b/g/n, 10/100/1000 Ethernet, 2 -in-1 Card Reader, Audio jack
Dimensions 4.88 x 4.88 x 1.65 inch (WxDxH)
Asus Chromebox Rear Ports
Asus Chromebox Side/Front Ports
Home icon grey.png   ▶ Devices ▶ x86 hardware ▶ Chromebox

The Haswell Celeron-based Chromeboxes (Asus, HP, Acer, and Dell) are small lightweight x86-64 PCs that natively run ChromeOS, but with a few simple tweaks, have the capability to boot pretty much any Linux distro. They feature HDMI and DisplayPort video outputs (which can be used simultaneously), 4x USB 3.0 ports, gigabit Ethernet, an SD card slot, and built-in 802.11a/b/g/n wireless and Bluetooth 4.0.

Capability wise, these ChromeBoxes fully support hardware accelerated H.264/MPEG-2/VC-1 video playback at up to 2160p24 (4K), proper 24p output, and full 7.1/HD audio bitstreaming (Linux only). 3D playback is supported, though the decoding of MVC streams (as used in 3D Blu-ray ISOs) is not, due to Windows/driver limitations; the hardware itself is capable. Hi10 1080p playback is software decoded, but works well with few exceptions. From a purely Kodi/media playback standpoint, there's no advantage to the Core i3/i7 models over the Celeron 2955U/2957U boxes.

This page is complete guide to running Kodi (formerly XBMC) under Linux on the ChromeBox PCs.


Note: This page was originally written for the ASUS ChromeBox, but nearly all of these steps will be the same on the HP, Acer, and Dell Chromeboxes as well. The hardware is virtually identical: the Acer has a slightly different form factor; the HP model has only 1 dimm slot (vs the 2 the others have); the fan of the HP is also a bit louder than the others (with the Asus being the most quiet); the Dell model has an Intel 802.11ac wifi module, whereas the rest have 802.11abgn.

1 Device Preparation

1.1 Disable Firmware Write Protect

Disabling the firmware write protect will allow us to shorten the developer boot screen timeout (from 30s to ~1s) in a dual boot configuration, and optionally boot directly to the legacy BIOS (and into Ubuntu or OpenELEC). This is also necessary for standalone setups so that the stock firmware can be replaced with a custom build of coreboot.

With the device powered off and unplugged:

  1. Remove (4) rubber feet from bottom of unit
  2. Remove (4) screws under rubber feet
  3. Separate two halves of unit. Tip: partially insert the screw removed from the notched end, but do not re-thread it. Use it to help separate the two halves.
  4. Remove write-protect screw circled below:
    Asus/HP/Dell: Inside-chrome1.jpg
    Acer: Acer wp screw.png
    Note: the write-protect screw on the Acer model is under the heat pipe, which needs to be removed to access it. Be sure to smooth out the heatsink grease/pad before reinstallation of the heat sink / heat pipe.
  5. Reassemble in reverse order

Important: The write-protect screw should be left out permanently.

1.2 Put in Developer Mode

Putting the ChromeBox in developer mode will allow you to access the underlying Linux operating system features necessary for installing/running Kodi.

WARNING: This will erase all user data on the device.

With the device powered off:

  1. Insert a paperclip into the hole left of the SD card slot and press the recovery button
    Recoverybutton.png
  2. Power on the device, then remove the paper clip
  3. When greeted with the recovery screen, press [CTRL-D] to enter developer mode
  4. Press the recovery button (with paperclip) to confirm.


After confirming, the device will reboot and wipe any existing user data - this will take ~5 minutes. Afterwards, the ChromeBox will be in developer mode (as opposed to standard/verified boot mode), and the developer boot screen will be shown at each boot.

ChromeBox dev boot.jpg

The developer boot screen, shown above, has a warning about OS verification being off. Do not hit [SPACE] to re-enable OS verification, as it will return the device from developer mode to standard/verified boot mode. The ChromeBox must permanently remain in developer mode, else you will potentially have to redo the setup from the beginning. The developer mode boot screen has a ~30s delay, followed by two beeps, before booting. You can skip the delay by pressing [CTRL-D] to immediately boot into ChromeOS.

1.3 Perform a Factory Reset

A factory reset is not needed for a standalone setup, but must be performed prior to any dual-boot installation.

Google's recovery tool seems to be picky about what kind/size of USB/SD media you use. I've had the best luck with 4GB/8GB media, but YMMV. Anecdotally, creating the recovery media from within ChromeOS seems to be the most reliable method.

  1. Create recovery media using step 2 of Google's instructions here: https://support.google.com/chromebook/answer/1080595?hl=en or use the ChromeBook Recovery Utility from the Chrome web store.
  1. With the device powered off, use a paperclip to press the Recovery button and power on the device
  2. Insert the recovery media (USB or SD) when prompted


Note that this will re-partition the internal hard drive and restore the original copy of ChromeOS, erasing anything else on the drive. The ChromeBox will still be left in developer mode, and if you changed the Boot Options they will still be set - so be sure to reset them back to the 'ChromeOS + 30s default' option before performing a factory reset. If you forget to do that, you'll need to press [CTRL-D] on the developer boot screen (or before the legacy boot/SeaBIOS boot screen) in order to boot ChromeOS after performing the recovery.

If you're having trouble creating the recovery media using Google's recovery tool above, you can manually download the recovery image and write it to a USB stick:



2 Setup, Installation, Configuration, and Updating

2.1 OS and Kodi Installation

Kodi can be installed on the ChromeBox in a variety of ways. The two most common are via OpenELEC or Ubuntu+Kodi, in either a standalone or dual boot configuration. This is accomplished via the ChromeBox E-Z Setup script, which must be run (at least initially) from ChromeOS.

The EZ setup script will facilitate everything needed to install either a dual boot setup, or install a custom firmware which allows the installation of any Linux-based OS in standalone mode.

To run the ChromeBox E-Z Setup script, perform the following steps:

  1. Power on and boot to ChromeOS. Do not log in, but ensure a network connection is established.
  2. Hit CTRL-ALT-F2 to open command prompt
  3. Login with user chronos (no password required)
  4. Download and run the ChromeBox setup script with the commands:
    curl -L -O http://goo.gl/3Tfu5W
    sudo bash 3Tfu5W


Full instructions and a detailed explanation of the script's functions and usage can be found at the following forum thread: http://forum.kodi.tv/showthread.php?tid=194362

Note: If installing a Linux-based OS other than OpenELEC, you may need to manually update the kernel for optimal operation. Kernel version 3.14 is the minimum recommended; 3.16 has a fix for most MCE remote controls, and 3.18.4 has a fix for an Intel GPU bug that can cause hanging during video playback.

2.2 Dual Boot OS Selection

When dual booting with ChromeOS and OpenELEC/Ubuntu, due to the ChromeBox's firmware setup, there is no conventional boot menu. Instead, the OS selection is made via keyboard shortcuts on the developer mode boot screen (shown above): [CTRL-D] boots directly ChromeOS; [CTRL-L] boots the legacy BIOS (and whatever secondary OS is installed). The default OS and boot timeout are set using the 'Set Boot Options' feature of the EZ Setup Script.

2.3 Updating Kodi

2.3.1 OpenELEC

The Chromebox is, at its core, a standard x86_64 Intel system (albeit, like the NUC, with an ultra low power processor). The standard OpenELEC builds - labeled 'Generic x86_64' - work perfectly well, and it is recommended to use OpenELEC's auto-update feature (System --> OpenELEC --> System --> Automatic Updates: auto). If that doesn't work for some reason, or you want to update to a nightly/beta/RC build, you can manually update using the instructions on the OpenELEC wiki.

2.4 Recommended Settings

2.4.1 Kodi General

  • System-->Settings-->System: Settings Level:Expert
  • System-->Settings-->System-->Video Output: Vertical blank sync:Enabled during video playback (or just 'Enabled' if you experience UI tearing)
  • System-->Settings-->System-->Power Saving: Shutdown function:Suspend (sets IR power toggle to suspend)
  • System-->Settings-->Videos-->Acceleration: Use VC-1 VAAPI:Selected (de-select if you have interlaced VC-1 content)

2.4.2 OpenELEC Specific

  • System-->OpenELEC-->System: Automatic Updates:Auto
  • System-->OpenELEC-->Network: Wait for network before starting Kodi:Selected (if using a external mysql database)
  • System-->OpenELEC-->Services: Enable Bluetooth:Selected (if using Bluetooth)
  • System-->Settings-->Videos-->Acceleration: Use SW Filter for VAAPI:Selected (OE 4.x only)



3 Known issues + Fixes/Workarounds

Installation, Dual Booting, USB booting:

  • Some keyboards seem to have issues working on the ChromeOS developer boot screen (before the OS is booted), and therefore cannot be used to setup/install Kodi on a ChromeBox, or to select between OSes in a dual boot setup. The Logitech K400 is one of these, so use another keyboard to install if yours doesn't appear to be working. Bluetooth keyboards will not work due to the fact that they require the OS to be loaded in order to connect to the ChromeBox.
  • On the SeaBIOS boot screen, some users may have issues bringing up the boot menu: either the 'Press ESC for boot menu' text never appears, or it appears, but pressing [ESC] doesn't do anything; both result in the box trying (and failing) to boot the internal hard drive.
    If you see the 'Press ESC for boot menu' text but pressing it doesn't work, then the issue is your keyboard, so try using a different one.
    If you don't see the 'Press ESC for boot menu' text, then the issue is with your boot media, so try using a different USB flash drive.
  • An effort is underway on the forums to catalog which keyboards work (and which do not); the thread (which is being updated regularly) can be found here: http://forum.kodi.tv/showthread.php?tid=211797
  • Some TVs/displays are not able to show the developer boot screen due to the resolution it uses (1024x768 @ 60Hz), in which case you'll need to use a different display to complete the initial setup steps.
  • Many TVs have overscan enabled by default, which will cut off the text display of the ChromeOS shell. Be sure to set your TV to a mode which does not overscan (varies by manufacturer - often called 'just scan', 'exact' 'pixel perfect').
  • Using a passive DisplayPort-->HDMI cable/adapter is often problematic, and can cause the video output drop out after booting. Use either a straight DP cable or straight HDMI/HDMI-->DVI cable; if you have to use a DisplayPort-->HDMI adapter, be sure it is the active type.

Color Range Selection:

  • This topic is a bit of a minefield, but this post on the forums is a good read. It's for a NUC, but it applies to the ChromeBox as well. On some displays, the display and Intel video driver are not able to automatically sync up (in terms of which color space is being used), leading to incorrect black/white levels. You can download/play the following video clip to test: Grayscale Ramp test (file courtesy of avsforum.com). The correct output will show the grayscale ramp having a smooth transition (rather than stair steps) from 16-235, with solid black/white past the dots at the ends. See: correct grayscale ramp.
    Solution: add the following line to the autostart script and reboot the device:
    xrandr --output HDMI1 --set "Broadcast RGB" "Full"
    Use 'DP1' instead of 'HDMI1' if connected via the DisplayPort output. See the OpenELEC Autostart wiki page for more info.
    You may also need to select the Kodi option 'Used limited color range' under Settings-->System-->Video Output. Use the video clip and image above as a guide.
    Note: If you want to output Limited color range, you are required to do the following setting as well: Settings-->Video-->Acceleration-->Prefer VAAPI Rendering: disabled/de-selected.

No Audio and/or corrupted video on Wakeup from Suspend:

  • Some displays/AVRs don't successfully handshake when resuming from suspend, leading to no audio output and/or corrupted video output until the Chromebox is rebooted.
    Solution: If using a universal remote, such as a Harmony, ensure that you are turning off (suspending) the ChromeBox before your AVR/TV, and turning it on (resuming) after the AVR/TV.
    Solution: download/enable a script that will force the ChromeBox to reset the audio/video output on resume from suspend. Use an SSH client like Putty to connect to the ChromeBox, and execute the following commands:
    mkdir -p /storage/.config/sleep.d
    cd /storage/.config/sleep.d
    curl -L -O https://dl.dropboxusercontent.com/u/98309225/01-cbox_resume.power
    chmod +x 01-cbox_resume.power
    Then reboot the ChromeBox
    Note: If connected via the DisplayPort output, use a text editor (eg, nano) to edit the script and replace references to 'HDMI1' with 'DP1'.

Video Playback:

Remote Controls:

  • Most MCE IR receivers work properly now when connected to USB3 ports under Linux with kernel 3.16+ (older kernels will require a patch/fix); OpenELEC 4.0+ is fully up to date. The version of Ubuntu installed by the ChromeBox EZ setup script in a dual boot setup also includes an up-to-date kernel. However, some buggy MCE receivers still do not work properly (at all), as noted below in the Hardware/Remotes section.
For standalone Ubuntu (or any other distro) installs, you will need to update to a 3.16 (or later) kernel.

Power Management:

  • Suspend/resume is generally problematic with the stock firmware (dual boot setups - OpenELEC will reboot on resume), but works reliably in standalone setups running the coreboot firmware. Resume via IR remote (USB) and wake-on-lan (eg, via YATSE) work perfectly well.
  • Note: WOL only works when the ChromeBox is suspended, not fully powered off, and requires the MAC address of the box to be set (eg, in YATSE)

Windows 8 (unsupported):

  • HDMI audio doesn't work, at all, even with the proper drivers loaded. Either use the analog audio output, an external USB sound card, or run Linux.
  • Bluray disc playback doesn't work, as PowerDVD and WinDVD report that the video drivers are not supported, even though they report the hardware is capable.
  • Update: now fixed in 2015/01/29 coreboot firmware. The CPU fan will shut down at boot and not come back on unless a utility like SpeedFan is used to start it.


Linux Video Tearing:

  • Some users may experience screen tearing under the Linux desktop, or when watching video (e.g., Netflix). The fix for this is documented on the Arch Wiki, and copied here for convenience.
from a terminal/shell prompt:
sudo nano /usr/share/X11/xorg.conf.d/20-intel.conf
copy/paste the following:
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "TearFree" "true"
EndSection
then save, exit, and reboot.

High CPU at Idle:

  • When running a Linux setup, there is high idle CPU usage with some older kernels which do not fully support the Haswell platform; be sure to update to the latest kernel available (at least 3.14). On some (mostly dual boot) setups, it may also be necessary to add the following kernel boot parameters to disable the TPM: tpm_tis.force=1 tpm_tis.interrupts=0



4 Recommended Accessories / Hardware Upgrades


RAM:

The ChromeBox has two (2) 204-Pin SODIMM slots (HP models only have one), which accept 1.35V DDR3-1600 (PC3-12800) modules. Known working modules include:
  • Crucial CT25664BF160B (2GB, 1.35v/1.5v)
  • Crucial CT2CP51264BF160B (8GB [4GB x2] 1.35v/1.5v)
  • Crucial CT2KIT102464BF160B (16GB [8GB x2] 1.35v/1.5v)
  • Hynix HMT351S6CFR8C-PB (2GB, OEM)
  • HP H6Y75AA (4GB, 1.35v)

Crucial also has a list of 1.35v-only compatible modules here: http://www.crucial.com/usa/en/compatible-memory-for/ASUS/chromebox


SDD:

The ChromeBox uses a single M.2 NGFF SATA III SSD (42mm); stock is a 16GB SanDisk unit. Compatible upgrades include:
  • MyDigitalSSD MDM242-SC2-128 (128GB)
  • MyDigitalSSD MDM242-SB-064 (64GB)
  • MyDigitalSSD MDM242-SB-032 (32GB)


Remote Controls:

The ChromeBox does not have a built-in IR sensor, and must therefore use a USB IR receiver (or a Bluetooth remote). In general, any remote/receiver listed on the Kodi wiki as fully working under Linux should be fine, though some have issues when connected to USB3 ports. A Microsoft eHome compatible remote/receiver is one of the most compatible, subject to the limitations listed in the 'Known Issues' section above. Specific models tested as working include:
  • Flirc
    Flirc users need to set the "sleep detection" bit and program a wake key when setting it up, otherwise absolutely any IR signal will wake up your box from sleep.
  • HP IR receiver model 5188-1667 (MCE/eHome)
  • HP IR receiver model 5187-4593 (MCE/eHome)
  • Microsoft IR receiver model 1040 (MCE/eHome)
  • Sony IR receiver model PCVA-IR8U (MCE/eHome)
  • HP IR remote/receiver kit OVU400102/71 (MCE/eHome, includes 5187-4593 receiver)
  • Ortek IR remote/receiver kit VRC-1100 (MCE clone, receiver also works well w/Logitech Harmony remotes)
  • Rosewill RHRC-11002 remote (MCE clone, includes receiver model IR605)
  • Rosewill WMC RRC-127 remote/receiver
  • Microsoft XBOX 360 IR remote (with MCE/eHome receiver or Flirc)
  • Microsoft XBOX One IR remote (with MCE/eHome receiver or Flirc)
  • Logitech Harmony remotes (programmed as Microsoft Media Center Extender - not as a keyboard - with MCE/eHome receiver; not recommended for use with a Flirc)
  • Sony Playstation 3 (PS3) Bluetooth remote (works with built-in BT receiver; press/hold START + ENTER to pair)
  • Logitech Harmony Smart Hub (via Bluetooth, works with built-in BT receiver, see forum post here)
  • Measy RC11 Android Monitor Wireless Keyboard Air Mouse Remote Controller With Gyroscope (cannot wake up Chromebox but works otherwise nicely, with keys as well as with mouse pointer at both OpenELEC and ChromeOS)
  • Amazon FireTV / Fire Stick remotes (Bluetooth)
NOTE: If you need to re-map remote buttons, you can use the Keymap Editor Add-on to do so.
Currently non-working:
  • HP IR receiver model 5070-2584 (MCE/eHome)
  • AVS Gear HA-IR01SV (MCE/eHome)
  • All Topseed manufactured MCE IR receivers


USB Audio Devices:

As the ChromeBox only has HDMI and analog audio outputs, if you need SPDIF, then either a converter or external/USB device must be used. The following devices have been tested/confirmed working:



5 Troubleshooting

5.1 Dual Booting

The most common issue with dual boot setups is being stuck on the black SeaBIOS boot screen, with the "booting from hard disk" text displayed. 99% of the time, this is due to not having performed a factory reset using the recovery media, as listed in the Device Prep section above. Simply perform the factory reset, then re-run the dual boot setup using the script as before.

5.2 OpenELEC

5.2.1 Install Media Creation

If you're looking to run a standalone setup, and the install media created by the script doesn't work (or you forget to create it before rebooting), then you can simply download the latest stable version (or beta/RC if you'd like) from OpenELEC's website here. The ChromeBox runs the 'Generic x86-64' version of OpenELEC, and it's recommended that you download the disk image version, and create the install media, as per the instructions on the OpenELEC wiki.


5.2.2 Misc

If the system isn't shutdown cleanly, sometimes a filesystem check (fsck) will be automatically performed. In some cases, the automatic repair is unsuccessful, and an error will show:

***Error in check_disks: could not repair filesystem, dropping to debug shell, try to run 'fsck' manually: ***
### Starting debugging shell... type exit to quit ###
sh: can't access tty; job control turned off
#_


In this case, simply run fsck manually as instructed, using the following commands, hitting [enter] after each:

For a standalone setup:

fsck /dev/sda1
fsck /dev/sda2


For a dual-boot setup:

fsck /dev/sda6
fsck /dev/sda7


After the fsck is run, type 'reboot' then hit [enter] and the system should boot normally.

6 Firmware/BIOS Updating

The ChromeBox's firmware consists of two main parts: the firmware itself (coreboot), and the Legacy BIOS (SeaBIOS). Users running a dual-boot configuration only need be concerned with updating the Legacy BIOS portion. Users running a standalone setup should update the custom coreboot firmware only, as it already contains an updated SeaBIOS payload, which is not able to be updated separately.

6.1 Updating the Legacy BIOS

Dual-boot users should simply boot to ChromeOS and re-download/re-run the setup script, choosing the Update Legacy BIOS option under the Dual Boot heading.

6.2 Updating Coreboot

Standalone users should also re-download/re-run the setup script, but instead choosing the coreboot firmware install/update option under the Standalone heading. As of v3.0, the script can be run under any version of Linux with a full bash shell. As OpenELEC does not have a full bash shell, OE users will need to use the standalone firmware update script, as described in this forum post.

6.3 Restoring the Stock Firmware

If you have used the ChromeBox Setup Script's Standalone setup option, or otherwise manually updated the ChromeBox's firmware with a custom coreboot build, it is necessary to restore the stock firmware before performing a factory reset to re-load ChromeOS.

In order to do this, we will create a bootable USB stick with ChromiumOS (the open-source version of ChromeOS) and use that to re-flash the stock firmware, which you backed up before flashing the Coreboot firmware. If you didn't make a backup, we can use a copy extracted from Google's recovery image, but an actual backup is preferred.

  1. Create ChromiumOS USB Stick
    • Download the latest AMD64OS daily build from http://arnoldthebat.co.uk/wordpress/chromium-os/. Be sure it's the 64-bit (AMD64OS) version, and the image version (.img.7z) and not the virtual machine version (.vdi.7z). Example: Camd64OS-20140527010101.img.7z
    • Follow the instructions at the link above to extract and copy the image onto a USB disk. You will need at least a 4GB drive, and the contents of it will be erased. Do NOT use the same USB stick that you used for your firmware backup
  2. Get a ChromiumOS Shell Prompt
    • Connect the ChromiumOS USB stick to the ChromeBox, power on, and select the USB stick from the boot menu. Boot into ChromiumOS
    • Open a shell the same way as in ChromeOS: [CTRL]-[ALT]-[F2] and login as user 'chronos' with password 'password'
  3. Copy firmware backup file
    • If you have your firmware backup on USB, connect it now, then run the following commands from the shell prompt
      mkdir /tmp/usb
      sudo mount /dev/sdc /tmp/usb (If this fails, use /dev/sdc1 instead of /dev/sdc)
      cp /tmp/usb/stock-firmware.rom ./
      sudo umount /tmp/usb
    • If you don't have a firmware backup, then run the following command to download one extracted from the recovery image
      (Asus) curl -L -o stock-firmware.rom https://db.tt/sLQL9i1p
      ( HP ) curl -L -o stock-firmware.rom https://db.tt/8NmzlrZ6
      (Acer) curl -L -o stock-firmware.rom https://db.tt/Nh5EeEti
      (Dell) curl -L -o stock-firmware.rom https://db.tt/IXLtQ097
  4. Restore stock firmware
    • After completing the above, then run the following commands from the shell prompt
      sudo flashrom -w stock-firmware.rom
    • Assuming it is successful, then:
      sudo poweroff

You can now remove the ChromiumOS USB drive (and firmware backup USB drive). Proceed to Perform_a_Factory_Reset above to restore/reload ChromeOS.