PNG chomeos logo


JPG Google Chrome Logo

TABLE OF CONTENTS


CHROMEOS/CHROMEBOOKS INTRO

Here are some excellent resources regarding ChromeOS devices and the use of ChromeOS:

LINUX ON A CHROME DEVICE

JPG chrome logoJPG linux logo

There are three ways that Linux can be run on a Chromebook/Chromebox (all of which depend on the ability to enter 'Developer Mode'):
  • In parallel with a running ChromeOS session using crouton.  All (?) Chrome devices should be able to use this method.
  • In a dual-boot configuration with ChromeOS, where either ChromeOS is booted or the installed Linux distro is booted according to one's choice.  The Linux install can either live inside the hard-drive/SSD containing ChromeOS, or on a separate USB storage device.  This method requires legacy SeaBIOS functionality, which some Chrome devices either naturally provide, or can be added with 3rd-party firmware, or not at all.
  • In a solo stand-alone OS replacement of the entire ChromeOS device, where the ChromeOS has been completely removed.  SeaBIOS is required for this as well, and is very similar to the 2nd option.  This will not be discussed on this page.

ENABLING DEVELOPER MODE ON ACER C720 CHROMEBOOK

PNG chromeos boot process
[Chromebox Boot Process by Matt Devo]

By design, all ChromeOS devices are secured and locked to only run verified ChromeOS -- with no choice to run a regular Linux distro at all.

In order to enable a Chromebook/Chromebox to ultimately dual-boot Linux in a separate partition, or run it in parallel with ChromeOS via 'crouton', it is necessary to enable 'Developer Mode' -- which enables the 'superuser' shell inside ChromeOS.  Note that by doing so the device will be completely reset -- erasing the hard drive and all user settings/customization/files completely. To enable 'Developer Mode', enter the following key sequence while powered off:
Escape-Refresh-PowerOn (while powered off)
Ctrl-d (after the recovery message comes up)

This will initiate the process of placing the Chromebook into Developer Mode, which will take about 20 minutes to complete.  From that point on, the device will always be vulnerable to reset back to a normal state (and erasing all  if the space bar is pressed while booting -- so beware!  More information on changing to 'developer mode':

After activating 'Developer Mode' on a Chromebook, you now have the ability to enter the 'superuser' shell in order to make even further changes to the way it operates (including installing/running Linux).  There are two ways to do this:
  • At the ChromeOS welcome screen, before configuration or logging into your account, press the following key sequences:

Ctrl-Alt-ForwardArrow     [sign on as 'chronos' (no password required)]

or

  • After the ChromeOS welcome screen, after configuration or logging into your account:

Ctrl-Alt-t     [type 'shell' to automatically sign on as 'chronos']

One way to reduce or eliminate the risk of leaving 'developer mode' unintentionally is to make some firmware setting changes.  These need to be made while the C720 'write protect screw' (#7) is removed.  Refer to this photo for the location of this special screw:
JPG acer c720p inside
While in the process of tweaking/testing the Chromebook, as a minimum the 'battery lock screw' (#6) needs to be used to attach the bottom cover.  More diagrams/instructions can be found here:
Enter either one of the following while in the 'superuser' shell:
  • To reduce the boot delay from 30s to 1s:
sudo /usr/share/vboot/bin/set_gbb_flags.sh 0x1	
  • To permanently set 'Developer Mode':
sudo /usr/share/vboot/bin/set_gbb_flags.sh 0x8	
  • For both options:
sudo /usr/share/vboot/bin/set_gbb_flags.sh 0x9
When the adjustments to the firmware are completed and tested successfully, the 'write protect screw' should be replaced, and all the original screws used to attach the bottom cover can again be used to close the Chromebook.  Removal of the 'write protect screw' should never be required again -- unless further similar firmware changes are required. 

NOTE: Another option that you might want to consider while the 'write protect screw' is removed is the replacement of the 'Developer Mode' warning screen with a simple lowkey white-text-on-black-screen.  For more information, see here.

ENABLING USB & LEGACY BOOT MODE ON ACER C720 CHROMEBOOK

In preparation for setting up an Acer C720 for dual-booting a Linux distro of your choice (in my own, Linux Mint Debian Edition), 'SeaBIOS' needs to be activated within the 'superuser' shell.  This ability is not present on all Chromebooks/Chromeboxes -- fortunately, the Acer C720 firmware includes this.  Other Chrome devices can be modified to do so, while yet others cannot (or not yet) do so.  See the following for more information on models that do have/can have/do not have 'SeaBIOS' capability:
The following settings need to made in a terminal session, while signed on as 'chronos' (see above for instructions):
sudo crossystem dev_boot_usb=1
sudo crossystem dev_boot_legacy=1
After making these changes, you should now be able to press Ctrl-l when powering up -- after the 'Developer Mode' warning screen appears -- to boot using SeaBIOS i.e. if a bootable 'live' Linux USB stick/drive is present at this point, it will show up as an option on a legacy-mode bootup list.  NOTE: other similar 'crossystem' commands can be used to set SeaBIOS as the default boot method -- see How to make the legacy SeaBIOS firmware slot the default on a Haswell/Broadwell based Chromebook – johnlewis.ie for more information. 

NOTE: Subsequent removal of the 'write protect screw' on the Acer C720 appears to set these USB/legacy-boot flags back to their '0' defaults, so you may need to repeat these commands if you do so.

For information on enabling SeaBIOS can be found here:

DEBIAN/CINNAMON LINUX ON ACER C720 CHROMEBOOK VIA CROUTON

JPG debian
                    cinnamon desktop

My favorite Linux distro is Linux Mint Debian Edition, otherwise known as LMDE.  I had managed to install this distro on my Acer C720P Chromebook in a separate partition of the SSD drive, in true 'dual boot' fashion, and I loved it!  However, I had not seriously considered the hybrid crouton method, since LMDE/Cinnamon was not supported.  In fact (as of this writing) the 'cinnamon' desktop option had once been present as a crouton install option, but had been removed (!), leaving only 'Debian' as a partial solution. 

I decided to give Debian/Cinnamon another try, after reading Tenn1518's github crouton-cinnamon page.  Below is my own version based on this information.

Useful Links:
NOTE: Your Chromebook (in my case an Acer C720P) must be been switched to developer mode before crouton can be installed (see above).

NOTE: You might experience loss of keyboard and/or mouse during the install.  Be prepared by having a spare USB keyboard/mouse handy if this happens to you!

Installing Crouton

To install a Debian/Cinnamon-flavored crouton:

1) Create a 'crosh' terminal window tab:
Ctrl-Alt-t
2) Enter 'shell' mode:
shell
3) Navigate into 'Downloads' directory, where the script lives:
cd ~/Downloads
4a) Download crouton from web browser into 'Downloads' directory:
https://github.com/dnschneid/crouton
4b) Or download crouton from command line in shell using 'wget':
wget https://github.com/dnschneid/crouton/raw/master/installer/crouton
5a) Install crouton:
sudo sh ~/Downloads/crouton -r jessie -t keyboard,cli-extra,extension,xiwi,xorg
By default, the location to which this 'jessie' chroots for crouton will be installed is:
/mnt/stateful_partition/crouton/chroots/jessie
If you would prefer to run crouton on an external device instead, the following extra steps and variations are required/recommended:

