Table of Contents

, ,

Samsung Google Chromebook

I bought a Samsung Chromebook after enjoying playing with one in person, playing with ChromeOS in a VM and be pissed off that over a 5 hour travel period my otherwise trusty Thinkpad T61 Laptop would not run off battery.

The specific model is the XE303C12. This is the 11.7“, ARM-based computer.

What I Like

What I Don't Like

Setting Up a Chroot

It's possible to setup the chroot on the internal memory. After a fresh boot there should be about 9gb free. I specifically bought a 32gb SDXC card for running a chroot, and I didn't want to use up all my working freespace on the internal so I did not bother to install it to the internal storage.

Get Your Arch Base

I'm a fan of Archlinux, but really any compatible ARM distro will work. Gentoo and Ubuntu are good options as well.

The Archlinux ARM page has a download for arch, but that's not what I used for my chroot.

This is what I downloaded and it worked, though it may not be the best optimized for the Chromebooks.

http://archlinuxarm.org/os/ArchLinuxARM-am33x-latest.tar.gz

Since we don't care about bootloaders or kernels, it doesn't really matter what we use as long as it's ARM 5/6/7/Cortex compatible.

Prep Your SD Card

Partition and format your SD card. I used ext4. How do you do this from windows? Good question. I'd say use a VM and use an i686/x86_64 Arch Linux install image.

fdisk /dev/mmcblk0
mkfs.ext4 /dev/mmcblk0p1

Once you have the card partitioned and formatted, mount it and extract the tar ball.

mount /dev/mmcblk0p1 /mnt
tar zxf ArchLinuxARM-am33x-latest.tar.gz -C /mnt

Add these scripts into /mnt

boot-arch.sh
#!/bin/sh
 
# script to 'boot' the arch chroot environment
# this should be called from ChromeOS
 
SDCARD=/dev/mmcblk1p1
CHROOTDIR=/home/root/arch
 
mount $SDCARD $CHROOTDIR
 
#make it so the chroot's resolv.conf is the same as chromeos's
mount --bind /etc/resolv.conf $CHROOTDIR/etc/resolv.conf
 
chroot $CHROOTDIR /boot.sh &
boot.sh
#!/bin/sh
 
# continuation of arch-boot boot script.
# this should be called by the boot-arch.sh script as the first command ran within the chroot
 
#setup paths
export PATH=/usr/bin:/usr/sbin
 
#mount FS's
mount -t proc proc /proc
mount -t sysfs sysfs /sysfs
mount -t devtmpfs dev /dev
mount -t devpts pts /dev/pts
 
#set hostname
hostname $(< /etc/hostname)
 
#launch daemons
/usr/sbin/crond &
/usr/sbin/sshd &

Reboot into Developer Mode

Long Answer: http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/samsung-arm-chromebook#TOC-Entering-Developer-Mode

Short Answer: Press Esc + Refresh + Power. System will reboot. Disable verified mode. Power cycle again. When it boots and warns about switching back to verified mode, press ctrl-D.

Setting Up the Chroot

Once ChromeOS has booted and you're logged it, press ctrl-alt-T to get to crosh. Alternatively you can work out of the frame buffer. Press Ctrl-Alt-Forward (Forward, not right arrow) to get to the framebuffer.

sudo su -
mkdir /home/root/arch

Insert your SD card if you have not already. Then try out the boot script

sh boot.sh

There's still some setup left, but you can chroot into it.

chroot /home/root/arch

You'll want to set a root password and probably create a non-root user.

passwd

The way I access my chroot once I've got everything setup is through Secure Shell / ssh. This limits the amount of commands you have to type before getting into your environment and also does not require you to become root and then drop down (yay for minimizing security risks).

You need to generate some ssh keys

ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa
ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -t ecdsa

Pretifying Secure Shell

Crosh and Secure Shell both use hterm to deliver the 'in browser' terminal. To change settings on either you must change hterm preferences. The changes are persistent, I believe utilizing the html5's local storage ability.

Since I always work out of tmux, there's no point to keeping that unsightly scroll bar around. I also have pretty good vision (near sighted, anyway) so I can stand to use a smaller font which let's me display more text. Here's how to make these changes as well as a few others.

Open a java console (ctrl-shift-j) from secure shell and then use the following commands to set or check preferences.

Check:

term_.prefs_.get('pref-name')

Set:

term_.prefs_.set('pref-name', 'pref-value')

Reset to default:

term_prefs_.reset('pref-name')
Setting Options Example
Bell Sound audible-bell-sound term_.prefs_.set('audible-bell-sound', 'http://example.com/bell.ogg')
Background color background-color term_.prefs_.set('background-color', 'black')
Foreground color foreground-color term_.prefs_.set('foreground-color', '#fff')
Terminal Font Face font-family term_.prefs_.set('font-family', 'Lucida Console')
Terminal Font Size font-size term_.prefs_.set('font-size', 15)
Font Smoothing AKA anti-aliasing font-smoothing term_.prefs_.set('font-smoothing', 'none')
Hide scroll bar scrollbar-visible term_.prefs_.set('scrollbar-visible', false)