Ubermix on Chromebooks
Google Chromebook hardware has been gaining popularity of late, due to its simplicity, low cost, and ease of management. While living entirely in a web browser can be fine for some, many find being restricted to lightweight applications frustrating and the requirement for constant connectivity unrealistic for their computing needs. Thankfully, ubermix can help.
Installing ubermix does not remove ChromeOS from your Chromebook, it simply installs itself alongside it, so there is no risk. Even if something goes horribly wrong, you can always restore your Chromebook to its factory state by following Google's instructions here.
Due to some of the limitations of Chromebook hardware, there are a few important considerations to keep in mind:
- ubermix will not work on ARM based hardware - only Intel(x86) devices are supported (ie no Samsung Series 3).
- Chromebooks must be in Developer Mode to run ubermix. Developer Mode introduces an huge startup delay as the Chromebook splash screen sits and waits for 30 seconds at bootup, letting you know your are running in Developer Mode and offering the option to "turn Developer Mode off" by pressing the space bar. It also beeps twice (loudly) as a final warning before finally booting up. On some devices you can skip the wait by pressing ctrl+d, but the average user isn't going to know that. This is:
- Incredibly annoying
- Makes it too easy to unset Developer Mode, causing the device to only boot into ChromeOS. There is no way to prevent your end users from disabling developer mode (and consequently ubermix).
- There is no way (at present) to customize an ubermix install key using a Chromebook. If you wish to create a custom image to deploy on multiple Chromebooks, you will need to use a regular laptop/netbook to build your custom ubermix install key.
- There is no such thing as a 5 minute install on a Chromebook, as is normal with ubermix on standard hardware. The initial setup takes about 20 minutes to complete on a Chromebook, as it insists on reconfiguring itself when the partitions get changed around. Subsequent installs and upgrades would, however, only require about 5 minutes, but there is nothing that can be done to speed up the initial install.
- Google could, theoretically, decide to update the way ChromeOS and the hardware work at a future date. While this is highly unlikely, it is theoretically possible that an end user could boot into ChromeOS, install an automatic update from Google, and no longer be able to boot into ubermix.
Other than that, all ubermix functionality is intact, even the quick reset capability, making ubermix an excellent choice for your Chrome hardware.
Creating a custom ubermix USB install key
The first thing we'll need is an ubermix USB install key that has the appropriate installer files for a Chrome device on it. Follow the instructions on the ubermix Download and Install page to create one. Next:
- Download chrome-ubermix_1.1.zip and extract the chrome folder from the zip file. Please note: When you get to the Google docs share, go to the "File" menu and choose "Download". There is no need to download each file individually.
- Insert your newly created ubermix USB install key in any port, and copy the chrome folder you just extracted to the root of the key.
Getting your Chrome hardware into Developer Mode
The first step is to get your Chrome hardware into Developer Mode. This will be different for each device, but Google is pretty good at keeping up on the Chromium OS project pages. Instructions for most devices are listed here. As an example, the following are instructions for getting an Acer C7 Chromebook into Developer Mode:
- Turn the Chromebook off.
- Press the power button while holding the Refresh (F3) and Esc keys simultaneously. This should land you at a screen that asks you to insert recovery media. If it doesn't, you missed a key, so try again.
- Press Crtl+D to toggle developer mode.
This will prompt a reboot and a wait of several minutes while your Chromebook is reset. Your Chromebook will then reboot to a scary "you're in Developer Mode" screen and sit for 30 seconds, trying to trick you into pressing the space bar and disabling developer mode. Either press ctrl+d or wait for the device to boot.
Developer firmware is also required for most devices. Be sure to follow any special instructions you find in the Developer Mode pages from above, however most should work with the following instructions:
- Once you see the standard ChromeOS login screen, press ctrl+alt+F2 to open a terminal window.
- At the "localhost login" prompt, enter "chronos" and press Enter.
- Type "sudo bash" and press enter.
- Type "chromeos-firmwareupdate --mode=todev" and press Enter.
If you see a message telling you that you can press Ctrl+U to run your own self-signed OS kernels, you're all set to go.
You're almost home! Follow these steps to complete the installation:
- Insert the ubermix USB install key you created earlier in a USB port on your Chrome device.
- If you exited the terminal in the previous step, follow steps 1-3 under "Developer Firmware" above to get your terminal back into place.
- Type "mkdir /tmp/usb" and press Enter.
- Type "mount /dev/sdb1 /tmp/usb" and press Enter.
- Type "/tmp/usb/chrome/install-ubermix.sh" and press Enter.
The script will then make sure you have everything you need to get going. If all is OK, it will prompt you for the amount of space you want to reserve for Ubuntu. Be sure to reserve at least 10 gigabytes.
Next the script will adjust your disk partitions and reboot. ChromeOS will the "repair" itself, which will take a few minutes. Once the "repair" process is complete, you will be returned to a standard ChromeOS login screen. Once you see the login screen, follow steps 2-5 above to complete the installation. Your system should reboot into ubermix when complete.
Rebooting into ChromeOS
If you want to reboot the machine in ChromeOS, simply click the "Chromebook OS Selector" under System Tools and select ChromeOS. On reboot, your machine will boot into ChromeOS again.
Switching back to ubermix from ChromeOS
Unfortunately, ChromeOS is not very customizable, so switching back from ChromeOS to ubermix is not quite as simple. To switch back to ubermix from ChromeOS:
- Open a terminal in ChromeOS by pressing ctrl+alt+f2
- Type "chronos" and press Enter at the login prompt
- Type "bash ureboot" and press Enter.
Your Chrome device will then reboot into ubermix. If you get an error that says ureboot doesn't exist, then ChromeOS probably moved/removed it with some sort of update. To get around this problem, enter "sudo cgpt add -i 6 -P 5 -S 1 /dev/sda" followed by "sudo reboot" to get back to ubermix.
Setting up the custom keyboard keys
Chrome device keyboards are somewhat unique in that a number of buttons are marked differently than a standard keyboard. In order to make these buttons function like they do under ChromeOS, we need to install some software and map the keys. Follow these steps while running ubermix:
- Open a terminal by pressing ctrl-alt-t
- Type "sudo apt-get install xvkbd xbacklight" and follow the prompts.
- Close the terminal window
- Select "System Settings..." from the Power/Settings menu (gear icon in the top-right corner)
- Click "Keyboard, then "Shortcuts", then "Sound and Media"
- Click on the assigned key for "Volume Mute" (so that it says "New Accelerator') and press the F8 key to assign it. Repeat for "Volume down" and "Volume up", assigning appropriate keys.
- Click on "Custom Shortcuts", then click "+" to add each new shortcut, according to the following table (would suggest you copy and paste on the Chrome device):
Name Command Browser fullscreen /usr/bin/xvkbd -xsendevent -text "\[F11]" Backlight up xbacklight -inc 10 Backlight down xbacklight -dec 10 Browser back /usr/bin/xvkbd -xsendevent -text "\[Alt_L]\[Left]" Browser forward /usr/bin/xvkbd -xsendevent -text "\[Alt_L]\[Right]" Browser refresh /usr/bin/xvkbd -xsendevent -text "\[F5]"
Making the experience more "Googly"
As a Google-centric user you might appreciate the Google Apps Icons for ubermix add-on, which adds a group of standalone launcher icons for all of the various Google services. When clicked, each app opens in its own, undecorated window, which makes the experience even better than ChromeOS. To install them on your ubermixed Chrome device:
- Open a terminal (ctrl-alt-t)
- Type "sudo apt-get install gapps-icons-all" followed by the Enter key.
Once installed, you will find all of the Google app icons in the Internet section of the ubermix launcher.
Choosing a more "HD" launcher theme
If the screen on your Chrome device is wider than 1024 pixels you might find that application icons/descriptions in the launcher interface don't fit well with the width of your larger screen, leaving an inordinate amount of blank space on to the right in the application list. Luckily, there are optional themes for the launcher that might work better for you, and switching is easy. Simply:
- Click on "System Tools" at the bottom of your screen.
- Click on the "Launcher Theme" tool.
- Select a different theme.
I personally prefer Nouveau HD, but the Classic theme is also an excellent option.
Differences from stock ubermix
Since Chrome devices utilize a "secure" boot process, some of the functions of ubermix had to be altered to function properly on Chrome hardware, as follows:
- Since there is no bootloader or pre-boot process, the reset menu had to be implemented a little later in the boot process. Watch for the "Press [ESC] for menu..." prompt on the screen prior to pressing the esc key to enter the reset menu. You will only have 3 seconds to press esc, so be ready.
- Customizers looking to enter "generic" mode (see the ubermix Customization page for details) must now wait until they see the "Press [ESC] for menu..." prompt, then press the "g" key within 3 seconds to boot into generic mode.
- Due to the aforementioned boot process, the user changes functionality is not quite as robust as stock ubermix, as the system must be partially booted up prior to the user changes layer being initialized. While this will not likely cause problems for most (normal) users, it is possible that some background services a user might install in normal mode (services like apache web server or mysql database server) might not load automatically on reboot, as they are typically set to start prior to the user changes layer becoming active. Install services in generic mode to work around this limitation.
v1.1 - Disabled acpid, as Chromebooks send thousands of lid events when the lid is opened after suspend, causing high processor utilization and reduced battery life. If you installed 1.0 and wish to update, do the following:
- Reboot in generic mode (see above)
- Open a terminal (ctrl-alt-t)
- Type sudo sh -c "echo manual >/etc/init/acpid.override"