Dell Chromebook 11 running KUbuntu

A Linux distribution for Chromebooks based on XUbuntu exists, you can check out GalliumOS. But you might want more upstream distributions. Since Linux 4.15 (Ubuntu > 18.04), the hardware has been supported officially, but some stuff needs post-installation configuration.

I have tested XUbuntu, Ubuntu, and KUbuntu and I end up using KUbuntu as my daily driver. The Intel OpenGL driver makes Plasma desktop far more fluid than Gnome Shell for some reasons.

This article describes some post-installation specific configuration.

WARNING: THIS METHOD OF HACKING IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND. If you lose your data, brick your device, any other damage or anything else happens (e.g. your cat eats your dog), it is YOUR PROBLEM and YOUR RESPONSIBILITY. Your device warranty will be void and it will be impossible to go back.

  • MrChromebox.tech: custom UEFI coreboot firmware able to run Windows/Linux natively. But won’t boot the preinstall Chrome OS directly.
  • Chrome OS devices on ArchWiki: I don’t recommend using SeaBIOS if you don’t want to keep ChromeOS since MrChromebox made a FULL UEFI ROM (see above).

Chromebook keyboard layout

Chromebooks have a special keyboard layout optimized for web browsing.

X11 does include a specific layout for Chromebook keyboards. To activate it, run :

1
localectl set-x11-keymap fr chromebook

Change fr (french layout) depending on your keyboard layout.

Right alt will behave as a modifier to access F1 to F10, PageUp, PageDown, CapsLock, Delete

Touchpad waking up from suspend

When the lid is closed, the screen can push the touchpad and wake the device up.

To check if you are concerned with this issue, execute

1
cat /proc/acpi/wakeup

If the line starting with TPAD reads enabled then your device will be wakened up with a touchpad click.

Disabling touchpad waking up from suspend

The method consists in printing TPAD in /proc/acpi/wakeup every boot.

One ArchLinux you can follow the ChromeOS ArchWiki article.

On Ubuntu/Debian-based distributions, this can be done with the following steps.

  • Make a script called acpi_wakeup containing
    1
    2
    
    #!/bin/sh
    printf "TPAD" > /proc/acpi/wakeup
    
  • Copy the script to system services directory
    1
    
    sudo cp acpi_wakeup /etc/init.d/acpi_wakeup
    
  • Make it executable
    1
    
    sudo chmod 755 /etc/init.d/acpi_wakeup
    
  • Tell Ubuntu to start it at boot
    1
    
    sudo update-rc.d acpi_wakeup defaults
    

Audio: Alsa Use Case Manager definitions

This section is based on this ArchLinux bug thread.

The Intel Atom Processor Audio Controller chtmax98090 works natively under Linux 4.15 but it isn’t properly configured out of the box. This results in no correct mixer control making sound unusable.

To make audio works you can use plbossart’s Alsa Use Case Manager configuration :

  • Clone locally the repository (you may need to install git versioning tool)
    1
    
    git clone https://github.com/plbossart/UCM.git
    
  • Copy the UCM (Use Case Manager) definitions
    1
    
    sudo cp -rv UCM/chtmax98090 /usr/share/alsa/ucm
    
  • Kill and reinit audio servers
    1
    2
    3
    4
    
    alsactl kill quit
    alsactl init
    pulseaudio --kill
    pulseaudio --start
    

Now audio should work fine.

Power button

You may want to disable power button due to the horrible placement. Please refer to your desktop environment configuration.

Bonus: Use the LED with a Python script

Dell ships the Chromebook with an integrated activity RGB led.

You can talk to the microcontroller driving the led with the following Python script adapted from Can Bülbül’s candy-led project.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from random import randrange
import sys
from time import sleep

# Available colors
colors = {
    'red': 0x01,
    'green': 0x02,
    'blue': 0x03,
    'yellow': 0x04,
    'magenta': 0x05,
    'cyan': 0x06,
    'white': 0x07,
    'black': 0x08
}


def changeColor(color='white'):
    """ Change Dell Chromebook 11 led color """

    # Checksum function
    chsum = lambda b0, b1, b3: (21 * b0**2 + 19 * b1 - 3 * b3) % 255

    # Build command
    cmd = bytearray.fromhex('ff' * 64)
    cmd[0] = 0x11
    cmd[1] = colors[color]
    cmd[3] = randrange(255)
    cmd[2] = chsum(cmd[0], cmd[1], cmd[3])

    # Send command
    try:
        with open('/dev/hidraw0', 'wb') as d:
            d.write(cmd)
    except IOError:
        print("Can't access " + devpath)
        raise


for c in colors.keys():
    changeColor(c)
    sleep(0.1)

changeColor('black')

To be able to change led color as an user in group plugdev, you may add an udev rule by writting in /etc/udev/rules.d/40-candy-led.rules:

ATTRS{idVendor}==\"04d8\",ATTRS{idProduct}==\"0b28\",MODE=\"0660\",GROUP=\"plugdev\"