5b) Format a partition on an external device (SD card, USB stick, USB drive, etc.) as 'ext4' with the label 'CROUTON'.  Then install crouton to this external device:
sudo sh ~/Downloads/crouton -r jessie -t keyboard,cli-extra,extension,xiwi,xorg -p /media/removable/CROUTON/
6) Enter newly-created chroot:
sudo enter-chroot
or
sudo enter-chroot -c /media/removable/CROUTON/chroots/ (if installed externally as above)
[Here is my log from this step]

Later, to see what environments have been installed:
sudo edit-chroot -a
or
sudo edit-chroot -a -c /media/removable/CROUTON/chroots/ (if installed externally as above)

Installing Cinnamon

7) Get cinnamon stuff:
sudo apt-get install software-properties-common
sudo apt-get update
sudo apt-get install cinnamon
cd ~/Downloads
sudo apt-get install git
git clone https://github.com/Tenn1518/crouton-cinnamon
cd crouton-cinnamon
cp Linux/xinitrc ~/.xinitrc
8) Exit the chroot back into the shell and complete Cinnamon setup:
exit
cd ~/Downloads/crouton-cinnamon
sudo cp "Chrome OS/startcinnamon" /usr/local/bin/startcinnamon

9) Also install crouton integration extension for Chrome browser:
Crouton Integration - Chrome Web Store [direct link, since unlisted]
[Here is my log from this step]

Installing Extra Stuff

At this point, you have a good basic installation for running Debian/Cinnamon, but it is useful to add some good apps at this point to bring this closer to a regular Linux Mint Debian Edition installation:

  • Go back into the chroot and install some stuff from the Mint repositories:
sudo enter-chroot
sudo vi /etc/apt/sources.list
add into this the following repository entry:

deb http://packages.linuxmint.com betsy main
deb http://packages.linuxmint.com debian import
Update the repository list and fix the GPG key for the Mint repository:
sudo apt update
sudo gpg --keyserver pgp.mit.edu --recv-keys 3EE67F3D0FF405B2 sudo gpg --export 3EE67F3D0FF405B2 > 3EE67F3D0FF405B2.gpg sudo apt-key add ./3EE67F3D0FF405B2.gpg sudo rm ./3EE67F3D0FF405B2.gpg
Get some nicer wallpaper and Firefox (and anything else you want):
sudo apt install mint-backgrounds-petra
sudo apt install firefox
Then, comment out (or remove) that linuxmint entry (for safety?)
  • Next, get other useful apps from the standard Debian repositories, and anything else that you want:
sudo apt update
sudo apt install vlc
sudo apt install gimp
sudo apt install geeqie
sudo apt install libreoffice
sudo apt install xvkbd
sudo apt install gnome-screenshot
sudo apt install gnome-terminal
sudo apt install locales
Fix the 'locales' so that gnome-terminal works properly:
sudo dpkg-reconfigure locales
[pick 'en_US.UTF-8 UTF-8' for both choices]
  • Get Chrome browser and install it:
https://www.google.com/chrome/browser/desktop/index.html
sudo dpkg -i chrome_whatever_name.deb
sudo apt install -f
Also get the Chrome remote desktop app:
Chrome Remote Desktop - Chrome Web Store
  You also need to get and install a local binary:
wget http://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb
sudo dpkg -i chrome-remote-desktop_current_amd64.deb
sudo apt install -f
  • Get Skype and install it:
http://www.skype.com/en/download-skype/skype-for-linux/downloading/?type=debian32
sudo dpkg -i skype_whatever_name.deb
sudo apt install -f
  • Also install crouton integration extension for Chrome browser:
Crouton Integration - Chrome Web Store [direct link, since unlisted]
[Here is my log from this step]

Starting/Using Debian/Cinnamon with Crouton

[crouton in a Chromium OS window (xiwi) · dnschneid/crouton Wiki]

You are now done, and ready to use Debian/Cinnamon in crouton!  Here is some extra info to get you going on using it...

You should be in the 'crosh' terminal when starting cinnamon.
  • To start cinnamon normally in full-screen mode (without 'xiwi'):
sudo startcinnamon -X xorg
or

sudo startcinnamon -X xorg -c /media/removable/CROUTON/chroots/ (if installed externally as above)
To switch back-and-forth from ChromeOS to crouton in this mode:
Ctrl-Alt-Shift-ForwardArrow
    or
Ctrl-Alt-Shift-BackwardArrow
  • To start cinnamon with 'xiwi' in a browser tab/window (taking note that it only uses slower software-based rendering):
sudo startcinnamon
To switch back-and-forth from ChromeOS to crouton in this mode:
Ctrl-Alt-Shift-ForwardArrow
    or
Ctrl-Alt-Shift-BackwardArrow
You can also use the SwitchScreen key to display a list of active windows that can be switched to using mouse or LeftArrow/RightArrow keys.
If you just want to run a single app under xiwi:
sudo enter-chroot
xiwi appname
    or
xiwi -T appname 
(to run in a terminal)

    or
xiwi -F appname 
(to run full-screen)

You can also do this all on one line from the crosh shell e.g.
sudo enter-chroot xiwi -T appname
Use the FullScreen button to toggle full-screen crouton.
  • To activate 2-finger scrolling in crouton, navigate to the Cinnamon 'Preferences/Mouse and Touchpad/Touchpad' menu, and set the 'Panel Layout' to 'Two-finger scrolling'.  Optionally, check the 'Enable horizontal scrolling' checkbox.
  • To change the volume in crouton:

Search-VolumeUp
    or
Search-VolumeDown

A better way to control volume is to assign the actual ChromeOS 'VolumeUp and VolumeDown' and ' VolumeToggle' keys to those functions.  Do this by navigating to the Cinnamon 'Preferences/Keyboard/Keyboard shortcuts' menu and assigning 'Custom Shortcuts' via the following keyboard bindings:

