Installing Debian Wheezy (7.0) Linux on the Chromebook Pixel

UPDATE 2013-04-29

I have created a github for this here. If you have patches please submit pull requests!

UPDATE: I continue to update the kernel as more fixes make it into git. You can check all of the Pixel-related files I’m posting in this Drive folder.

UPDATE 2013-03-27: New kernel with fix for the audio pops, see my G+ post from today.

The Chromebook Pixel is a very nice (if expensive) piece of hardware, designed to run Chrome OS, which is a variant of Linux. Since being noted as favored by Linus Torvalds, inventor and lead maintainer of Linux, support for the various Pixel hardware components has rapidly been added to the kernel git repository.

Not everything is working great just yet, but all of the essential features are working. Here’s a walkthrough that I hope will be sufficient, based almost entirely on other people’s work and howtos. I’ll link to those where I can. Several Google software engineers have been helpful on Google+, and a bunch of work has been done by Linux kernel maintainers.

This was my starting point: DaveM’s howto in his Linux git repo

  1. Get a chromebook pixel
  2. Enable developer mode
  3. Download the Debian Wheezy netinstall image (yes, it supports the wifi in the installer) (here)
  4. Boot from the installer (Ctrl-L at boot screen, escape when it says to press escape to choose a boot device, choose your USB drive with the Debian installer)
  5. Install as normal to the internal SSD. I used LVM/encryption and it worked just fine. When you reboot, pull the USB drive and it should boot from the internal SSD.
  6. Once booted, the trackpad will not work. A USB mouse will work just great. Download and install my build of the 3.9-rc1 kernel (.deb files and config, full source) built from Linus’ merging of patches and configured with help from Benson Leung
  7. To your /etc/modules add:
    ath9k
    atmel_mxt_ts
    chromeos_laptop
    tpm_tis force=1 interrupts=0
    

    Those are the modules for the wifi, the touchpad (both the atmel and chromeos_laptop), and the tpm chip, that to keep it from rebooting when you try to suspend (thanks Duncan Laurie!).

  8. This is no longer necessary with the updated downloads. To your /etc/rc.local, above exit 0, add echo TSCR > /proc/acpi/wakeup. This is a hack to keep it from waking right up after going to sleep (thanks, Benson Leung!)
  9. This appears not to be necessary, actually Create a file called 01i8042 in /etc/pm/sleep.d to properly sleep and wake the keyboard on suspend. It should have this as its contents.
    #!/bin/sh
    
    ###############################################################################
    # Pm-utils script to unbind i8042 on hibernate/suspend and
    # bind it on thaw/resume.
    #
    # Copyright: Copyright (c) 2009 Nicolay Doytchev
    # License:   GPL-3
    ###############################################################################
    
    ###############################################################################
    # INSTALL:
    #   1. Copy this script to /etc/pm/sleep.d/
    #   2. Make it executable:
    #       sudo chmod +x /etc/pm/sleep.d/01i8042
    #
    # UNINSTALL:
    #   1. Delete the script from /etc/pm/sleep.d/
    #       sudo rm /etc/pm/sleep.d/01i8042
    ###############################################################################
    
    case "$1" in
        hibernate|suspend)
            echo -n "i8042" > /sys/bus/platform/drivers/i8042/unbind
        ;;
        thaw|resume)
            echo -n "i8042" > /sys/bus/platform/drivers/i8042/bind
        ;;
    esac
    

    Make it executable. Found this here

  10. You may need to install the firmware-atheros package for the bluetooth to work, which may require adding non-free to the end of the deb lines in /etc/apt/sources.list

I think that’s it, but it’s always hard to correctly recreate these things after the fact without redoing it (and I’ve spent enough time on this already). Let me know if you have any problems or improvements, or go comment on Linus’ G+ post about it.

I want to add a special thank-you to Linus Torvalds for posting about his updates on Google+.

EDIT: More stuff
First, if you hate tap-to-click like me, here’s an xorg.conf with the correct dpi setup and multi-finger click.

