October 9, 2016

Running Windows & Linux on a Dell Chromebook 13

Below is a post I made to Reddit on September 17, 2016 to thank the people involved in my success in running Windows 10 Pro and Linux Mint 18 (and later GalliumOS 2.0 and CloudReady) on my Dell Chromebook 13 (i3/4GB-Model). My collection of notes also served as a way to give back to the community and provide a handy reference.

Big Thanks to Coolstar, MrChromebox, and ReddestDream with UEFI Firmware on My Dell Chromebook 13 Running with Windows 10 Pro and Linux Mint 18 self.chrultrabook

I wanted to give a big thank you very much to Coolstar, MrChromebox, and ReddestDream (as well as everyone else in the community)!

I’ve upgraded my Dell Chromebook 13’s (i3/4GB) SSD to a 256 GB MyDigitial SuperBoot Drive and flashed the UEFI firmware (and its multiple updates).

I’m now dual booting Windows 10 Pro and Linux Mint 18. I’m hoping to eventually triple boot by getting macOS (OS X) installed and fully functional when the accelerated graphics and trackpad drivers are stable/available, as well as replacing the Intel WiFi/Bluetooth module with a known good Broadcom one.

For anyone else’s benefit, I’ve pasted my notes below that describes some of the issues I’ve experienced and links I’ve found that helped me resolve most of them.

Thank you again!


Installed CoolStar’s and later MrChromebox’s UEFI Firmware

cd ~; curl -L -O https://coolstar.org/chromebook/setup-firmware.sh; sudo bash setup-firmware.sh

cd; curl -L -O http://mrchromebox.tech/firmware-util.sh && sudo bash firmware-util.sh

  • Commands to flash firmware with original firmware to restore Chromebook:

flashrom --wp-disable
flashrom -w filename.rom

Installed Windows 10 Pro

Installed Linux Mint 18

Because it is available via PPA, installing Grub Customizer 4.0.6 on the listed Ubuntu, Linux Mint And Elementary OS systems is easy. All you have to do is add the ppa to your system, update the local repository index and install the grub-customizer package. Like this:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

Optional, to remove grub-customizer, do:

sudo apt-get remove grub-customizer

Or, if you want to uninstall grub-customizer, disable the recently added PPA and downgrade all the packages that got updated via the PPA, do:

sudo apt-get install ppa-purge
sudo ppa-purge ppa:danielrichter2007/grub-customizer

Fixed display backlight brightness controls by following:

opened terminal…

inspiron@DELL-INSPIRON-3543 ~ $ ls /sys/class/backlight/
acpi_video0 intel_backlight
inspiron@DELL-INSPIRON-3543 ~ $

to confirm graphics card is Intel

then I created following configuration file, after checking it does not exist:

ls /usr/share/X11/xorg.conf.d # file does not exist

so create new file…

sudo touch /usr/share/X11/xorg.conf.d/20-intel.conf

then I edited this file using gedit … (is it ok to use gedit?)

sudo gedit /usr/share/X11/xorg.conf.d/20-intel.conf

Added the following lines to this file:

Section "Device"
Identifier "card0"
Driver "intel"
Option "Backlight" "intel_backlight"
BusID "PCI:0:2:0"
EndSection

Saved it and reboot.

Updated Intel drivers by following:

sudo apt-get install --install-recommends xserver-xorg-lts-utopic libqt5gui5 libgles1-mesa-lts-utopic libgles2-mesa-lts-utopic libgl1-mesa-glx-lts-utopic libgl1-mesa-glx-lts-utopic:i386 libglapi-mesa-lts-utopic:i386 libegl1-mesa-drivers-lts-utopic

Also installed Chrome for Linux by following the same link above:

wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
sudo apt-get update
sudo apt-get install google-chrome-stable

WiFi Issues

sudo systemctl restart network-manager.service

Re: Mint 18, Wilreles issues (again), booting from “suspend” mode
Postby JeremyB » Wed Aug 24, 2016 5:36 am

