Installing Ubuntu 15.04 / 14.10 on the Samsung ARM Chromebook Series 3 (XE303C12)

This requires some knowledge about Chrubuntu (especially about installing it) and Linux, no guarantees.

Installation

The best script currently to install Chrubuntu on the ARM chromebook is this one
http://blog.cyphermox.net/2013/10/hacking-with-samsung-arm-chromebook-on.html

I haven’t tried if the script works for USB or SD card, only on the internal mmc.

Follow the instructions (use this for reference), download the script

wget http://goo.gl/s9ryd

and run:

sudo bash s9ryd xubuntu-desktop 15.04

to install  Xubuntu 15.04 Vivid Vervet. Clean-installing 15.10 (and later?) might cause an issue where Ubuntu only boots to a permanent black screen. Read the comments for a possible workaround.

You can also use other Ubuntu versions.

And that’s about it for installing, at this moment the kernel you get from the script is Linux chrubuntu 3.8.11.


You might have to change the default partition if Chromebook boots into ChromeOS. From the script:

Installation seems to be complete. If ChrUbuntu fails when you reboot,  power off your Chrome OS device and then turn it back on. You'll be back in Chrome OS. If you're happy with ChrUbuntu when you reboot be sure to run:
sudo cgpt add -i 6 -P 5 -S 1 ${target_disk}

To make it the default boot option. The ChrUbuntu login is:

Username:  user
Password:  user


For me with mmc the target disk was /dev/mmcblk0

And if you later on want to boot back to ChromeOS:
sudo cgpt add -i 6 -P 0 -T 1 /dev/mmcblk0

Encrypted home

If you want to have encrypted home, install ecryptfs-utils and then create a new user from the Xfce menu option Users and Groups. There should then be a selection Encrypt home folder to protect sensitive data when you add a new user.


After installing there are some issues to fix


Touchpad / Xorg

To get touchpad and X working like it’s supposed to, I’ve used a part of this script. So make a file

/etc/X11/xorg.conf.d/exynos5.conf

And copy the configs there

Section "Device"
Identifier "Mali FBDEV"
Driver "armsoc"
Option "fbdev" "/dev/fb0"
Option "Fimg2DExa" "false"
Option "DRI2" "true"
Option "DRI2_PAGE_FLIP" "false"
Option "DRI2_WAIT_VSYNC" "true"
# Option "Fimg2DExaSolid" "false"
# Option "Fimg2DExaCopy" "false"
# Option "Fimg2DExaComposite" "false"
Option "SWcursorLCD" "false"
EndSection
 
Section "Screen"
Identifier "DefaultScreen"
Device "Mali FBDEV"
DefaultDepth 24
EndSection
 
Section "InputClass"
Identifier "touchpad"
MatchIsTouchpad "on"
Option "FingerHigh" "5"
Option "FingerLow" "5"
EndSection
 
Section "InputClass"
Identifier "touchpad catchall"
Driver "synaptics"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
Option "TapButton1" "1"
Option "TapButton2" "2"
Option "TapButton3" "3"
EndSection

There might be better confs out there than this!

(You can try installing xserver-xorg-video-armsoc-exynos driver, but I found it to be too buggy.)


Sound

If the sound is not working this guide might fix it (the part about PulseAudio).
In 14.10 and 15.04 all I had to do was to uncomment

load-module module-alsa-sink

in

/etc/pulse/default.pa

and reboot. Then install xfce4-mixer and use it to un-mute and adjust your speakers and headphones.


Screensaver / sleep / blank screen issues

There’s a problem with chrubuntu 14.10 that after the laptop goes to sleep or when the screensaver starts, the dislay goes blank and doesn’t wake up. I’ve fixed this simply by disabling system sleep, display sleep and switch off display in the Power Manager.
Also there are some problems with Lightlocker screensaver, so atm it’s best to disable it from Sessions and Startup, then install and enable xscreensaver and use it instead.