Here is a folder containing all the relevant files and info (plus my other configs I decide to upload) discussed in this post and the comments.

Also, FYI the keyboard backlight does not come on after suspend right now.

EDIT 2013-03-11 20:33 MDT: By the way, if you run i3 or some other nerdy window manager like me, and you forgot how to make Debian sleep when the lid is closed, you just need to uncomment the appropriate line in /etc/default/acpi-support.

14 thoughts on “Installing Debian Wheezy (7.0) Linux on the Chromebook Pixel

  1. Brock Tice Post author

    Fabian: I uploaded the output of those files here. I have an encrypted SDXC in the SD card slot, which you will see there as sdb.

  2. Fabian Rodriguez

    Thank you! Screenshots of your Debian desktop, after login, maybe open LibreOffice and Iceweasel, and any HD screencap/movie – I think those would be enough to highlight the (perceived or not) huge difference in resolution with other lower resolution setups.

  3. defsdoor

    I’m going to give this a bash tomorrow (foolishly left my power supply at work) but with ubuntu instead of Wheezy.

    Anyone envisage any potential problems ?

  4. Brock Tice Post author

    No, although I believe people have installed Linux on them. It’s going to be different because it’s different hardware. I’m not familiar with this process on that hardware.

  5. B. A.

    Hello,

    Thank you for your post, I wanted to contribute my (modest) extraction of the keyboard backlight driver from ‘kernel-next.git’. I also included the “F10 as sysrq” patch.

    Here are the original commits, for the bl driver:

    http://git.chromium.org/gitweb/?p=chromiumos/third_party/kernel-next.git;a=commit;h=766c53f1a93690a1bf92518ba8d72a9ecb1d7133
    http://git.chromium.org/gitweb/?p=chromiumos/third_party/kernel-next.git;a=commit;h=bc415cad8e7671c9d2fc15560743f38768cd1e37
    http://git.chromium.org/gitweb/?p=chromiumos/third_party/kernel-next.git;a=commit;h=c656499589535df4b780b08558afbde2a431ec94
    http://git.chromium.org/gitweb/?p=chromiumos/third_party/kernel-next.git;a=commit;h=0e43db5ed024e4e221a4a28595d12cb1f1d07ec6

    Sysrq:
    http://git.chromium.org/gitweb/?p=chromiumos/third_party/kernel-next.git;a=commit;h=a54f01c7bffd0a240502b386ed161ef6f7182f84

    Diff for 3.9-rc6:
    http://pastebin.com/hXpcZCtR

    Btw, I have the tpm_tis insmoded as per you instructions, but I can only sleep once. That is, on a given powercycle, I can close the lid once, the pixel sleeps, awakes and sleeps again if I close the lid again, only it reboots on wakeup…

  6. B. A.

    Update :
    The leds-chromeos-backlight driver doesn’t work on my side.
    But acpi_call does, c.f.
    https://github.com/mkottman/acpi_call
    sudo bash -c ‘echo “\_SB.KBLT.KBCM 0x00” > /proc/acpi/call’
    sudo bash -c ‘echo “\_SB.KBLT.KBCM 0x64” > /proc/acpi/call’

  7. Nicolas

    Very cool stuff!

    I’d like to build the same kernel but with some modifications. Could you perhaps point me to a guide you used (if any) for building a kernel into a nice debian package?

    Would be much appreciate 🙂

    Thanks,
    Nicolas

  8. N

    Have you had problems accessing the keyboard in legacy boot mode? Mine tends to only work once per powerwash at the legacy boot Seabios screen, which is a problem now that I have wiped Chrome OS and can no longer powerwash. I can’t press escape to access the Seabios boot menu and if I automatically boot into a liveUSB environment, the keyboard doesn’t work there either.

  9. Brock Tice Post author

    It’s something to do with the drivers, I had this problem at one point. I’m sorry, I don’t remember what fixed it.

  10. Brock Tice Post author

    For those of you subscribed to this post, please check out the new github repo I created for this project here. Please submit patches as pull requests!

Comments are closed.