You may have to replace gedit with xed

sudo -H gedit /etc/systemd/system/root-resume.service

Put the following in the file

[Unit]
Description=Turn off wlan power management
After=suspend.target

[Service]
Type=simple
ExecStartPre= /bin/sleep 10
ExecStart= /sbin/iwconfig wlp4s1 power off

[Install]
WantedBy=suspend.target

Save and exit text editor

sudo systemctl enable root-resume

It should be fine

Trackpad driver information

Touchpad

The Pixel 2 has an ATMEL touchpad. By default, Ubuntu will be using a Synaptics driver for this device. The linux-samus repo also contains a script with some improvements for the touchpad.

However, neither of these help as much as @hugegreenbug’s xf86-input-cmt drivers which were ported from ChromiumOS. There is a PPA; unfortunately, for 16.04 Xenial, we’re gonna have to roll our sleeves up and compile it.

xf86-input-cmt depends on two other packages, libevdev and libgestures. We’ll have to compile both of those as well. Make sure that you’ve installed sudo apt-get install build-essential first!

Compile libevdevc

This one is probably the simplest, in terms of dependencies.

git clone https://github.com/hugegreenbug/libevdevc.git
cd libevdevc

make
sudo make install

Compile libgestures

This library will require you to install some packages first.

sudo apt-get install libjsoncpp-dev libglib2.0-dev

git clone https://github.com/hugegreenbug/libgestures.git
cd libgestures

make
sudo make install

Compile xf86-input-cmt

Similarly, xf86-input-cmt has a unique dependency, this time on the X11 xorg_lib.

sudo apt-get install xorg-dev libx11-dev

git clone https://github.com/hugegreenbug/xf86-input-cmt.git
cd xf86-input-cmt

./configure --prefix=/usr
make
sudo make install

Disable Synaptics Driver

This step is perhaps the most important. If Synaptics driver is enabled, our new driver code won’t have any effect. To disable the Synaptics drivers, we want to rename the 50-synaptics.conf to anything that doesn’t end in .conf. This file is located in /usr/share/X11/xorg.conf.d. You can also simply delete the .conf file. Your call.

Copy New Config Files

Now we need to copy over the new device configuration files for the xf86-input-cmt driver. These files come in the xf86-input-cmt/xorg-conf folder. We are going to be installing them the same /usr/share/X11/xorg.conf.d folder as where the Synaptics driver was. Assuming you are already in that destination directory, the installation instructions would be something like:

cp /path/to/xf86-input-cmt/xorg-conf/20-mouse.conf 20-mouse.conf
cp /path/to/xf86-input-cmt/xorg-conf/40-touchpad.conf 40-touchpad.conf
cp /path/to/xf86-input-cmt/xorg-conf/50-touchpad-cmt-samus.conf 50-touchpad.conf

Now, after a reboot, Ubuntu should begin using the provided driver instead of Synaptics. You’ll notice a reduction in unresponsive behaviour and unwanted cursor jumps.

Section "InputClass"
Identifier "touchpad lulu synaptics"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
MatchProduct "SYNA"
Option "Integrated Touchpad" "1"
Option "Touchpad Stack Version" "2"
# Pressure calibration results:
# Probe Diameter Measured Expected Calibrated
# 0 3.90 39.31 11.95 7.78
# 1 5.70 40.03 25.52 10.43
# 2 7.70 50.45 46.57 48.76
# 3 9.90 58.97 76.98 80.13
# 4 11.70 70.19 107.51 121.41
# 5 13.90 80.38 151.75 158.90
# 6 17.80 120.61 248.85 306.98
Option "Pressure Calibration Offset" "-136.896426947"
Option "Pressure Calibration Slope" "3.68015979309"
Option "Palm Pressure" "300.0"
Option "Max Allowed Pressure Change Per Sec" "1250.0"
Option "Max Hysteresis Pressure Per Sec" "1000.0"
EndSection