F8 = command "amixer set Master toggle"
F9 = command "amixer set Master 10%-"
F10 = command "amixer set Master 10%+"

  • To change screen brightness (note: doesn't seem to have full-range of brightness):

Search-BrightnessUp
    or
Search-BrightnessDown

A better way to control brightness is to assign the actual ChromeOS BrightnessUp and BrightnessDown keys to those functions.  Do this by navigating to the Cinnamon Preferences/Keyboard/Keyboard shortcuts menu and assigning 'Custom Shortcuts' via the following keyboard bindings:

F6 = command 'brightness down'
F7 = command 'brightness up'

  • To set the Delete/Home/PageDown/PageUp/F1/F2/Refresh keys, you can use a subset of the '$HOME/.xbindkeysrc' file mentioned above for use with the 'xbindkeys' utility (make sure that 'xvkbd' is installed as well):
"xvkbd -xsendevent -text '\[Delete]'"
Alt + BackSpace
"xvkbd -xsendevent -text '\[End]'"
Alt + Right
"xvkbd -xsendevent -text '\[Home]'"
Alt + Left
"xvkbd -xsendevent -text '\[Page_Down]'"
Alt + Down
"xvkbd -xsendevent -text '\[Page_Up]'"
Alt + Up
"xvkbd -xsendevent -text "\A\[Left]""
m:0x0 + c:67
F1
#Forward
"xvkbd -xsendevent -text "\A\[Right]""
m:0x0 + c:68
F2
#Refresh
"xvkbd -xsendevent -text "\Cr""
m:0x0 + c:69
F3

Then run in a terminal:

xbindkeys

Miscellaneous Tasks

  • To change the crouton root password:
sudo enter-chroot
sudo passwd root
  • To configure an SSH server:
[Chromebook: run a SSH server on Chrome OS]
[Running servers in crouton]
sudo apt install ssh

Add the following to '/etc/rc.local' so that the SSH server starts automatically each restart:

/sbin/iptables -P INPUT ACCEPT
mkdir -p -m0755 /var/run/sshd

/usr/sbin/sshd
  • To configure a CUPS print server:

[Printing from Crouton]

sudo apt-get install cups
sudo adduser yourusername lpadmin

Add the following to '/etc/rc.local' to that the printer server starts automatically each restart:

/usr/sbin/cupsd

Lgout and back into crouton to continue.

Download/install any needed printer drivers.  For example, for a Brother printer, from http://support.brother.com/g/s/id/linux/en/download_prn.html, get the 'LPR driver' and 'cupswrapper driver', and install them.  For example, as of this writing, the two driver packages for the HL2030 printer:

sudo dpkg -i brhl2030lpr-2.0.1-1.i386.deb
sudo dpkg -i cupswrapperHL2030-2.0.1-2.i386.deb

Navigate with web browser to http://localhost:631/printers, and 'Administration/Modify Printer' to your requirements.  For me, setting the printer up as a network printer, protocol I used successfully is:

lpd://192.168.1.1/LPRServer

Then use 'Maintenance/Print Test Page' to test the printer if you wish.  You might also want to change the default paper size to 'Letter'.

  • To automatically turn off bluetooth (if you don't plan on using any such devices and want to preserve some battery life), add the following to '/etc/rc.local':

rfkill block bluetooth

  • To update/repair Debian/Jessie Crouton after an automatic ChromeOS upgrade:
sudo sh ~/Downloads/crouton -u -n jessie
  • To see which version of Crouton and chroot you are running, from within chroot:

croutonversion -u -d -c

  • To create some easier-to-remember aliases for starting crouton in the crosh shell, add any aliases you want to '~/.bashrc' (while in crosh, not crouton):
alias xorg="sudo startcinnamon -X xorg"
alias xiwi="sudo startcinnamon"
alias chroot="sudo enter-chroot"

If you installed crouton to an external device, use something like these instead:
alias xorg="sudo startcinnamon -X xorg -c /media/removable/CROUTON/chroots/"	
alias xiwi="sudo startcinnamon -c /media/removable/CROUTON/chroots/"
alias chroot="sudo enter-chroot
-c /media/removable/CROUTON/chroots/"

Activate these changes:

. ~/.bashrc

LINUX MINT DEBIAN EDITION ON ACER C720 CHROMEBOOK VIA DUAL-BOOT

Once legacy-supporting SeaBIOS mode is enabled, the option of running Linux -- in this case, the desired Linux distro is 'Linux Mint Debian Edition' (LMDE, specifically 'lmde-2-201503' with kernel version '3.16.0-4') -- as a dual-boot option on the Chromebook. 

The easiest/safest method is to install the desired Linux distro to a USB stick/dongle.  An excellant choice for this is a SanDisk Ultra Fit 128GB USB 3.0 flash drive, due to its small size and good speed.  I currently consider this to be the optimum solution, since it allows the same portable drive to be shared among multiple Chromebooks (or other computers), and avoids the risk of accidental erasure if 'Developer Mode' is inadvertently turned off.  Another advantage to this method is that the Linux install is not jeopardized if/when ChromeOS needs to be re-installed for unforeseen reasons.

The cheapest/fastest method, is to re-partition the Chromebook SSD to run Linux internally.  What makes this a bit complicated is that Chromebooks use the more modern 'GPT' ('GUID Partition Table') partition layout instead of the older 'MBR' ('Master Boot Record').  Scripts/commands that manipulate the GPT partition tables are needed.  As of this date, there appears to be at least two 3rd party scripts that make this partitioning relatively safe and easy.  Do this at your own risk!

  • The first partitioning step using ChrUbuntu method by Jay Lee (uses this script)
  • The first partitioning step using chrx method by reynhout (uses this script)

Run the first step of either one of these scripts to just re-partition the SSD to make room for the new Linux distro.  Make sure that you leave sufficient room for ChromeOS itself i.e. at least 1gb or 2gb more than the size of ChromeOS itself.  Here is a sample session creating an 80gb partition using the chrx script method on an Acer C720P Chromebook:

chronos@localhost / $ cd ; curl -Os https://chrx.org/go && sh go -v
chrx installer, version 2.4.1

    Hardware ID: PEPPY_E6I-W3G-A4E
    Model:       Acer C720, C720P Chromebook
    Released:    2013
    CPU Family:  Intel Haswell
    Prognosis:   success likely, model is well-tested

Checking hardware support for legacy boot...  OK
Setting up target disk /dev/sda...

How much disk space should we reserve for Linux?

Choose between 5 and 115 GB (recommended: 114).

Enter size in GB [114]: 80
  stateful_start 8671232
  stateful_size  73560064
  kernc_start    82231296
  kernc_size     32768
  rootc_start    82264064
  rootc_size     167772160

Modifying partition table to make room for Linux.

Your Chromebook will reboot and clear your data.

Run chrx again to install Linux.

Press [enter] to continue: 

After rebooting, ChromeOS must repair itself before further work can be done.

Then proceed to boot (with Ctrl-l) your desired distro, and install it onto the newly-created Linux partition i.e. probably '/dev/sda7' (previously labelled 'ROOT-C'), which should have been made larger by the scripts above.  NOTE: It is out of the scope of this document to explain what Linux distro to pick, how to put the distro installer onto a bootable USB stick/drive, and how to boot/install it onto a storage partition!).

After installation, there are some good tweaks to do to make everything run smoothly (note that newer versions of Linux Mint Debian Edition might make some/all of these tweaks unnecessary, so verify whether you require them before applying):

  • TOUCHPAD: Adjust touchpad settings in '/etc/X11/xorg.conf.d/50-c720-touchpad.conf':
Section "InputClass" 
Identifier "touchpad peppy cyapa"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
MatchProduct "cyapa"
Option "TapButton1" "1"
Option "TapButton2" "3"
Option "TapButton3" "2"
Option "FingerLow" "5"
Option "FingerHigh" "5"
Option "VertEdgeScroll" "0"
Option "AreaRightEdge" "850"
Option "AreaLeftEdge" "50"
Option "VertTwoFingerScroll" "on"
Option "HorizTwoFingerScroll" "on"
EndSection

# Also scroll options do not work with '1/0' and must use 'on/off'

Also, in order to prevent Gnome and Cinnamon from overriding these touchpad settings, you have to deactivate their mouse-daemon plugins with these commands:
gsettings set org.gnome.settings-daemon.plugins.mouse active false
gsettings set org.cinnamon.settings-daemon.plugins.mouse active false

An alternative to using these shell commands is to install 'dconf-editor' and then to de-activate these settings using the GUI utility instead.

You must logout/login or reboot for these changes to take effect.  Lots of good information can be found here: Touchpad Synaptics - ArchWiki
  • WIRELESS: Improve wireless settings in '/etc/modprobe.d/ath9k.conf' (not required for kernels 4.2+?):
options ath9k nohwcrypt=1 blink=1 btcoex_enable=1 enable_diversity=1
  • MICROPHONE: Fix microphone sound settings in '/etc/modprobe.d/snd-hda-intel.conf':
options snd-hda-intel model=,alc283-dac-wcaps
  • SUSPEND: Fix suspend settings in '/etc/modprobe.d/tpm_tis.conf':
options tpm_tis force=1
Also these to fix suspend settings in '/etc/modprobe.d/blacklist.conf':
blacklist ehci_hcd
blacklist ehci_pci
Run the following command:
sudo depmod -a && sudo update-initramfs -u

NOTE: You need to reboot after making changes to modprobe files, in order for them to take effect.

  • KEYBOARD: To re-map some Chromebook keys to more intuitive values, first install some required utilities if they are absent:
apt install xbacklight
apt install xvkbd
apt install xbindkeys
Next, update the file '$HOME/.xbindkeysrc':
"xbacklight -dec 10"
    m:0x0 + c:72
    F6
"xbacklight -inc 10"
    m:0x0 + c:73
    F7
"amixer set Master toggle"
    m:0x0 + c:74
    F8
"amixer sset Master 10%- unmute"
    m:0x0 + c:75
    F9
"amixer sset Master 10%+ unmute"
    m:0x0 + c:76
    F10

"xvkbd -xsendevent -text '\[Delete]'"
Alt + BackSpace

"xvkbd -xsendevent -text '\[End]'"
Alt + Right

"xvkbd -xsendevent -text '\[Home]'"
Alt + Left

"xvkbd -xsendevent -text '\[Page_Down]'"
Alt + Down

"xvkbd -xsendevent -text '\[Page_Up]'"
Alt + Up

"xvkbd -xsendevent -text "\A\[Left]""
m:0x0 + c:67
F1

#Forward
"xvkbd -xsendevent -text "\A\[Right]""
m:0x0 + c:68
F2

#Refresh
"xvkbd -xsendevent -text "\Cr""
m:0x0 + c:69
F3

Then run in a terminal:
xbindkeys
An alternative method for setting some of these keys would be to use the technique described below in the 'Preferences/Keyboard/Keyboard shortcuts' instructions.
  • TOUCHPAD/SCREEN KERNEL: For the Acer C720P, you need a Linux kernel 3.17+ (actually, 3.16.0.4 seems to work as well) in order for the touchscreen to work.  At the time, the easiest way was to download from:
https://blog.mdosch.de/tag/acer-c720/ (GOOGLE TRANSLATION)
Another newer option that appears to work is to use Debian 8 Jessie 'backports' to install the latest generic stable kernels (from instructions found Linux Kernel 4.1 on Debian 8):

Add the following entries to '/etc/apt/sources.list.d/jessie-backport.list':
deb http://ftp.us.debian.org/debian/ jessie-backports main
deb-src http://ftp.us.debian.org/debian/ jessie-backports main

Refresh the apt repositories with:
apt update
The newest kernel should now be available:
apt install -t jessie-backports linux-image-amd64
As of this writing, the version was '4.5.0-0.bpo.1-amd64'.

Note that with the 'backports' repository present like this, it is also possible to install the backports of other popular packages e.g.
apt install -t jessie-backports libreoffice
apt install -t jessie-backports libreoffice-avmedia-backend-gstreamer
For a list of other backported packages, see Debian Backport Packages.

NOTE: Another 'extreme' option is to get the latest mainline kernel from here:
http://kernel.ubuntu.com/~kernel-ppa/mainline/
Specially, you can find the latest non-RC kernel directory in this listing (as of this writing, it was v4.15/).  Inside, you would download and then 'dpkg -i' the following pieces:
linux-headers-4.xx.x-xxxxxx_4.xx.x-xxxxxx.yyyymmddhhmm_all.deb
linux-headers-4.xx.x-xxxxxx-generic_4.xx.x-xxxxxx.yyyymmddhhmm_amd64.deb
linux-image-4.xx.x-xxxxxx-generic_4.xx.x-xxxxxx.yyyymmddhhmm_amd64.deb
e.g.

sudo dpkg -i linux-headers-4.15.0-041500_4.15.0-041500.201802011154_all.deb
sudo dpkg -i linux-headers-4.15.0-041500-generic_4.15.0-041500.201802011154_amd64.deb
sudo dpkg -i linux-image-4.15.0-041500-generic_4.15.0-041500.201802011154_amd64.deb

deb http://repo.linrunner.de/debian jessie main

Install the required repo keys for security:

sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-keys CD4E8809

Refresh the apt repositories with:

apt update
Install the TLP apps:
apt install tlp tlp-rdw  
Configure and start:
sudo tlp start
Interrogate as you wish e.g.
sudo tlp-stat
  • SSD HEALTH: Optional, but recommended for SSD health, is to make scripts/schedules to automatically run the 'fstrim' command.  First, add the following to '/etc/rc.local' (somewhere before the 'exit 0' line):

fstrim /

Next, add the following to a new script '/etc/cron.daily/trim' if your Chromebook is always on:

#!/bin/sh
LOG=/var/log/trim.log
echo “*** $(date -R) ***” >> $LOG
fstrim -v / >> $LOG
fstrim -v /home >> $LOG
    [if '/home' is on a separate partition]

Fix the execute bits for this new script:

sudo chmod +x /etc/cron.daily/trim
Also optionally instead 'smartmontools' so that you can interrogate the SSD drive health:
apt install smartmontools
sudo smartctl --all /dev/sda -d sat

CHROMEBOOK DISK MAP

JPG
                    kingston 16gb ssd
[Kingston 16gb SATA M.2 2242 SSD found in many Acer Chromebooks]

Using the following command:
sudo cgpt show /dev/sda
...here is a map of the ChromeOS SSD on an Acer C720 (16gb SSD):
       start        size    part  contents
           0           1          PMBR (Boot GUID: 205DDDF5-1DEF-E049-AC7B-6FE0FB105C6D)
           1           1          Pri GPT header
           2          32          Pri GPT table
     8671232    22573056       1  Label: "STATE"
                                  Type: Linux data
                                  UUID: 36F7A5F6-9960-1743-ACDA-CA73E7A5F26C

       20480       32768       2  Label: "KERN-A"
                                  Type: ChromeOS kernel
                                  UUID: EC355231-0531-8E43-B41D-3D2EAFFC0B94
                                  Attr: priority=1 tries=0 successful=1
     4476928     4194304       3  Label: "ROOT-A"
                                  Type: ChromeOS rootfs
                                  UUID: 5393825B-2588-7B48-A393-A03A09598D76
       53248       32768       4  Label: "KERN-B"
                                  Type: ChromeOS kernel
                                  UUID: 72B6BF28-2F5E-1D4E-9D6F-DDBAB411BF71
                                  Attr: priority=2 tries=0 successful=1
      282624     4194304       5  Label: "ROOT-B"
                                  Type: ChromeOS rootfs
                                  UUID: 1283AFCA-3146-A842-A77F-0F590A5E58B8
       16448           1       6  Label: "KERN-C"
                                  Type: ChromeOS kernel
                                  UUID: 66496701-36D1-0C4F-8162-36FE991257CB
                                  Attr: priority=0 tries=15 successful=0
       16449           1       7  Label: "ROOT-C"
                                  Type: ChromeOS rootfs
                                  UUID: 03BC7D11-2FD3-ED46-94AF-C7FC8BC9E87C

       86016       32768       8  Label: "OEM"
                                  Type: Linux data
                                  UUID: F9B23F78-3333-AD4E-B933-2CE904B4BC2F
       16450           1       9  Label: "reserved"
                                  Type: ChromeOS reserved
                                  UUID: 40706723-65A5-334D-A4E9-92D703AC9006
       16451           1      10  Label: "reserved"
                                  Type: ChromeOS reserved
                                  UUID: C6EC9077-8BE5-AA48-BC22-BF45A3A86C5F
          64       16384      11  Label: "RWFW"
                                  Type: ChromeOS firmware
                                  UUID: 0C8A7EC5-7407-1846-849F-F5BBCED92450
      249856       32768      12  Label: "EFI-SYSTEM"
                                  Type: EFI System Partition
                                  UUID: 205DDDF5-1DEF-E049-AC7B-6FE0FB105C6D
    31277199          32          Sec GPT table
    31277231           1          Sec GPT header
Here is a simple map showing how 'cgpt' partition names equate to familiar Linux device names:

cgpt
label
name

cgpt partition number
linux
device
name

partition
size

STATE
1
/dev/sda1
+11gb
KERN-A
2
/dev/sda2
16mb
ROOT-A
3
/dev/sda3
2gb
KERN-B
4
/dev/sda4
16mb
ROOT-B
5
/dev/sda5
2gb
KERN-C
6
/dev/sda6
512b
ROOT-C
7
/dev/sda7
512b
OEM
8
/dev/sda8
16mb
RESERVED
9
/dev/sda9
512b
RESERVED10
/dev/sda10
512b
RESERVED11
/dev/sda12
8mb
EFI-SYSTEM
12
/dev/sda13
16mb

Here is more explanation of what those partitions are used for.

Roughly, ChromeOS takes up 7gb.  Most of it is stored in the 'KERN-A' (/dev/sda2) and 'ROOT-A' (/dev/sda3) partitions, and in the 'KERN-B' (/dev/sda4) and 'ROOT-B' (/dev/sda5) partitions.  The 'active' version of ChromeOS (either the 'A' or 'B' pair of partitions) is read-only, allowing updates to be made to the 'inactive' version before the next reboot occurs.  Each copy of ChromeOS exists in a 2GB 'ROOT-x' partition.  A good chunk of space is also consumed in the 'STATE' partition, which varies in size depending on the SSD drive capacity (approximately 6GB less than this).

Typically, space to install Linux for dual-boot is taken from the 'STATE' partition (in RED above), and re-assigned to the 'ROOT-C' partition (in GREEN above).  In this example, with a 16gb SSD, the 'STATE' partition is 22573056 sectors @ 512 bytes = 11gb.  All of this space can be devoted to a Linux install, but this would leave no storage space for ChromeOS at all -- so in this case the recommended maximum size for Linux on a 16gb SSD would be around 7gb or 8gb.  Note that the locations of 'KERN-C' and 'ROOT-C' are moved from their original offsets to a location within the original 'STATE' partition.

On a Chromebook with a 32gb drive, the 'STATE' partition is 53825536 sectors @512 bytes = 26gb, so there is potentially a lot more room for installing Linux i.e. up to 23gb or 24gb.

On my C720P with the 32gb SSD replaced by a 128gb one, the 'STATE' partition is currently 73560064 sectors @512 bytes = 35gb, while the 'ROOT-C' partition is 167772160 sectors @512 bytes = 80gb.

Examine the re-partitioning scripts mentioned above to see how the relevant partitions are modified, but the basic algorithm is as follows (NOTE: do NOT run these directly unless you know what you are doing!):
# the original partition is changed to be smaller
cgpt add -i 1 -b $stateful_start -s $stateful_size -l STATE ${target_disk}
# this creates a new partition called "kernc"
cgpt add -i 6 -b $kernc_start -s $kernc_size -l KERN-C ${target_disk}
# this creates a new partition called "rootc"
cgpt add -i 7 -b $rootc_start -s $rootc_size -l ROOT-C ${target_disk}
For curiosity's sake, here is what the 'STATE' partition looks like when examined with the Linux 'tree' command:
/dev/sda1
├── dev_image
├── encrypted
├── encrypted.block
├── encrypted.key
├── home
│   ├── chronos
│   ├── root
│   │   └── 7b84d0951c0eeeeba2e89c3adf51736c2cf6495f
│   └── user
│       └── 7b84d0951c0eeeeba2e89c3adf51736c2cf6495f
├── lost+found
├── shutdown_stateful_umount_failure
└── unencrypted
    ├── cache
    │   └── vpd
    │       ├── echo
    │       │   └── vpd_echo.txt
    │       ├── filtered.txt
    │       └── full-v2.txt
    ├── clobber.log
    ├── clobber-state.log
    └── preserve
        ├── attestation.epb
        └── attestation.epb.sum

14 directories, 10 files

SSH SERVER IN CHROMEOS

There may be situations where it is desirable to connect to your ChromeOS device via SSH, so here are slightly-modified instructions from DcK Area on set up an SSH server. NOTE: The actual server comes pre-installed, but is not configured for normal operation.

Enter a superuser shell (i.e. Ctrl-Alt-t and typing 'shell') and enter the following to setup the server:

sudo su
mkdir -p -m 0711 /mnt/stateful_partition/etc/ssh cd /mnt/stateful_partition/etc/ssh ssh-keygen -t rsa -f ssh_host_rsa_key ssh-keygen -t dsa -f ssh_host_dsa_key # not needed anymore?
exit
To then start the SSH server:
sudo /usr/sbin/sshd
sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT
NOTE: You may get a warning message "Could not load host key" when you start the SSH server -- but if you created the key files properly ahead of this, then the reference is to a strangely-named key that could not be found -- and does not matter.  The reference to this other key is in '/etc/ssh/sshd_config', but this file cannot be edited to remove this reference since it is read-only -- and even though it is possible to make the root filesystem writable, the downsides to doing so are not worth it.

NOTE: You will need to repeat these last two commands each time you wish to start the SSH server, since there is no (easy? safe?) way to auto-start custom commands while in ChromeOS like this.  One way to make this a bit easier is to define some easier alias commands -- put something like this into '~/.bashrc':
alias sshsrv='sudo /usr/sbin/sshd; sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT'
NOTE: For me, I was not able to get this to work until I configured SSH to use 'Public Key Authentication' instead of 'Password Authentication'.  My understanding is that this is due to the SSH server configuration setting for ChromeOS has password authentication deactivated i.e. in the root '/etc/ssh/sshd_config' file is the following line:
PasswordAuthentication no
So, in order to use public key authentication instead, while signed into the Crosh secure shell as 'chronos', enter:
ssh-keygen -t rsa
Answer the prompts, and this will populate a directory '/home/chronos/user/.ssh' with some SSH files.  Into the 'authorized_keys' file insert an entry that corresponds to the 'id_rsa.pub' file from the machine you intend to use to connect to ChromeOS with (assuming that SSH is already set up there!).  One way to do this with a single shell command is something like the following:
ssh user@remoteipaddress 'cat .ssh/id_rsa.pub' >> ~/.ssh/authorized_keys
You should now be able to SSH connect to the 'chronos' session on the Chromebook from a remote PC without using a password, and doing so securely, using default port 22:
ssh chronos@chromebookipaddr 
If you do not know the IP address of your Chromebook:
ifconfig

ACER C740 CHROMEBOOK: EXTRA NOTES

Given a chance to try out Linux on the faster Acer C740 Chromebook, I had my share of setbacks and successes that I want to preserve here for others to learn from.

DEBIAN/CINNAMON LINUX ON ACER C740 CHROMEBOOK VIA CROUTON

The instructions above for activating Developer Mode on the C720 above, and the installing/configuring Crouton are applicable here as well.  The extra complications that are partially addressed here are the poorly-functioning default Intel video drivers used for the Crouton environment.  It is necessary to install the latest Debian Jessie backport Intel video drivers.

If you haven't done so already (for other non-critical packages as mentioned above), add the following entries to '/etc/apt/sources.list.d/jessie-backport.list':
deb http://ftp.us.debian.org/debian/ jessie-backports main
deb-src http://ftp.us.debian.org/debian/ jessie-backports main

Refresh the apt repositories and install the backport video drivers:
apt update
apt install -t jessie-backports xserver-xorg-video-intel
and optionally:
apt install -t jessie-backports libegl1-mesa libgl1-mesa-dri
These video driver upgrades will allow you to successfully invoke Crouton, but will NOT provide the desired additional functionality of swapping back (using Ctrl-Alt-Shift-BackwardArrow) to ChromeOS.  Sadly, as of this writing, we need to wait for further improvements on using Crouton with the Intel Broadwell 3205U-based Chromebooks.

LINUX MINT DEBIAN EDITION ON ACER C740 CHROMEBOOK VIA DUAL-BOOT INSTALL

This model lacks legacy SeaBIOS functionality, which means that USB alternative OS booting cannot be used.  The solution is to install replacement firmware for this task:
or

Fortunately, the C740 is only lacking the 'RW_LEGACY Payload' portion of coreboot, so it is very safe to upgrade this portion of the firmware without risk of 'bricking' the C740.  After entering the superuser shell (i.e. Ctrl-Alt-t and typing 'shell'), use either script to update the firmware:

John Lewis script method:

cd
rm -f flash_chromebook_rom.sh
curl -k -L -O https://johnlewis.ie/flash_chromebook_rom.sh

sudo -E bash flash_chromebook_rom.sh

            or

Matt DeVillier script method:
cd
rm -f firmware-util.sh
curl -L -O http://mrchromebox.tech/firmware-util.sh
sudo bash firmware-util.sh

Answer the prompts and the firmware is upgraded.  On the next reboot, Ctrl-L (for legacy USB booting) is then available in addition to Ctrl-D (for Developer Mode ChromeOS booting).

NOTE: The Matt DeVillier script also includes an option to remove the developer mode warning screen that is displayed during bootup -- with a simple white-text-on-black-screen informatory message.  This option may require the 'write protect screw' to be temporarily removed.

Unfortunately, after installing Linux Mint Debian Edition (specifically 'lmde-2-201503' with kernel version '3.16.0-4') to a portable USB device, and booting with an Acer C740 with legacy boot enabled, you will neither have any wireless capabilities, or Cinnamon desktop (!!!).  I got around both obstacles by temporarily booting the installation on my Acer C720, and making all necessary changes there first (without wireless capabilities, it is impossible to install the required fixes unless you first use an older/working machine, or copy the required packages manually to the C740 while it is in this state):

  • Newer kernel required: Install the newest Debian Jessie back-port kernel ('4.5.0-0.bpo.1-amd6' as of this writing).

If you haven't done so already (for other non-critical packages as mentioned above), add the following entries to '/etc/apt/sources.list.d/jessie-backport.list':

deb http://ftp.us.debian.org/debian/ jessie-backports main
deb-src http://ftp.us.debian.org/debian/ jessie-backports main

Refresh the apt repositories and install the backport video/mesa drivers:
apt update
apt install -t jessie-backports linux-image-amd64
NOTE: Another 'extreme' option is to get the latest mainline kernel from here:
http://kernel.ubuntu.com/~kernel-ppa/mainline/
Specially, you can find the latest non-RC kernel directory in this listing (as of this writing, it was v4.15/).  Inside, you would download and then 'dpkg -i' the following pieces:
linux-headers-4.xx.x-xxxxxx_4.xx.x-xxxxxx.yyyymmddhhmm_all.deb
linux-headers-4.xx.x-xxxxxx-generic_4.xx.x-xxxxxx.yyyymmddhhmm_amd64.deb
linux-image-4.xx.x-xxxxxx-generic_4.xx.x-xxxxxx.yyyymmddhhmm_amd64.deb
e.g.

sudo dpkg -i linux-headers-4.15.0-041500_4.15.0-041500.201802011154_all.deb
sudo dpkg -i linux-headers-4.15.0-041500-generic_4.15.0-041500.201802011154_amd64.deb
sudo dpkg -i linux-image-4.15.0-041500-generic_4.15.0-041500.201802011154_amd64.deb
  • Newer video drivers required: Install the newest backport Intel video packages ('2:2.99.917-2~bpo8+1' & '11.1.3-1~bpo8+1' as of this writing):

apt install -t jessie-backports xserver-xorg-video-intel

and optionally:
apt install -t jessie-backports libegl1-mesa libgl1-mesa-dri
  • Newer WiFi drivers required: Install the latest unstable wifi drivers ('20160110-1' as of this writing). 
First create an unstable repository entry in '/etc/apt/sources.list.d/unstable.list' and put the following entry into it:

deb http://ftp.debian.org/debian unstable main contrib non-free

Then run the following:

apt update
apt install -t unstable firmware-iwlwifi

It would be best to remove (or comment out) this unstable repository after this is done!

  • Adjust the touchpad configuration so that better functionality (including 'tap-to-click') works by creating a new file (using sudo) in '/etc/X11/xorg.conf.d/60-touchpad-cmt-auron_paine.conf':
# Configure touchpads to use Chromium Multitouch (cmt) X input driver
Section "InputClass"
    Identifier      "touchpad auron_paine elan"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*"
    MatchProduct    "Elan"
    Option          "Integrated Touchpad" "1"
    Option          "TapButton1" "1"
    Option          "TapButton2" "3"
    Option          "TapButton3" "2"
    Option          "VertTwoFingerScroll" "on"
    Option          "HorizTwoFingerScroll" "on"
EndSection
  • Adjust the grub boot settings so that the boot menu is fully visible by un-commenting the following lines in '/etc/default/grub':
GRUB_TERMINAL=console
GRUB_GFXMODE=640x480
Then put these grub changes into effect by running:
sudo update-grub
You will need to reboot to make all these changes effective.  Other changes mentioned above for the C720 are also optionally suggested.  What you should end up with is a working Linux Mint LMDE bootable device that works just as well as on the older Acer C720 Chromebook.

Miscellaneous note: You will NOT be able to use the 'fstrim' command for the benefit of LMDE installed on an external USB device (presumably because the usb-storage kernel module does not pass the ATA trim command through the USB bridge and controller to the device).

ACER R11 CHROMEBOOK: EXTRA NOTES

LINUX MINT DEBIAN EDITION ON ACER R11 CHROMEBOOK VIA DUAL-BOOT INSTALL

Extra steps required for full functionality of the Acer R11 Chromebook are similar to that of the Acer C740 Chromebook, and so the advise is to follow those instructions above.

What was found, however, is that the latest Debian 'backport' kernels were not new enough (at the time) to support the touchscreen, so a much newer kernel was required. As mentioned above, the source for those newer kernel options is here:

http://kernel.ubuntu.com/~kernel-ppa/mainline/
Specially, you can find the latest non-RC kernel directory in this listing (as of this writing, it was v4.15/).  Inside, you would download and then 'dpkg -i' the following pieces:
linux-headers-4.xx.x-xxxxxx_4.xx.x-xxxxxx.yyyymmddhhmm_all.deb
linux-headers-4.xx.x-xxxxxx-generic_4.xx.x-xxxxxx.yyyymmddhhmm_amd64.deb
linux-image-4.xx.x-xxxxxx-generic_4.xx.x-xxxxxx.yyyymmddhhmm_amd64.deb
e.g.

sudo dpkg -i linux-headers-4.15.0-041500_4.15.0-041500.201802011154_all.deb
sudo dpkg -i linux-headers-4.15.0-041500-generic_4.15.0-041500.201802011154_amd64.deb
sudo dpkg -i linux-image-4.15.0-041500-generic_4.15.0-041500.201802011154_amd64.deb
As well, since it is possible to flip the display panel of the R11 into a 'tablet' mode, there are benefits to being able to rotate both the screen and touch panel at will.  A great script to do this is located here:
https://gist.github.com/mildmojo/48e9025070a2ba40795c
In order to use this Cinnamon's keyboard shortcuts, a variation of that script is as follows (for placement into '/usr/local/bin/rotate.sh'):
#!/bin/bash
#
# rotate_desktop.sh
# https://gist.github.com/mildmojo/48e9025070a2ba40795c
#
# (modified into 'rotate.sh' by Darren Enns 2018/03/19)
#
# Rotates modern Linux desktop screen and input devices to match. Handy for
# convertible notebooks. Call this script from panel launchers, keyboard
# shortcuts, or touch gesture bindings (xSwipe, touchegg, etc.).
#
# Using transformation matrix bits taken from:
#   https://wiki.ubuntu.com/X/InputCoordinateTransformation
#
# Configure these to match your hardware (names taken from `xinput` output).

TOUCHPAD='Elan Touchpad'
TOUCHSCREEN='Elan Touchscreen'

function do_rotate
{
  TRANSFORM='Coordinate Transformation Matrix'

  if [ ! -z "$2" ]; then
    orient=$2  
  else
    orient=$(xrandr -q --verbose | grep 'connected primary' | awk '{print $6}')
  
    case "$orient" in
      right)
        orient="normal"
        ;;
      normal)
        orient="left"
        ;;
      left)
        orient="inverted"
        ;;
      inverted)
        orient="right"
        ;;
    esac
  fi

  case "$orient" in
    normal)
      xrandr --output $1 --rotate "normal"
      [ ! -z "$TOUCHPAD" ]    && xinput set-prop "$TOUCHPAD"    "$TRANSFORM" 1 0 0 0 1 0 0 0 1
      [ ! -z "$TOUCHSCREEN" ] && xinput set-prop "$TOUCHSCREEN" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
      ;;
    inverted)
      xrandr --output $1 --rotate "inverted"
      [ ! -z "$TOUCHPAD" ]    && xinput set-prop "$TOUCHPAD"    "$TRANSFORM" -1 0 1 0 -1 1 0 0 1
      [ ! -z "$TOUCHSCREEN" ] && xinput set-prop "$TOUCHSCREEN" "$TRANSFORM" -1 0 1 0 -1 1 0 0 1
      ;;
    left)
      xrandr --output $1 --rotate "left"
      [ ! -z "$TOUCHPAD" ]    && xinput set-prop "$TOUCHPAD"    "$TRANSFORM" 0 -1 1 1 0 0 0 0 1
      [ ! -z "$TOUCHSCREEN" ] && xinput set-prop "$TOUCHSCREEN" "$TRANSFORM" 0 -1 1 1 0 0 0 0 1
      ;;
    right)
      xrandr --output $1 --rotate "right"
      [ ! -z "$TOUCHPAD" ]    && xinput set-prop "$TOUCHPAD"    "$TRANSFORM" 0 1 0 -1 0 1 0 0 1
      [ ! -z "$TOUCHSCREEN" ] && xinput set-prop "$TOUCHSCREEN" "$TRANSFORM" 0 1 0 -1 0 1 0 0 1
      ;;
  esac
}

XDISPLAY=`xrandr --current | grep primary | sed -e 's/ .*//g'`
XROT=`xrandr --current --verbose | grep primary | egrep -o ' (normal|left|inverted|right) '`

do_rotate $XDISPLAY $1
For the actual Cinnamon keyboard shortcut, if you decide to use it: Do this by navigating to the Cinnamon 'Preferences/Keyboard/Keyboard shortcuts' menu and assigning 'Custom Shortcuts' via the following keyboard bindings:
  Shift+Ctrl+F3= command "/usr/local/bin/rotate.sh"
This shortcut matches the same key sequence as ChromeOS uses for the 'rotate screen' function.

NEW 2018/03/29: Success with getting speaker sound to work under Linux LMDE! 

This topic is not yet 100% completed, but it was sufficient to get basic sound working.  Be careful!  Apparently it is possible to burn out the speakers if mistreated at high volume levels.

Not easy or intuitive, but mostly working by doing the following:

  • Install a new kernel (see above -- in my case 4.15 worked, and not sure what lower version would also work)
  • Download the missing (!?) firmware drivers for Intel Sound 'firmware-intel-sound' from an appropriate location -- I got it from here, and installed it this way (for some reason, this DEB package was not available using normal 'apt install' commands):

sudo dpkg -i firmware-intel-sound_20161130-3~bpo8+1_all.deb

  • Create a new directory (as root) named '/usr/share/alsa/ucm/chtmax98090/' and populate it with two files:
/usr/share/alsa/ucm/chtmax98090/chtmax98090.conf:
Comment "Cyan internal card"

SectionUseCase."HiFi" {
    File "HiFi.conf"
    Comment "Default"
}
/usr/share/alsa/ucm/chtmax98090/HiFi.conf:
SectionVerb {
    Value {
        OutputDspName "speaker_eq"
    }

    EnableSequence [
        cdev "hw:chtmax98090"

        cset "name='codec_out0 mix 0 pcm0_in Switch' on"
        cset "name='media0_out mix 0 media1_in Switch' on"
        cset "name='media1_in Gain 0 Ramp Delay' 50"
        cset "name='media1_in Gain 0 Switch' on"
        cset "name='media1_in Gain 0 Volume' 80% 80%"
        cset "name='pcm0_in Gain 0 Ramp Delay' 50"
        cset "name='pcm0_in Gain 0 Switch' on"
        cset "name='pcm0_in Gain 0 Volume' 80% 80%"
        cset "name='codec_out0 Gain 0 Ramp Delay' 50"
        cset "name='codec_out0 Gain 0 Switch' on"
        cset "name='codec_out0 Gain 0 Volume' 80% 80%"
        cset "name='pcm1_out mix 0 media_loop2_in Switch' 1"
        cset "name='media_loop2_out mix 0 codec_in0 Switch' 1"
        cset "name='codec_in0 Gain 0 Ramp Delay' 50"
        cset "name='codec_in0 Gain 0 Switch' on"
        cset "name='codec_in0 Gain 0 Volume' 80% 80%"
        cset "name='media_loop2_out Gain 0 Ramp Delay' 50"
        cset "name='media_loop2_out Gain 0 Switch' off"
        cset "name='media_loop2_out Gain 0 Volume' 80% 80%"
        cset "name='pcm1_out Gain 0 Ramp Delay' 50"
        cset "name='pcm1_out Gain 0 Switch' on"
        cset "name='pcm1_out Gain 0 Volume' 80% 80%"
        cset "name='Digital EQ 3 Band Switch' off"
        cset "name='Digital EQ 5 Band Switch' off"
        cset "name='Digital EQ 7 Band Switch' off"
        cset "name='Biquad Switch' off"
        cset "name='Filter Mode' Music"
        cset "name='ADC Oversampling Rate' 0"

        cset "name='DMIC Mux' DMIC"
        cset "name='MIC2 Mux' IN34"
        cset "name='Right ADC Mixer MIC2 Switch' on"
        cset "name='Left ADC Mixer MIC2 Switch' on"
        cset "name='MIC2 Volume' 20"
        cset "name='Int Mic Switch' on"

        cset "name='ADCR Boost Volume' 4"
        cset "name='ADCL Boost Volume' 4"
        cset "name='ADCR Volume' 11"
        cset "name='ADCL Volume' 11"

        cset "name='Left Speaker Mixer Left DAC Switch' on"
        cset "name='Right Speaker Mixer Right DAC Switch' on"
        cset "name='Speaker Left Mixer Volume' 2"
        cset "name='Speaker Right Mixer Volume' 2"
        cset "name='Record Path DC Blocking' on"
        cset "name='Playback Path DC Blocking' on"

        cset "name='Headphone Left Switch' on"
        cset "name='Headphone Right Switch' on"
        cset "name='Ext HP Switch' off"

        cset "name='Speaker Left Switch' on"
        cset "name='Speaker Right Switch' on"
        cset "name='Ext Spk Switch' on"

    ]

    DisableSequence [
    ]
}

SectionDevice."Headphone".0 {
    Value {
        JackName "chtmax98090 Headset Jack"
        OutputDspName ""
    }

    EnableSequence [
        cdev "hw:chtmax98090"
        cset "name='Ext Spk Switch' off"
        cset "name='Speaker Left Switch' off"
        cset "name='Speaker Right Switch' off"
        cset "name='Ext HP Switch' on"
    ]
    DisableSequence [
        cdev "hw:chtmax98090"
        cset "name='Ext HP Switch' off"
        cset "name='Ext Spk Switch' on"
        cset "name='Speaker Left Switch' on"
        cset "name='Speaker Right Switch' on"
    ]
}

SectionDevice."Mic".0 {
    Value {
        JackName "chtmax98090 Headset Jack"
    }

    EnableSequence [
        cdev "hw:chtmax98090"
        cset "name='Int Mic Switch' off"
        cset "name='Headset Mic Switch' on"
        cset "name='DMIC Mux' ADC"
        cset "name='Record Path DC Blocking' on"
    ]

    DisableSequence [
        cdev "hw:chtmax98090"
        cset "name='Headset Mic Switch' off"
        cset "name='Int Mic Switch' on"
        cset "name='DMIC Mux' DMIC"
        cset "name='Record Path DC Blocking' off"
    ]
}

SectionModifier."Speaker Swap Mode".0 {
    Comment "Swap the left and right channels of speaker."

    EnableSequence [
        cdev "hw:chtmax98090"

        cset "name='Left Speaker Mixer Left DAC Switch' off"
        cset "name='Right Speaker Mixer Right DAC Switch' off"
        cset "name='Left Speaker Mixer Right DAC Switch' on"
        cset "name='Right Speaker Mixer Left DAC Switch' on"
    ]

    DisableSequence [
        cdev "hw:chtmax98090"

        cset "name='Left Speaker Mixer Right DAC Switch' off"
        cset "name='Right Speaker Mixer Left DAC Switch' off"
        cset "name='Left Speaker Mixer Left DAC Switch' on"
        cset "name='Right Speaker Mixer Right DAC Switch' on"
    ]
}

The instructions to do this came from this bugzilla kernel thread.  I wasn't able to 'patch' the 2nd file, so I simply made the simple editing changes manually.

After making these upgrades/installs/changes, I was able to get the familiar 'welcome' chime when starting the Cinnamon desktop in LMDE, but the 'xbindkeys' that I had programmed to change the sound volume levels did not work.  I am still not sure why they do not, but I have supplemented them by some others that do in the '$HOME/.xbindkeysrc' file:

"xbacklight -dec 10"
   m:0x0 + c:72
   F6
"xbacklight -inc 10"
   m:0x0 + c:73
   F7
"pactl set-sink-mute 1 toggle; amixer set Master toggle"
   m:0x0 + c:74
   F8
"pactl -- set-sink-volume 1 -10%; amixer sset Master 10%- unmute"
   m:0x0 + c:75
   F9
"pactl set-sink-volume 1 +10%; amixer sset Master 10%+ unmute"
   m:0x0 + c:76
   F10

"xvkbd -xsendevent -text '\[Delete]'"
Alt + BackSpace

"xvkbd -xsendevent -text '\[End]'"
Alt + Right

"xvkbd -xsendevent -text '\[Home]'"
Alt + Left

"xvkbd -xsendevent -text '\[Page_Down]'"
Alt + Down

"xvkbd -xsendevent -text '\[Page_Up]'"
Alt + Up

"xvkbd -xsendevent -text "\A\[Left]""
m:0x0 + c:67
F1

#Forward
"xvkbd -xsendevent -text "\A\[Right]""
m:0x0 + c:68
F2

#Refresh
"xvkbd -xsendevent -text "\Cr""
m:0x0 + c:69
F3

The changes from my other '.xbindkeysrc' files on this page are the addition of 'pactl' commands to modify the sound volume levels.