Locale

Setting locale to UTF-8 for special characters, I ran:

sudo locale-gen --purge en_US.UTF-8

And put

LC_ALL="en_US.UTF-8"

at the end of /etc/environment


Tweaks

In Window Manager settings it’s a good idea to click Hide content of windows When moving and When resizing for better performance  (Not that necessary in 15.04).

uBlock Origin as an efficient adblocker for Firefox and Chrome.

A snappy video player for Chrubuntu is mpv when you set the video output to x11

Using Maximus to get most of the screen space
http://www.webupd8.org/2009/11/maximus-do-not-automatically-maximize.html

Systemd in 15.04 really affected the boot time on my Chromebook, so for now I’ve switched back to Upstart with apt-get install upstart-sysv

Using NetworkManager on one certain network caused the whole system to always crash, so now on that location I stop the network-manager service and use wicd instead with the driver set to nl80211

In /etc/fstab I’ve set /tmp as tmpfs:

tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0


Flash player in Chromium

Method 1: To be able to use Flash in Chrubuntu you have to copy the plugin from the ChromeOS first. Use the last part of this as a reference.
So boot up ChromeOS, install updates (to get the latest flash), and then from the terminal I mounted an usb stick and copied the whole chrome plugin folder (/opt/google/chrome/pepper/) to it. It’s best to get the whole folder so you won’t miss the pepper-flash.info file which is useful.

Method 2: http://odroidxu.leeharris.me.uk has Pepperflash downloads which are compatible with Chromebook.

In Chrubuntu copy libpepflashpalyer.so  into /usr/lib/chromium-browser/plugins/
Then take a note of the version number in pepper-flash.info, at the time of writing mine was 17.0.0.169-r1
Next edit /etc/chromium-browser/default and set the flags like this (remember to use your flash version):

CHROMIUM_FLAGS="--ppapi-flash-path=/usr/lib/chromium-browser/plugins/libpepflashplayer.so --ppapi-flash-version=17.0.0.169 --ppapi-flash-args=enable_hw_video_decode=0,enable_stagevideo_auto=0,enable_trace_to_console=0"

Notice that you must remove the “r1” part of the version info.

Then in Chromium disable hardware acceleration, restart browser and flash should work.

I also probably made myself owner of the plugin file with something like:
sudo chown your-username:users /usr/lib/chromium-browser/plugins/libpepflashplayer.so

Flash player in Firefox

You can also use Chromium’s pepperflash in Firefox with freshplayerplugin. Build the plugin from github and copy it (libfreshwrapper-pepperflash.so) to ~/.mozilla/plugins

The freshplayerplugin requires a manifest.json file for the pepperflash plugin. My installation didn’t have one, so I just copied this and replaced the version number with that of mine (17.0.0.169) and saved it to /usr/lib/chromium-browser/plugins/manifest.json

Like so:

{
 "description": "Pepper Flash Player",
 "name": "Flapper",
 "version": "17.0.0.169",
 "x-flapper-revision": "1210253",
 "x-ppapi-arch": "armv7",
 "x-ppapi-os": "linux",
 "x-ppapi-required-interfaces": [
 "PPB_AudioConfig;1.1|PPB_AudioConfig;1.0",
 "PPB_AudioInput(Dev);0.3|PPB_AudioInput(Dev);0.2",
 "PPB_Audio;1.0",
 "PPB_BrowserFont_Trusted;1.0",
 "PPB_Buffer(Dev);0.4",
 "PPB_CharSet(Dev);0.4",
 "PPB_Core;1.0",
 "PPB_Crypto(Dev);0.1",
 "PPB_CursorControl(Dev);0.4",
 "PPB_FileChooser(Dev);0.6|PPB_FileChooser(Dev);0.5",
 "PPB_FileChooserTrusted;0.6|PPB_FileChooserTrusted;0.5",
 "PPB_FileRef;1.0",
 "PPB_Flash_Clipboard;5.0|PPB_Flash_Clipboard;4.0",
 "PPB_Flash_File_FileRef;2",
 "PPB_Flash_File_ModuleLocal;3",
 "PPB_Flash_FontFile;0.1|PPB_PDF;1",
 "PPB_FlashFullscreen;1.0|PPB_FlashFullscreen;0.1",
 "PPB_Flash;13.0|PPB_Flash;12.6|PPB_Flash;12.5|PPB_Flash;12.4",
 "PPB_Flash_Menu;0.2",
 "PPB_Graphics2D;1.0",
 "PPB_Graphics3D;1.0",
 "PPB_ImageData;1.0",
 "PPB_IMEInputEvent(Dev);0.2|PPB_IMEInputEvent(Dev);0.1",
 "PPB_InputEvent;1.0",
 "PPB_Instance;1.0",
 "PPB_Memory(Dev);0.1",
 "PPB_NetAddress_Private;1.1|PPB_NetAddress_Private;1.0|PPB_NetAddress_Private;0.1",
 "PPB_OpenGLES2ChromiumMapSub;1.0|PPB_OpenGLES2ChromiumMapSub(Dev);1.0|PPB_GLESChromiumTextureMapping(Dev);0.1",
 "PPB_OpenGLES2;1.0",
 "PPB_TCPSocket_Private;0.4|PPB_TCPSocket_Private;0.3",
 "PPB_TextInput(Dev);0.2|PPB_TextInput(Dev);0.1",
 "PPB_UDPSocket_Private;0.4|PPB_UDPSocket_Private;0.3",
 "PPB_URLLoader;1.0",
 "PPB_URLLoaderTrusted;0.3",
 "PPB_URLRequestInfo;1.0",
 "PPB_URLResponseInfo;1.0",
 "PPB_URLUtil(Dev);0.6",
 "PPB_Var;1.1|PPB_Var;1.0",
 "PPB_VideoCapture(Dev);0.3|PPB_VideoCapture(Dev);0.2",
 "PPB_View;1.0"
 ]
 }

Then edit ~/.config/freshwrapper.conf to have

pepperflash_path = "/usr/lib/chromium-browser/plugins/libpepflashplayer.so"

and

flash_command_line = "enable_hw_video_decode=0,enable_stagevideo_auto=0,enable_trace_to_console=0"

Pepperflash should now work in Firefox. Disabling HW acceleration in Firefox might be a good idea too.

If it doesn’t work try changing the ownership and permissions for libpepflashplayer.so and manifest.json files.

H.264 video in Firefox

In Ubuntu 15.04 H.264 in Firefox seems to work out of the box.
You can still try if there’s any change in adjusting values media.mediasource.enabled and media.mediasource.mp4.enabled
http://www.ghacks.net/2014/10/26/the-state-of-media-source-extensions-in-firefox/
Or preferences for mp4
http://www.ghacks.net/2014/07/25/enable-mse-h2-64-support-youtube-firefox-right-now/

Installing gstreamer1.0-plugins-bad-videoparsers or xubuntu-restricted-extras which it is part of breaks mp4-videos on Firefox.

(You can still install restricted extras if you unmark or remove gstreamer1.0-plugins-bad-videoparsers)

Old H.264 guide for 14.10:

The gstreamer0.10-ffmpeg package used by Firefox for H.264 video is not available for Ubuntu 14.10. There are PPAs for it but like usual with PPAs they don’t provide binaries for armhf. The solution is to hunt down the packages from older Ubuntu releases in Launchpad, if I remember correctly 14.04 and 13.10 have the required versions. Here’s a list of debs I have saved for gstreamer0.10 to work properly in armhf, but it might be wrong and outdated. Some of the needed packages are found directly from 14.10, dpkg will tell which ones.

gstreamer0.10-ffmpeg_0.10.13-5_armhf.deb
libavcodec-extra-53_0.8.10ubuntu0.13.10.1_armhf.deb
libavformat-extra-53_0.8.10ubuntu0.13.10.1_armhf.deb
libavutil-extra-51_0.8.10ubuntu0.13.10.1_armhf.deb
libopenjpeg2_1.3+dfsg-4.6ubuntu2_armhf.deb
librtmp0_2.4+20121230.gitdf6c518-1_armhf.deb
libswscale-extra-2_0.8.13ubuntu0.13.10.1_armhf.deb
libx264-123_0.123.2189+git35cf912-1ubuntu1.1_armhf.deb

Also check media.gstreamer.enabled is set to true

Saving in Firefox (fixed in 15.04)

Saving some files, like images, causes Firefox to freeze and hang. I’ve used the add-on DownThemAll! to circumvent the issue.


Reconfiguring the keyboard

You can use xmodmap to edit key functions. I wanted to replace one of the volume buttons with a delete button so I use a command

xmodmap -e "keycode  76 = Delete Delete F10 F10 F10 F10"

It’s a UK layout so the keycode might be different in other versions.

I also need the letters “ä” and “ö” and have it done like this. It uses altgr and shift+altgr on buttons “a” and “o”.

xmodmap -e "keycode  38 = a A a A adiaeresis Adiaeresis ae AE"

xmodmap -e "keycode  32 = o O o O odiaeresis Odiaeresis oslash Oslash

15 thoughts on “Installing Ubuntu 15.04 / 14.10 on the Samsung ARM Chromebook Series 3 (XE303C12)

  1. Really really helpful guide, thanks a lot. I am wondering if you have get the hardware acceleration work on chrubuntu. It’s not really that important, but I think Firefox will perform much better with hardware acceleration.

    Like

  2. After install and request enter to reboot all I get is a black screen with no cursor. I have been running the script an such:

    sudo bash s9ryd xubuntu-desktop dev

    Any help is appreciated. Thanks.

    Like

  3. cheap workaround
    0) format the sdcard with ext4 file system

    1) run on other linux following commands manually in a terminal to format the sd card (code is from s9ryd script):

    target_disk=”/dev/mmcblk0″
    ext_size=”`blockdev –getsz ${target_disk}`”
    aroot_size=$((ext_size – 65600 – 33))
    parted –script ${target_disk} “mktable gpt”
    cgpt create ${target_disk}
    cgpt add -i 6 -b 64 -s 32768 -S 1 -P 5 -l KERN-A -t “kernel” ${target_disk}
    cgpt add -i 7 -b 65600 -s $aroot_size -l ROOT-A -t “rootfs” ${target_disk}
    sync
    blockdev –rereadpt ${target_disk}
    partprobe ${target_disk}

    2) change in s9ryd script line 194 from
    tar_file=”http://cdimage.ubuntu.com/ubuntu-core/releases/$ubuntu_version/release/ubuntu-core-$ubuntu_version-core-$ubuntu_arch.tar.gz”

    to

    tar_file=”http://cdimage.ubuntu.com/ubuntu-base/releases/$ubuntu_version/release/ubuntu-base-$ubuntu_version-core-$ubuntu_arch.tar.gz”

    3)put the sd card into the chromebook, and run the changed script in crosh with
    sudo bash s9ryd xubuntu-desktop lts /dev/mmcblk1
    ————-
    that worked for me for chrubuntu 14.04 and 16.04

    Like

    • This worked for me, 16.04 is installing right now, let’s wait and see if it boots!
      However, this workaround seems to be for installation on SD-card, which is not what I’m trying to do (I want to install it on the internal SSD). So all I did was change line 192 in the script (the only changes are “core” to “base” the first 2 times in that line (not the third!), put it online, download it in CROSH and run it with
      sudo s9ryd xubuntu-desktop lts
      (no /dev/mmcblk1, since I don’t want to install it onto SD!)

      Like

Leave a comment