Package Details: xf86-input-cmt-setup 1-2

Resources for getting the keyboard backlight to work in Linux

Chromebook Keyboard backlight driver for Linux 3.x. / 4.1.x

Since the newest Linux Kernel(3.12) ships with Chromebook Pixel support, both touchscreen and touchpad all work fine, but kernel doesn’t include the keyboard backlight driver. So I pick the driver form https://github.com/brocktice/pixel_linux and make it standalone, easy to use.

Thanks to brocktice DaveM

Requirements

Google Chromebook Pixel, Toshiba Chromebook 2 (2015) (Gandof) or Dell Chromebook 13 (Lulu) with Linux installed.
Build toolchains.
Known issue

If we register the keyboard backlight device as backlight to Linux system, Gnome will be confused with LCD backlight and Keyboard backlight, In system setting panel, display brightness adjust will be operated on Keyboard Backlight. So, we register it as leds devices to system to make Gnome happy.

How to install

Clone the code

if you want the keyboard backlight works like an backlight then edit pixel_kb_backlight.c

#ifdef KB_BACKLIGHT
#define DEVICE_NAME "chromeos-keyboard-backlight"
#else
#define DEVICE_NAME "chromeos-keyboard-leds"
#endif

Change these and the driver will act as backlight or leds.

Build with:

make

You will get 3 drivers: chromeos_keyboard_bl.ko #backlight class driver chromeos_keyboard_leds.ko #leds class driver chromebook_kb_backlight.ko #keyboard backlight device driver

Now, you can load the drivers:

if you choose backlight

sudo insmod chromeos_keyboard_bl.ko
sudo insmod chromebook_kb_backlight.ko

if you choose leds

sudo insmod chromeos_keyboard_leds.ko
sudo insmod chromebook_kb_backlight.ko

OK, check whether the drivers load successfully:

if you choose backlight

ls /sys/class/backlight

if you choose leds

ls /sys/class/leds

If you can see keyboard_backlight or chromeos::kbd_backlight from ls output, It works!

How to use

I have put a helper shell script to adjust the backlight level You need edit the script if you choose backlight, to use the correct path

# turn on the backlight
sudo ./keyboard_brightness.sh on

#turn off the backlight
sudo ./keyboard_brightness.sh off

#turn up
sudo ./keyboard_brightness.sh up

#turn down
sudo ./keyboard_brightness.sh down

For leds as sample:

Make it load automatically while system boot

I install Ubuntu 13.10 with Linux kernel 3.12.0-031200-generic, so I do the following:

#copy our drivers to the kernel's modules dir
sudo cp chromeos_keyboard_leds.ko /lib/modules/3.12.0-031200-generic/
sudo cp chromebook_kb_backlight.ko /lib/modules/3.12.0-031200-generic/

#tell system we have new modules
sudo depmod -a
sudo modprobe module

then edit /etc/modules and add two lines:

chromeos_keyboard_leds
chromebook_kb_backlight

Just reboot the laptop, the keyboard backlight driver will load automatically.

Enjoy!

Resources for reassigning media keys and regaining Chromebook keyboard functionality:

Remap Volume and Brightness Keys

The top row of keys all have a specific purpose and directly map to F1, F2, etc on a regular keyboard, they are merely obscured here. Once your Linux environment is installed some of these keys won’t work, namely the volume and screen brightness controls. To fix this open the keyboard application and select the Application Shortcuts tab. Add a new command for each key you want to map as shown below then choose the corresponding key.

amixer set Master 10%+ (Volume up key/ F10)
amixer set Master 10%- (Volume down key/ F9)
amixer set Master toggle (mute key/ F8)
brightness down (small sun key/ F6)
brightness up (large sun key/ F7)

Resources for Logitech Trackball customization, since I use a Logitech M570 Wireless Trackball

Power management

General application information

%d bloggers like this: