Tuesday, December 3, 2013

Bodhi on My Chromebook: Battery Status, Movies

Introduction

In recent posts I have discussed installing and using Bodhi on my Samsung (ARM) Chromebook.  Today I will discuss the issues I had with battery status and how I (hopefully) resolved them. Also, I provide a little information on seeing if I could play movies on my Chromebook.

Battery Gadget

Bodhi offers a battery gadget for displaying battery status.  You can find a brief description on the Bodhi Module reference page under "System".  I added the gadget to my main taskbar shelf.  However, I got erratic results from the gadget. For instance, when plugged in I often would get a message that the battery was getting low and that it needed to be plugged in.  It also seemed to always be showing about half full.

I discovered what I believe is the battery status for my system under:

/sys/class/power_supply/sbs-4-000b

In looking at the source for the enlightenment battery meter, it appears this is what it checks first. I also noticed that it would then check for the existence of  /proc/acpi (for ACPI) and /proc/apm (for APM). Although I had acpid installed and tried installing apmd, these directories were not there.

After rebooting, the battery status meter looked better.  I also went to the settings of the battery gadget and (using Advanced) scrolled over to the "Hardware" tab and selected "Internal" and checked "Fuzzy Mode". I seem to be having more accurate results with this.

One frustrating thing about some of these Bodhi gadgets is there isn't a lot of documentation on some of these finer details. At least I could not find any. For example, what does "Internal" mean in the settings? What about "Fuzzy Mode".  Given the community is so much smaller than debian, ubuntu, Arch, etc. I guess I can't really complain. There aren't thousands of eyes looking at this stuff all the time for Bodhi like some other distros.

At any rate at this point it seems to be working better. It seems to know when it is charging and discharging, etc.

Movies

I was asked by someone in the Bodhi community whether movies would play under Bodhi on my Chromebook, specifically at 720p.  I originally tried vlc, but in playing any movie I got no audio, no matter how much I fiddled with the audio preferences. I then decided to try mplayer2 and smplayer. Using this, I was able to play a 720p mp4 movie. Audio was fine.  I also discovered that by installing gecko-mediaplayer I could launch movies from within the chromium browser. I should also mention that I have the x264 package installed as well, which is probably necessary.

 

Wednesday, November 27, 2013

Using Bodhi on My Chromebook: Network, Suspend

Introduction

In previous posts, I have discussed installing Bodhi on my Samsung (ARM) Chromebook and updating it to support Chromium and Flash, plus controlling the brightness via the brightness keys on the keyboard. In this post, I will discuss (wireless) network configuration/management and also suspend on lid close.

Network

From my investigation, I found 3 main candidates for network configuration and management for Bodhi. Most likely there are others, but these were the ones I saw being discussed and used (by different people).  The choices I found were:
  1. EConnMan: This is the EFL (Enlightenment) user interface for ConnMan.
  2. Network Manager: This uses GNOME and is the network configuration/management tool that comes by default with Ubuntu.
  3. WICD: This is a lightweight python based wireless/wired network manager.
At first glance, given that EConnMan is EFL based and given my desire to use Enlightenment modules where feasible, this would appear to be my first choice. However, in reading the Bodhi forums, it seems that users were being dissuaded from using EConnMan, at least when they encountered problems. The alternative suggested was Network Manager.

For a while I tried using Network Manager. I have used Network Manager for years on my Ubuntu machines, and in fact still do.  It is probably the most functional and most widely used solution in Ubuntu, and supports things such as mobile broadband.  It is somewhat heavy in terms of resources and it uses GNOME. Considering I am running Bodhi on a Chromebook with limited memory and disk space, (and using Enlightenment, not GNOME) I want lightweight solutions where feasible.  Additionally, although I got Network Manager to work, I had quite a few issues configuring the wireless security.  The problem may not have been Network Manager itself (and its accompanying nm-applet) but an issue using the keyring for storing passwords. 
Basically, the problem I encountered was that when I was queried (by nm-applet) to enter the password for my wireless router, it always prompted me again. When I invoked nm-applet from within a terminal window, I could see (based on messages printed out) that it could not find the password in the keyring and thus was prompting for it. Although the ~/.gnome2/keyrings directory existed, nothing was written there. I tried starting various keyring programs at start-up, but still did not resolve the issue. Note that I had already configured the policy kit for Network Manager as described here (which did result in the appearance of the dialog box where I was asked to enter the password). I should point out that I have not had keyring issues on Ubuntu in the recent past and it may well be that had I been using Bodhi on an x86 or x86_64 machine, I would not have had an issue. It is important to remember that while Bodhi is based on Ubuntu for x86 and x86_64, for ARM it is based solely on debian.  This may (or may not) be partially responsible for the issues I had with the keyring.
The only way I was able to enter the password for wireless access points in Network Manager was to use the network connections editor application, nm-connection-editor. Using this I was able to store the password in Network Manager configuration files, which does not use the keyring.  While this worked, it was not ideal and for this reason, plus the fact that Network Manager is more resource intensive (and is GNOME based), I decided to try WICD.

To try WICD, I needed to turn off Network Manager. I did not want to uninstall it initially (although I may later). To turn off the Network Manager daemon I executed:

sudo insserv -r network-manager

That way if I wanted it started in the future I could use

sudo insserv network-manager
to have it automatically started at start-up.
I also had to turn off Network in the list of Enlightenment start-up apps.  The start-up apps are reached via  the main Bodhi menu at Settings->All->Apps->Startup Applications.

Since I had previously installed and then disabled WICD, I needed to have its daemon started automatically at start-up. I did this with:

sudo insserv wicd
I also went into the Bodhi menu to Startup Applications and turned on "Wicd Network Manager Tray".  Based on some documentation I read, I also added my user ID to the "users" group. I had previously added it to the "netdev" group.  I don't know which group membership, if either, is required. Update 11/28/2013: Looking at /etc/dbus-1/system.d/wicd.conf I see on my machine that the group you need to be in is "netdev".
After restarting, the WICD gadget appeared in the tray and I was able to click on it and configure wireless networks. I should also point out that I prefer the look of the WICD tray gadget versus the one from Network Manager (nm-applet). The one from Network Manager seems too big. Clearly this is a personal preference.
One other thing to note is that both Network Manager and WICD install pm-utils scripts for handling suspend/resume via pm-utils.  This will be relevant in the next section.

Lid Close and Suspend

Although I have been using Linux for well over 10 years, I have been hesitant to use suspend/resume.  First, Linux typically boots up somewhat quickly (typically 30 seconds or so) as opposed to some Windows machines which took minutes. Additionally, I am aware of people having issues with machines they continually suspended and resumed, that were cleared up after a reboot.  However, despite the fact that Bodhi on my Chromebook boots in about 10 seconds, I decided to play with suspend/resume anyway, as I don't expect to have numerous programs running simultaneously and will thus hopefully not run into many problems.

Most people seem to have their laptops suspend when they close the lid, so I decided to see if I could get that configured easily.  To support detecting and handling lid events, I needed to use something like ACPI.  Although I was told ACPI did not work well on ARM, I did find some information here  (see Advanced tab) about it being used on Samsung Chromebooks for handling suspend on lid close. I installed the acpid package, which is the ACPI daemon.  Note that I had previously tried to install acpi-support in addition to acpid, but was unsuccessful (for ARM architecture--others should be OK). The acpi-support package depends on acpi-fakeykey which was not available. At one point I even tried compiling acpi-fakekey and created a package for it (for ARM). However, the actual code (at run-time) depends on uinput (a kernel module), which is something that was not available in my ARM kernel.

Despite not being able to install acpi-support, which provides many helpful scripts for use with ACPI, I was able to create the event handler and script I needed.  I found useful information on ACPI events here. First I went into /etc/acpi/events and added (as root) a file named lid with the following contents:

event=button/lid
action=/etc/acpi/lid.sh %e

The first line tells it the action type, and the second gives the path to an executable (script in this case) to execute, passing the event string. I added /etc/acpi/lid.sh with the following contents:

#!/bin/bash
case $3 in
  close)
     pm-suspend
     ;;
  *)
     ;;
esac

After making these changes and rebooting, I was able to suspend on lid close.

Note that the event string passed into the script for lid close is:

button/lid LID close

and for lid open is:

button/lid LID open

This is why the script is looking at the third argument.

One thing I mentioned previously was that both Network Manager and WICD provide scripts for handling suspend and resume events. You can find these scripts in /usr/lib/pm-utils/sleep.d.  The scripts are 55NetworkManager and 55wicd respectively.  Upon resume from suspend, WICD did start up again and connect fairly quickly.


Thursday, November 7, 2013

Usability on My Samsung Chromebook: Chromium/Flash and Brightness

Introduction


In a previous post, I described how I was able to get Bodhi Linux installed on my Samsung Chromebook (armhf architecture). It is set up for a dual boot environment (with ChromeOS), although at this point I don't have plans to boot in ChromeOS.  Although the install process I used included a filesystem image specifically for the Chromebook, there were still additions and tweaks I needed to make to make it more usable.

Chromium Browser Plus Flash


One of the things that could make or break the usability of environment would be the ability to play Adobe Flash content.  Although YouTube has moved away from Flash, there are still many web sites that use Flash content.  Being unable to view Flash content within a web browser would be a pretty major limitation.  Fortunately, there is a solution at least for one browser. While there does not appear to be a version of the Adobe Flash player for armhf, there is a version of the Google Pepper Flash player plug-in (see discussion here) which works with the Chromium browser.

So the first issue would be installing the Chromium browser. When I previously ran Ubuntu in crouton on my Samsung Chromebook I simply installed chromium from the Ubuntu repositories. Unfortunately, for armhf architecture Bodhi is based on Debian, not Ubuntu. I tried grabbing the Chromium browser packages from Ubuntu 12.04 and installing them on Bodhi. Unfortunately, I ran into a lot of dependency issues.  Fortunately, there is a version of the Chromium browser built for the Raspberry Pi computer, which is also uses the armhf architecture. I found the packages in the raspian repository here.  I downloaded all the deb packages (except the ones with "-dbg" in the name) onto my system.  To install them, I used GDebi, which does dependency resolution when installing packages. After getting the Chromium browser installed, I ran into some error messages about nss when running it. To resolve these, I executed the command

sudo ln -s /usr/lib/arm-linux-gnueabihf/nss /usr/lib/nss

With chromium running properly, I needed to use the libpepflashplayer.so 

To get the library file I had previously within ChromeOS opened a terminal (Ctrl+alt+t) and executed the command:

cp /opt/google/chrome/pepper/libpepflashplayer.so ~/Downloads/

I then copied the file to a flash drive for use after installing Bodhi. Alternatively, you could upload it somewhere (for example Google Drive) and then download it after installing Bodhi. Once on the machine, I decided to copy it to /usr/lib.  To do so, you need to use sudo. For example, assuming you have a terminal open to the directory where you downloaded or copied libpepflashplayer.so, you would execute the command:

sudo cp libpepflashplayer.so /usr/lib

Then to test it, I executed the command:

/usr/bin/chromium --ppapi-flash-path=/usr/lib/libpepflashplayer.so --ppapi-flash-args=enable_hw_video_decode=0,enable_stagevideo_auto=0,enable_trace_to_console=0 --disable-flash-3d

You can put libpepflashplayer.so where you want, but I discovered that simply placing it in the plugins directory for the Chromium browser was not sufficient. I had to put it somewhere and specify its path when invoking /usr/bin/chromium.

Once I tested flash content within the Chromium Browser and saw it was working, I edited /usr/share/applications/chromium.desktop and changed the Exec line to:

Exec=/usr/bin/chromium --ppapi-flash-path=/usr/lib/libpepflashplayer.so --ppapi-flash-args=enable_hw_video_decode=0,enable_stagevideo_auto=0,enable_trace_to_console=0 --disable-flash-3d %U

Note, to edit the file you will need sudo. I use gedit to edit, but there are other options available. Once I updated the (launcher) file as described above, I was able invoke the Chromium Browser normally (via application menu for example) and have it process Flash content.

Adjusting Screen Brightness


The Samsung Chromebook has keys labelled for decreasing and increasing screen brightness. These are in the F6 and F7 positions on the keyboard.  Bodhi has a Backlight module providing a widget for controlling brightness, but this did not work for me. What I decided to do was use a simple script and invoke it from the aforementioned keys to control brightness.

I based my script on work done by hkoster1 on the Debian User Forums. First I had to find the brightness device file to send adjustments to.  By searching, I found it at /sys/devices/platform/s3c24xx-pwm.0/pwm-backlight.0/backlight/pwm-backlight.0/brightness.

The script, based on getting an argument of "u" (for up) or "d" (for down) increases or decreases the brightness respectively. It does this by first getting the value from the brightness file (should be an integer between 0 and 2800) and adjusting it up or down by 200.  The script will only set a value between 200 and 2800. If you want to allow a value down to zero, you could modify the script.

You can download my script (into a directory to which you have write access) via the command:

wget --no-check-certificate https://googledrive.com/host/0Bx4fuKmDTtwmZWJMeEtpRWZxY1E

Then execute the command:

mv 0Bx4fuKmDTtwmZWJMeEtpRWZxY1E brightness

followed by:

chmod +x brightness

and then:

sudo cp brightness /usr/local/bin

You can test it by executing:

/usr/local/bin/brightness u

to increase brightness

/usr/local/bin/brightness d

to decrease brightness

Next I needed to assign commands to the two brightness keys. First I had to get to the keybindings menu via "Settings->All->Input->Key Bindings". Since the key, F6, for brightness down was not defined, I had to add it by pressing the "Add" button and then hitting the key. Then on the right I scrolled down to Launch and selected "Command" and then entered into the "Action Params" textbox:

/usr/local/bin/brightness d

You can see a screenshot of this key binding here:




I hit the "Apply" button to make the setting stick. Next, I did the same for brightness up by hitting the "Add" button for F7 and entering the command:

/usr/local/bin/brightness u

and hit "Apply" again.

After this, I could control the screen brightness up and down with the 2 keys.





Wednesday, November 6, 2013

Installing Bodhi Linux on My Samsung Chromebook

Introduction

In previous posts I described my experience with my Samsung Chromebook and why I decided to install Bodhi linux instead of using ChromeOS in conjunction with crouton.  Installing Bodhi, like most Linux distributions, on most Intel or AMD based computers is pretty straightforward (at least on most models).  Part of the reason the ARM-based Chromebooks, like the Samsung Chromebooks, are different is because they have secure boot.  From what I have read, the Chromebooks use UEFI or a subset thereof. The upshot of this on the Samsung Chromebook is:
  1. Installing a different OS is different, and more complicated, than on an Intel or AMD x86 or x86_64 architecture machine.
  2. You have to do things to bypass/disable the secure boot feature that comes with the Chromebook for ChromeOS.
Although I discussed this in previous posts, it is important to note here that what we are talking about is installing a separate OS (in addition to ChromeOS) that will be booted into at machine start. Essentially it is a dual boot, even if you have no intention of using ChromeOS. ChromeOS is still available, although booting to it, although not complicated, is not trivial and not as simple as making a selection from a list of OS's like one might be used to seeing with linx on many Intel/AMD based machines. This dual-boot environment is also different from the crouton situation, in which you use a chroot to run a subset of another OS to which you can switch with a key sequence.

Bodhi Linux is of course not the only option for Linux on the Samsung Chromebook.  One of the earliest options available was Ubuntu, via ChrUbuntu. Other options include installing Arch Linux or Debian. One thing all of these installations require is that you first put your Chromebook into developer mode. Additionally, every time you reboot (or power on) your Chromebook, you will be faced with a warning screen, at which time you need to hit Ctrl+d or wait 30 seconds for it to boot into Linux.

There is one other thing I should point out.  Too often, in my opinion, people or organizations, take credit for some invention which is built on the work of others.  This is the especially the case (again in my opinion) with things like software patents, but that is a discussion for another day.  The information I am providing here is based (very) largely on the work of others.  As I will describe later, I started out with a description and script for installing bodhi on Samsung ARM Chromebook, and used information from other OS installation descriptions to solve issues as I encountered them.  I believe the installation descriptions I worked with were probably originally based on reference documentation, much of which comes from Google. Although what I am providing is partially a product of my own perseverance and frustration, there is very little invention here. I will try to link to information sources I used in coming up with an installation solution for my Chromebook.

Please also note that there have been changes in the Samsung ARM Chromebook that may mean what I did may not work for you, or work without some changes.  As will be pointed out later, the original installation instructions I followed did not work for me.  The existing ChromeOS installation was not set up as the script I initially used expected.  I suspect that this was due solely to a newer version of ChromeOS, but perhaps there have been hardware changes as well.
Finally, please note following these steps permanently deletes all local data and configurations of your Chrome OS, restoring it to a pristine factory state.

As with any case where you install a new OS on a machine, bypassing what the manufacturer provided, I take no responsibility for the results.  If you are not willing to take the chance of something going horribly wrong, don't take the chance. I am not aware of people bricking their device using similar steps, but there are no guarantees. Unless the unbelievable happens, even if things do go horribly wrong, you should be able to recover your machine to the factory defaults following the recovery instructions here. As always, caveat emptor.

The Original Installation Instructions

The main installation source I used for my work to get Bodhi installed on my Samsung Chromebook was this post by Jeff Hoogland, who is Bodhi's lead developer.  Needless to say, without his earlier work I would not have even had a place to start with installing Bodhi on my Chromebook.

I followed the instructions in Jeff's post and got most of the way through the steps.  In fact, if you have a Samsung Chromebook, it is possible his steps and script will work for you.  What I encountered was that after executing the script according to instructions, upon reboot, it booted back into ChromeOS.  As you can see in this forum topic, I was not the only (or first) person to encounter this. I later discovered that the cause was that where previously the ChromeOS had a copy of the kernel installed under /boot, that is no longer the case.  If you wish to see if Jeff's script will work for you, you could go to the end of step #2 in his instructions and then execute the command:

ls /boot

If it does not find the boot directory this means his script will not work for you (unless he has updated since the time I tried it).  If you do find /boot then you hopefully can successfully use his script. My version of the script (based on his) checks for this and hopefully handles either case, but I have not been able to test the case where there was an existing kernel to use, since that was not the case on my Chromebook. The modifications I made to Jeff's script were based on the information I got from debian installation instructions I found here. I am grateful to the author, as I was stuck until I found the description of repackaging the running kernel.

Please note that I not only modified Jeff's script, but I borrowed the description of many of the manual steps as well.

Instructions Using My Script

Just to be clear, the instructions here are pretty much the same as in Jeff's post, except that my script is a modified version of his.  And at the end of the script I have commented out the reboot command in case you want to look around first. So you will need to issue the reboot command manually at the end yourself. Many of my descriptions will parrot Jeff's.

Step 1: Return to Secure ChromeOS Environment

If your machine does not boot into developer mode (i.e. does not give you a message about Chrome OS verification being turned off), you can probably skip this step. Otherwise, I would suggest you do this step. If you have some other OS installed, either via dual boot or via chroot, you should back up any data you need first. Any data you had previously will be lost. Although ChromeOS is backed up automatically, you probably should back up anything on the disk in your Chrome OS environment as well.

You will be reinstalling the Chrome OS image.  While in ChromeOS, you can create the image by entering:

chrome://imageburner

in the browser's address bar and following the instructions. Other options to create the image, on a different computer (Linux, Mac, Windows) are found at the link I will give in this paragraph. What you need to do here is reboot but when you encounter the "Chrome OS verification is turned off" message, do not hit Ctrl+d. Instead hit the space bar and follow the instructions here.  If you did not previously create an image, you can create one on another computer.  I created one on another Linux machine. Note that my Samsung Chromebook has a Snow... ChromeOS image.  You can check the type at the bottom of the recovery screen. Note that if you want to force the screen which says "Chrome OS is missing or damaged" you can boot in recovery mode by turning off your machine and then holding ESC (escape) and Refresh (F3) and hitting the power button. At this point you can plug in your recovery USB drive created earlier. On the Samsung Chromebook you cannot use the blue USB port, but the other one. After plugging in the USB drive (into the correct USB port), if it says the image is not valid, it probably means you selected the wrong one (I did this once) when creating the restore image.

Step 2: Boot in Recovery Mode

Assuming you did not do step #1, you should back up any data you need first. Any data you had previously will be lost. I assume at this point that you have a ChromeOS verified boot environment, either because you never changed to developer mode or you executed step #1 above. You now need to boot into recovery mode. You boot into recovery mode by turning off your machine and then holding ESC (escape) and Refresh (F3) and hitting the power button. You then should hit Ctrl+d and then on the next screen press enter. At this point the system should reboot into recovery mode. Once it reboots into recovery mode it takes a few minutes to configure everything, so please be patient.

Step 3: Get into a Virtual Terminal with Internet Access

After the system has started up, select a wireless access point to connect. to. It might take a few seconds after starting up for the list of access points to get populated into the pull-down list.  After selecting the wireless access point, go to the next screen (the google login screen) but do not log in. Hit Ctrl+alt+-> (where -> is where F2 would be on many keyboards).  This will open up a shell window.  For the username enter chronos and just press enter for the password (there is no password).

Step 4: Download and Run the Installation Script

From the command prompt run:

wget --no-check-certificate http://goo.gl/2OOuG0

followed by

sudo bash 2OOuG0

The commands are case sensitive. Note that "2OOuG0" has two capital letter O's (not zeros) following the digit 2, and the last character is a zero.

After entering the second command (which runs the script), you will be provided some information about your Chromebook. To continue, press enter.

Step 5: Choose How Much Space to Give to Bodhi Linux

The installer will prompt you for how much space you want to give to Bodhi. You should enter an integer amount for how many GB you would like to give Bodhi. On the 16 GB Chromebook the most Jeff (and others) recommended giving to Bodhi is 9 GB (with the maximum being 10).  For information, the initial base Bodhi install occupies around 1.6 GB. Once you select an amount of space to give Bodhi the drive will be re-partitioned automatically and then the system will restart. After restarting,  you will need to go through the ChromeOS setup process once more (see the beginning of step #3). Again, when you get to the google login screen do not log in.

Step 6: Getting the Linux Filesystem Set Up

Get into the virtual terminal again as described at the end of step #3. Then run the same two commands given in step #4, which will download and execute the script a second time.  This time the installation script will see that your drive has already been partitioned and it will begin downloading the Bodhi Chromebook image which it will then install onto the system. Note that this will take some time depending on your internet connection speed since a 300MB tarball needs to be downloaded and extracted. A couple of things to note here. First, my script will write the identification of the target kernel and target disk into a file called bodhiboot.info. This may be useful for debugging purposes.  Secondly, I commented out the line at the bottom of the script which reboots, in case you wish to look around before rebooting.

One other thing to point out is that near the end of the script, the following statement is executed:

cgpt add -i 6 -P 5 -T 1 -S 1 ${target_disk}

where you can find the value for ${target_disk} in the bodhiboot.info file mentioned above. This statement sets the Bodhi Linux partition as the top priority so after reboot it will boot Bodhi and not ChromeOS.  The "-S 1" arguments indicate there has already been a successful boot.  If this is not included (it was not needed in Jeff's script), the first reboot will take you into Bodhi, but subsequent boots will take you back to ChromeOS (you can still follow step #3 to get back to the same chronos virtual terminal if that happens).  The reason I believe the "-S 1" is needed is because if there is no indication that there was a successful boot of the alternative OS, it will boot ChromeOS instead.  Otherwise, if you have a bad boot image, it would continually just boot you into that image. If you wish to boot Bodhi just once and then have it boot back to ChromeOS subsequently (until you are confident you are ready to make Bodhi the permanent choice on every boot), you can remove the "-S 1" from the script (assuming you know how to use the vi editor), or after executing the script but before rebooting, enter the command:

sudo cgpt add -i 6 -P 5 -T 1 ${target_disk}

remembering to replace the "${target_disk}" with the value of the target disk given in bodhiboot.info. Note also that if you reboot into ChromeOS and then get back to the chronos virtual terminal (without logging in) and rexecute the script, it will still recognize that the partitioning has already been done and only execute the second pass of the script. Note also, that your previous files and the 2OOuG0 script should still be there.

If you left off the "-S 1" arguments to the cgpt command but are confident that Bodhi will boot up safely, you can manually execute

sudo cgpt add -i 6 -P 5 -T 1 -S 1 ${target_disk}

again replacing "${target_disk}" with the target disk value from bodhiboot.info.

When you are ready to reboot, enter the command

sudo reboot

and hopefully you will boot into the Enlightenment desktop. Note that the default installed user is armhf and the password is bodhilinux. That user has sudo rights. With the given installation image, there is no login screen and you will be logged in as the default user automatically.
Please also note that based on information I found in the debian install instructions, I found that to get the audio speakers working on the Samsung (ARM) Chromebook, I had to open a terminal and enter the following command (just once):
 alsaucm -c DAISY-I2S set _verb HiFi

To customize the installation to work with special keys like the increase/decrease brightness, increase/decrease audio, and mute audio, I made some additional changes after installing. I will discuss those changes in a future post.

Tuesday, November 5, 2013

Choosing a Linux Distro for my Chromebook

Background

I have been using Linux at home for over 10 years, and I used it at work for over 5 years.  At various times, either at home or at work, I have used Ubuntu, SUSE (or OpenSUSE), Red Hat, Fedora, Scientific Linux, Mandrake/Mandriva as well as a few others.  For desktops, I have used GNOME, KDE, Unity, as well as experimented with things like Xfce and LXDE.  More recently, in my crouton environment on my Samsung Chromebook, I tried enlightenment.

Prior to my experience with crouton, I had for quite a few years used Ubuntu on my home computers.  At times I used the KDE-based variant, KUbuntu and then switched back to regular Ubuntu. When Ubuntu moved away from using GNOME to using Unity, I decided to give it a try.  Those familiar with Ubuntu during that time know that there was a lot of controversy within the Ubuntu (and Linux) community about the switch.  Clearly there was politics (or control) involved.  Although it took time to get used to, over time it got better and better and I found it quite usable.  I currently still have Ubuntu with Unity on my older laptop.  I am somewhat ambivalent about it. I did try GNOME 3 Shell for a while, but found it buggy and went back to Unity.  My previous experience with KDE 4 was pretty positive. If I had a more powerful laptop I might be trying KDE again.  It continues to improve and has really nice eye candy.  

As I explained in previous posts, I liked the Samsung Chromebook because it was light, fan-less, and had a long battery life.  What it is not though, is a powerhouse.  Because of this, while looking at desktop environments for the Ubuntu running under crouton, I came across e17 (enlightenment) as one of the options.  It is very lightweight, compared to things like GNOME, KDE, and Unity.  After using so many desktop environments, it looked, well, different.  It is very configurable.  Unity has its taskbar on the left. With e17, you can put one anywhere. You can even have more than one. You can make them hidden (appearing when you scroll over the edge a la Mac) or not.  You can put various gadgets in them.  I liked the fact that if you clicked on the desktop, it brought up a main menu through which you could navigate to just about everything.  Maybe I was just in the mood for something different, but I liked what I saw. And as I used it for a while, I still liked it.

Bodhi Linux

Using e17 led me to the distribution that showcases it, bodhi. Bodhi builds on top of Ubuntu (except for ARM which I will get to later).  It is a minimalist distribution (at the start), and can run on old and/or low-power hardware.  While Ubuntu (or one of its variants) consistently ranks near the top of distrowatch, bodhi is barely in the top 20 (still not all that bad I guess).

As an experiment, I installed bodhi on an old Acer Aspire One netbook. This was one of the earliest netbooks and is clearly not powerful.  Although I didn't do a lot with it, it installed easily and seemed to work fine. Years ago I took this netbook on a vacation to Europe and it make take an event similar to that in the future for me to use it extensively.  However, based on my use of e17 and this netbook experiment, I decided I wanted to give bodhi more of a try. Oh, there was one other thing. Based on this, it seemed bodhi could be installed on the Samsung (ARM) Chromebook.

Limitations of Linux on ARM

In case I haven't made it clear previously, the Samsung Chromebook is ARM-based, not Intel-based. That is, it does not use the Intel architecture used by Intel (and AMD).  As I found out, this is quite significant.  Over the years, thousands of Linux packages (applications) have been written for Intel 32 bit and 64 bit architectures. For a long time though, there were issues with running a 64-bit version of Linux.  Recently, I probably should have realized that, given issues I had in earlier years on 64-bit linux, I would have similar (actually more) issues on ARM.  As I worked with crouton, I ran into certain packages I wanted (or needed) that were not available for ARM. Previous posts on this blog outline many of these issues.  Although they were not available at the time, based on my experiences, I would recommend someone wanting an inexpensive Chromebook with long battery life for Linux use should choose one of the new Chromebooks employing the (Intel) Haswell chip instead of an ARM based one.

Given, however, that I already had a Samsung (ARM) Chromebook, I decided to go ahead and install bodhi linux following the guide I mentioned earlier.  I will discuss this more in another post. I should point out that the very week I installed bodhi on my Chromebook (after quite a few trials and tribulations), it was announced on the bodhi forums that official support for ARM was being dropped.  Had I known this when I started I might not have gone down the path I did, but now that I have and have been pretty much successful, I am glad I did.

One other thing I alluded to earlier is the fact that unlike the x86 and x86_64 versions of bodhi, the ARM (armhf architecture) version is actually based on Debian, not Ubuntu.  As I will point out in a future post, this brought a few surprises, although to this point no real issues.  One needs to keep in mind that Ubuntu itself is largely based on debian as well.

My Decision to Leave ChromeOS for Linux

5 Months In, Why I Went Back to Linux

After about 5 months of using ChromeOS (on a Samsung Chromebook) along with crouton, I decided to switch back to a full-blown Linux distribution rather than running crouton alongside ChromeOS (in a chroot).  I detailed my earlier decisions and experiences in earlier posts in this blog.

My Experiences with ChromeOS and Crouton

In earlier posts I discussed using ChromeOS on my Samsung Chromebook. Using ChromeOS, especially on Chromebooks, is about working in the cloud. In this case, it is pretty much the cloud as defined by google.  There are many advantages to using a Chromebook in this way, which is how it is intended to be used:
  • Your data is automatically backed up to the cloud
  • Your Chromebook receives updates automatically. Unlike what one might experience with Windows updates, this works pretty seamlessly.
  • Your environment is protected against viruses
My general experience with working this way was quite positive.  The machine booted quickly, usually in about 10 seconds.  The chrome browser started. It remembered previously open tabs (from when I last closed the browser or shut down the machine), and restarted them. Depending on the number of tabs, this processing could take a while. Still, from shut down state, I was up and running quite quickly.
Essentially, the chrome browser is your desktop and is pretty much your environment.  Although there are some exceptions like the file manager and media player,  almost all your applications run inside the browser. With the advances made with HTML5 you can do amazing things within the chrome browser.  Essentially, many of things you run within the chrome browser are web apps.  That is, they are written to work solely in a browser environment, irrespective of the underlying OS.  ChromeOS also supports Chrome Apps, an enhancement of what were previously called packaged apps. Unlike web apps, these apps can use Chrome APIs to access functions of the underlying ChromeOS.  Unlike web apps, the packaged apps can be written to allow offline access to data.

As I mentioned above, my experience with working in ChromeOS was quite positive. Many of the things I use are web oriented. I use twitter, mainly to follow what others write rather than comment myself.  I use Google+ in a similar vein.  I also read several blogs, do searches, and do much of my shopping on-line. For those activities, ChromeOS and the chromebook are ideal.  As I mentioned in previous posts however, there were things which I could not do in ChromeOS, including:
  • Use GNUCash for budgeting and tracking expenses
  • Get data from my Garmin GPS watch via the ANT+ USB stick
  • Use a non web-based e-mail client
  • Use GIMP for doing graphical editing
  • Use my scanner and load the results into GIMP
For some of these, there are on-line alternatives. Obviously, I could use web-based mail. There are also some on-line financial apps and graphical editors.  Other than accessing my scanner and using the ANT+ USB stick, in theory I could use ChromeOS and web-based applications for everything I probably need to do. However, I chose not to because:
  • I am uncomfortable with having all my data, like financial data, in the cloud under the control of some third party.
  • I have been using Linux for over 10 years, and prefer certain open source software (OSS) like GNUCash and GIMP.
My discomfort with having using web-based applications for everything stems from concerns about both security and privacy.  The recent revelations about the NSA and their hooks into numerous firms, including Google, means that my data is neither private nor secure.  Allowing hooks into Google for access by government agencies, makes their system more susceptible to hacks by more nefarious entities.  Since the data is now accessible (at minimum) by both the company whose app I am using and the government, it is clearly less private, despite assurances to the contrary.

Using Crouton for Non-Web Access

As I explained in previous posts, I was able to set up crouton to allow access to things like my scanner and to run applications like GIMP and GNUCash. Crouton sets up a separate (via a chroot) Ubuntu environment which can be accessed via a key sequence.   When I wanted to use my email client, I switched to the crouton environment and accessed it there. Similarly, I used this environment for access to my ANT+ stick and scanner, and to use GIMP and GNUCash.  I also was able to set up software to copy/paste the clipboard between the ChromeOS and crouton environments.

I worked in this environment for months and was able to do pretty much everything I need to do. After a while, I rarely needed to boot up my old Linux laptop to do something.

Why I Decided to Change

First let me say that for many audiences, a Chromebook may be ideal.  They are catching on at schools, and this makes total sense. One feature I failed to mention earlier is the fact that multiple users can share the same physical Chromebook. Since all the data is kept in the cloud (at least if you use only ChromeOS), it is trivial to have multiple accounts associated with the machine. In fact, a student can log into a different physical Chromebook every day and not know the difference.  Administrators can set up the Chromebooks similarly with various extensions, etc..  Also, quite a few Chromebooks cost under $250 at retail prices. It was stated recently that 1 in 5 school districts is using Chromebooks now.

For consumers who are able and willing to work in a web environment, a Chromebook may be the perfect option.  For printing, if they have a cloud enabled printer, they can easily print from their chrome browser. At this point it appears that sales of Chromebooks are increasing, while sales of other types of laptop and desktop computers are decreasing.  If you are willing to buy into the idea of having all your data in the cloud, Chromebooks may be ideal for many consumers.

That last point is the major rub for me however. As I used the Chromebook more and more, and as more reports of the NSA and cooperation of Google and other companies regarding access to user data came to light, I became more and more uncomfortable with the entire premise of using so many web-based apps.  Just what are they doing with my data? How secure is it? We have all seen stories of various merchant sites being hacked and thefts of personal and/or credit card data.  Can you trust their privacy policy? Even if it seems OK today, will they change it tomorrow and if they do, will you be so wedded by that time to their application that you feel you have no choice but to go along with a changed policy that (potentially) gives you less control of your data.

With native applications, at least those that don't send data to the web, I have control of my data, as long as I have adequate security controls in place.  When I use the browser and web apps, I may not know whether I am giving up privacy and/or security.  With native applications I am familiar with, at least I should (hopefully) know.

Given this concern, one might ask, wasn't I already using a solution to this dilemma? After all, I already was using crouton which gave me native (and controlled) access to data.  I could use this environment for things where I wanted to guarantee better control of my data, while using ChromeOS for everything else.  Although this is true, I guess I consider the ChromeOS environment somewhat insidious. You get used to it and use more and more of its apps and after a while you are tempted to use it for almost everything. At that point, you have lost control of most if not all of your data.   Additionally, I got tired of constantly switching back and forth between the crouton and ChromeOS environments.

In the end, while the Chromebook might be ideal for lots of people, I decided it wasn't for me.

Friday, June 7, 2013

My Second Week With My Samsung Chromebook

Overview

I have had my Samsung Series 3 Chromebook for two weeks now.  I am using it almost exclusively now, weaning myself off my Lenovo Thinkpad running Ubuntu 13.04.  The major selling points in choosing the Samsung Chromebook were:
  • Lightweight
  • Very fast boot (under 10 seconds)
  • Good battery life (7.5 hours or so)
  • No noisy fan
  • Cheap (under $250)
  • Ability to use Chrome OS, but side-by-side with Ubuntu Linux (via crouton--described here)
My major concern with choosing a Samsung Chromebook was the ARM architecture. While I believe this helped the performance and battery life, I had concerns about what programs would not be available for the ARM architecture, especially within Ubuntu (via crouton). I have been using linux for well over 10 years and Ubuntu for at least 5. I know that packages for Ubuntu (and/or Debian) typically come from 3 sources:
  • Major repositories - Ubuntu has large (thousands of packages) repositories for each release
  • PPAs: A Personal Package Archive (PPA) is used to get newer packages prior to a new release. They are typically associated with a single application or suite of applications
  • Other: There are other packages available from author websites, or sourceforge, etc.
I knew that Ubuntu had made most packages in their major repositories available for ARM (specifically armhf).  I hadn't thought much about the PPAs and other sources.  I have not done a survey of which packages are and are not available for ARM. I have only looked for packages as needed.  What I have learned so far is:
  • Within Ubuntu and Debian repositories, some packages (for ARM) are missing (or more limited than x86)
  • Within PPAs, few if any have ARM versions
  • At other source sites, few if any packages include ARM versions
  • For some proprietary binaries (for example, for Epson printers) neither binaries nor source are available
I will discuss some of this issue further in this post. The results of this has been twofold:
  1. In some cases I have been forced to choose instead Chrome OS (browser) alternatives. This is is not necessarily a bad thing. After all, the idea of the Chromebook is that you run Chrome OS and do pretty much everything within the browser
  2. In some cases I have downloaded the source, if available, and tried to build the packages on my Chromebook
As I discuss further below, my experience with the Chromebook is largely positive. In my attempts to utilize the Ubuntu environment (via crouton) for some applications, my efforts have not always met with success. However, as I continue to utilize Chrome OS I discover more and more capabilities (and extensions and applications) that lessen my need for Ubuntu functionality and enhance my Chrome OS experience.

Email Client

Sylpheed

As I described in a previous post, I had decided I wanted to use a native email client instead of using a web-based one. I investigated many, including Thunderbird (which I was using at that point) and Evolution (which I had used in the past). After investigating what was available and under the assumption I wanted something lightweight (to be fast and save resources), I chose sylpheed.  I was able to install and start using sylpheed without problem.   However, since sylpheed did not support the display of HTML by default, I wanted the htmlview plug-in. The htmlview plug-in was only available as a source package. I was able to build the htmlview plug-in and use it. I have screenshots of the result in this blog post. Although the HTML tab worked for HTML content, the way it treated links was drastically different on the Text tab versus the HTML tab. As I described in the earlier post, I had some issues with this. Additionally, while sylpheed supports (via the htmlview plug--in) the ability to view HTML content, it does not support composing mail using HTML. While I don't need a lot of HTML functionality, I did utilize in Thunderbird the ability to insert a link such that the recipient could just click on the link and have it processed (typically by opening a tab in a browser).  The lack of this capability meant that mail I sent with links would be more difficult to work with for the recipient(s).  They would have to copy and past the URL into their browser.

After about a week of using sylpheed, I found the limitations above annoying and decided to look again for alternatives.  I discuss the alternatives I tried below:

Geary

Geary is a fairly new, very lightweight, and minimalist email client.  It only supports IMAP, not POP3. I was able to get on a beta program with my main email provider to use IMAP (POP3 was the default).  Although geary was fast and lightweight, it was too minimal in function for me. It did not support importing email from another client. Only if the email was still with the email account on the mail server would it import the mail.  This was a major issue for me. I also found the client too lacking in functionality.  There is only a very small menu which didn't offer much functionality.  I quickly decided that geary was too limited for my needs, and looked elsewhere.

Balsa

The next email client I tried was balsa, which I had not even heard of before. It had more functionality than geary.  For multi-part messages (.e.g. text and HTML) it had separate tabs for the separate parts.  Unlike sylpheed with the htmlview plug-in, you would see the text part (only) on one tab, and the HTML part (only) on another tab. Maybe there was a way to get a combined view (which is what I wanted), but I didn't see it. I quickly decided balsa was not what I liked either. Maybe I was spoiled with the (more heavyweight) email clients I had used previously.

Evolution

I had not used Evolution for a while, preferring Thunderbird. I decided to give it another try. In addition to email, it supports address book and calendar, including synchronization with Google Calendar which I decided to utilize.  I installed Evolution and although it had a lot of function (plus a fair number of plug-ins with which to extend it further), I was shocked by how slow it was to start.   The first couple of times I started it I assumed it must have crashed, it took so long.  Although I did not check, given how long it took to start I felt like Evolution was probably too heavyweight and resource intensive.

Thunderbird

Given my disappointment with Evolution (especially the time to load and start), I decided to investigate Thunderbird again. I wondered whether on my Chromebook (not super-powered) I would see similar behavior. I installed it and when I started it it came up quickly. Although I didn't need it, I rediscovered the feature where, during initial configuration, when you specify your email address it recognizes (in many cases) the email provider and fills in many of the send and receive server settings for you.  Thunderbird supports showing HTML (all part types merged) as well as generating HTML mail.  It also has a very extensive library of extensions.  The performance seems fine, and given the rich functionality, I think I will be sticking with Thunderbird for a while.  I guess as far as email clients go, this was one case where I was better sticking with what I was used to rather than trying something new.

Enlightenment Desktop Environment

As I had described in previous posts, I had decided to try enlightenment, because it was lightweight and had an interesting look and lots of nice features.  I was, and am, largely happy with it to this point. However, the version in the Ubuntu repositories was not the latest version, which is 0.17.3. I looked for  a PPA with the latest version and found one. Unfortunately, it did not have versions for ARM.  Although I was not having issues with the version of enlightenment I had, I decided to grab the sources and see if I could build it.  Enlightenment has a large number of components which had to be built before the main enlightenment package. These were ecore, e_dbus, edje, eet, efreet, eina, eio, embryo, and evas.  It took me a while but I was able to successfully build all these packages.  After some hiccups I was able to build the main enlightenment application. I decided to let it install to /usr/local instead of /usr so as not to wipe out my older e17 in case of problems. This caused issues in getting it invoked with the paths set up correctly, but eventually I got it working by having starte17 invoke a shell script which set the paths before invoking enlightenment_start. I had read that it was important to not reuse the ".e" configuration directory when moving to 0.17.3. So, to be safe, I renamed it and let it create a new one. This caused me to lose my earlier configuration but this was not a big deal for me.

At this point I have enlightenment 0.17.3 working. I see minor enhancements.  One strange thing was, for some windows, I actually had to click on the left button to minimize (iconify)--tapping on the trackpad did not work. I changed the window focus setting from "Click Window to Focus" to "Window under the Mouse" to resolve this.

Enlightenment is quite fast. It's shelves can contain multiple sections (gadgets), including:
  • Virtual desktops. These rectangles show icons representing non-minimized applications running in that particular virtual desktop
  • Minimized applications. This rectangle (called iBox) shows an icon for each minimized application. The iBox is actually a gadget on the shelf.
  • Favorite applications. This section (called iBar) contains applications you added via settings to be visible here. The iBar is actually a gadget on the shelf.
Here is a screenshot of the Desktop with no applications running:


And here is a screenshot of the Desktop with one minimized application and one on the desktop:


On the shelf at the bottom next to the time and date and the Enlightenment menu icon, you can see rectangles repesenting 4 virtual desktops. The leftmost shows the Nautilus Files application is running. Next to the 4 desktop rectangles is the iBox showing minimized applications. You can see the icon for GIMP there.  Next to this is the iBar, where you place favorite applications. On the far right of the shelf I placed the Tasks gadget which shows currently running applications.

You can move the gadgets around and even create more shelves. Since taking these screenshots, I have created a shelf on the left with the iBox and Tasks gadgets, one on the right with the iBar and moved gadgets around in the bottom shelf. These changes took only a few minutes. I later put separate applications in the different iBars.  Here is a new screenshot:


The more I use and learn about Enlightenment, the more impressed I am with it. It seems easier to do what I need to do than other desktop environments I have used. Because of this, I may want to consider Bodhi Linux in the future.

NixNote

NixNote (also called NeverNote) is an open source clone of Evernote.  I have used it on Ubuntu for a while. I liked have the files edited locally. Unfortunately, while there are install packages for Linux i386 and x86_64 (as well as for Mac OSX and Windows), there are none for ARM.  However, Nixnote is essentially Java so I tried downloading it and trying to get it run on the Chromebook (within the Ubuntu environment). Unfortunately, it has a dependency on the Qt Jambi library. Qt Jambi is a Qt-Java bridge. Although it is available for Ubuntu/Debian, there is currently no armhf package. Thus again, I was forced to try to build it myself.

The build of Qt Jambi worked until the examples stage. It failed generating some of the WebKit examples. Since the Qt Jambi library had been built, I concluded I had gotten far enough. I moved the new library to /usr/share/nixnote/lib, renamed it to reflect ARM architecture, and adjusted the nixnote.sh file to add this new jar to the classpath. The jar file is a jar file that contains native libraries (.so files) and loads them.  Upon attempting to start nixnote, java.lang.UnsatisfiedLinkError trying to instantiate the QWebView class from WebKit. Apparently the WebKit part of the Qt Jambi library was missing and was needed.

I searched on the web for clues about building Qt Jambi and the WebKit dependency. I learned that some of the Ubuntu development related packages for Qt for ARM did not include all the WebKit components. The suggested solution was to build Qt from the Qt source and point to it when building Qt Jambi.

So my next step was to attempt to build Qt. I downloaded Qt from the website and ran the typical "./configure" step followed by make. The "/.configure" step itself took 20 minutes or so. The make step ran for a while and then generated an error like the following:

cc1: fatal error: .pch/release-shared/QtGui: No such file or directory

I looked on the web for something about this as well. I found this site, where they described the error and indicated that use the "-no-pch" (no pre-compiled headers) option on the "/.configure" step would resolve the problem. It is interesting to note that people developing for the Raspberry Pi device, which is an ARM device, are encountering and solving many of the ARM specific linux issues.

Although it took over 8 hours, I was about to build Qt successfully. I installed Qt under the normal place under /usr so Qt Jambi could find it.  

I won't go into all the additional details. I copied the jars into /usr/share/nixnote, updated /usr/share/nixnote/nixnote.sh to add these libraries to the classpath. When I tried to execute it still failed, with error:

QtJambiInternal.buildMetaData: Writer for property content takes a type which is incompatible with reader's return type.
Exception in thread "main" java.lang.NoSuchMethodError: com.trolltech.qt.webkit.QWebFrame.setTextSizeMultiplier(D)V
at cx.fbn.nevernote.gui.BrowserWindow.<init>(BrowserWindow.java:626)
at cx.fbn.nevernote.NeverNote.<init>(NeverNote.java:552)
at cx.fbn.nevernote.NeverNote.main(NeverNote.java:882)

At this point I did not know if the problem was building with the wrong level of Qt (4.8.4 versus 4.7) or some issue with building the packages for the ARM architecture. For the time being I am going to try working with the web version of Evernote instead. Eventually I may look into NixNote again.

Passing Data Between Chrome OS and Linux

Since I am running applications in both the Chrome OS and Linux (crouton) environments, there are times when I would like to take data from one and use it in the other.  For data in files, putting the file under the Downloads directory is the answer, since this is shared in both environments. However, there are times when I would like to copy a small amount of text in one environment and paste it in the other. For example, I may want top copy some information from the browser in Chrome OS and paste it into GnuCash running in the crouton Linux environment.  An obvious way to do that is to copy the clipboard contents between the two environments when switching from one to another. In searching for something like this, I found this under the crouton project on github. Here drinkcat was describing an attempt to do exactly what I mentioned.  I found that drinkcat had a fork of the crouton project on github here. I grabbed some of the pieces related to the clipboard stuff and decided to try it out.

Because there are two environments involved, it is of course necessary for pieces to run in each.  On the Chrome OS side you need croutonclip.crx. By placing this in my Downloads folder and clicking on it within the Files application (in Chrome OS), I was able to install this into Chrome.  Starting the application opens a socket under the covers to exchange information with the crouton environment.  On the linux side, there is an addition to the croutonwm (window manager file) so that when a switch between environments occurs, a croutonclip  shell script is executed. I won't go into much detail here, but suffice it to say that this script determines whether the switch was from Chrome OS to Linux or Linux to Chrome OS and transfers the clipboard contents between the environments accordingly.  I tried it out and I was indeed able to copy something into the clipboard in one environment and paste it in the other. 

Although this is basically doing what I need, I am considering making some improvements:
  • The croutonclip script has a FIXME comment saying it could accidentally get invoked multiple times (simultaneously) if the environments are switched in succession to quickly. I would like to fix this.
  • When I am in Thunderbird (email) and encounter a URL, I would like to open a tab in the Chrome OS browser and switch to view the content there, rather than viewing it in a browser in Linux. I would like to modify the croutonclip script to allow me to pass in text to add to the clipboard (possibly with a prefix indicating a URL) and modify the croutonclip app in Chrome OS to take this URL and open up a tab with it in the browser.
  • I would like to investigate whether the croutonclip app could be made into an extension.
  • I would like to investigate how to package the croutonclip functionality in such a way as it is easy to install, assuming it does not get pulled into the crouton package itself.
I hope to do some work on this in the near future and describe the results in a future post.

Working in Chrome OS

Much of my discussion in this post has been about working with Linux (via crouton).  Despite what this may imply, in actuality I do my work within Chrome OS.  

X-notifier


As I described in this and previous posts I am using a native email client running on Ubuntu (via crouton). However, as I also described previously, I installed X-notifier to monitor my email accounts. It puts a little icon in the Chrome browser and lets me know when I have email on any of my accounts. It also has an associated menu that allows me to visit the web email client for the accounts.  Below I show the icon without mail and with mail respectively:
 

This allows me to know when I have mail, check it on the web quickly and discard what I don't need to save. Often I only use the native email client (Thunderbird) when I want to save and/or respond to email. Occasionally X-notifier would seem to hang when checking mail, but that problem largely went away when I turned off notifications within the options.

Text Editing

One thing I was missing within the Chrome OS browser was a text editor. While I could use the scratchpad, it saved the text in an HTML format. I wanted a simple text editor. Then I found Text on the Chrome web app store. This was exactly what I needed. I no longer needed to switch over to Linux to edit a text file on my file system.

Summary

The more I use my Chromebook, the more I love it. Despite some issues described above, the portability and long battery life make it a real winner for me. I love the Chrome OS, but when it doesn't do something I need, crouton lets me switch into Ubuntu.  In the future, I plan to see how I can further enhance my experience, especially when switching back and forth between Chrome OS and Linux.

Tuesday, May 28, 2013

An Early Assessment of My Samsung Chromebook

Initial Expectations

In my first post, I explained my decision-making process in purchasing a Samsung Chromebook. Then I explained my preparation, receipt and initial use, and adding Linux. I have had my Chromebook less than a week, but have spent much of that time either using or blogging about it.

Maybe my initial expectations weren't all that great.  I knew there were limitations, including:
  • There was limited memory (2 GB RAM)
  • There was limited storage (16 GB SSD)
  • You were expected to use mainly Cloud storage and web-based applications
  • Certain things were not possible within the normal Chrome OS environment and I would need to use Linux (via crouton) to do them
To be honest, the 2 GB RAM did necessarily seem like a significant limitation to me.  I have run Linux on Thinkpads with 2 GB for years. I upgraded my Thinkpad to 4 GB, but noticed much of the time I was not utilizing much if any of the new memory.  Also, unlike many users (I guess), I don't play a lot of games or watch a lot of movies on my laptop (I have  Google TV plus cable). However, I was a little concerned that running Linux (via crouton) in addition to the regular Chrome OS environment might require significantly more resources. Additionally, I was aware that the Chrome OS uses a separate process for every tab and the more tabs you use, the more resources you are using.

The limited storage was a slight concern. I have never had large hard drives on my personal laptops, and with USB drives, SD cards, and Google Drive (Cloud storage) I had plenty of additional storage I could utilize. I prefer not to put everything in Cloud storage, but I have other options available.

The capabilities and functionality of web-based applications have improved markedly over the last few years.  You used to have to download some sort of native-code plug-in to do just about anything. Now most web-based applications are able to run without such plug-ins.  My concerns about web-based applications and Cloud storage are more about security and privacy than anything else. For others, the need to be connected to do many things is an issue, but since I almost always use my laptops at home (where I have connectivity) or other places with connectivity, that is not a real issue for me.

The fact that certain things cannot be done in the normal Chrome OS environment is a valid concern.  The availability of crouton allows me to use my Garmin ANT+ USB stick (works with my Garmin GPS watch) and hopefully access my scanner (there are issues within crouton because the machine architecture is ARM instead of Intel or AMD). Although I have chosen to run some additional programs within the crouton Linux environment, I am surprised by how many of the web-based options that are available.

My Actual Initial Experience

Switching Between Chrome OS and Linux Environment


When I investigated using the Chromebook, my expectation was that I would use it as follows:
  1. I would boot up the Chromebook normally
  2. I would immediately use Ctrl-Alt-T to open a shell and start the linux chroot environment running Ubuntu with the Enlightenment (e17) Desktop Environment
  3. I would constantly be switching back and forth between the two environments, especially to look at email in Linux and the browser in Chrome OS
Although I have used Linux for over 10 years and love it, I would actually prefer to remain as much as possible within only the Chrome OS environment.  Because of my desire not to use web-based email to read, compose, and (most importantly) store my email, I thought I would need to continually check the Linux environment to check email. However, when I found X-notifier, that all changed. With this notifier running in the Chrome browser (running in the Chrome OS), I could be notified of new e-mails. I could also check e-mails on the web (each email account individually). Normally these emails are things I don't care to read at all in detail (like advertisements) or even if read, need not be retained. So I can delete many of these emails from the web-based email account. Only when there are emails I wish to retain and/or respond to, do I need to switch over to the Linux environment and run the sylpheed email client.

For this reason, I don't need to start the Linux chroot immediately upon starting up the Chromebook every day.  From X-notifier I can check and discard email without needing to access it from my email client.  The other things I need Linux for (Garmin ANT+, scanner, LibreOffice, GIMP, GNUCash) I would access at most once a day. For this reason, I am starting the Linux chroot only for particular tasks and then exiting it.  There may be no reason why I can't leave it running, but I figure I should save the resources and limit any possible (although unlikely) security issues when I am not needing to use it.

Working with Files


The Files (file manager) application in Chrome OS is simple, but sufficient. When I installed the 27.0 version of Chrome OS the Files application improved. If you have subdirectories (sub-folders) it now allows you to show that tree structure on the left. Previously it did not.  Incidentally, although the 27.0 version of Chrome OS had become the latest stable version the day I received my Chromebook, it was not showing it available for my Chromebook, even after several days. I saw a suggestion somewhere that you could temporarily switch to the Beta channel, let it install the Beta version (supposedly the same level), and then switch back to the Stable channel (and it would not revert). That is what I did. Here is what the Files App looks like:



As I stated previously, I would like to be able to create additional folders in local storage at the top level  rather than putting them under Downloads. Or I would like "Downloads" to be called "Local Storage" or something like that. But that is not a big issue and a characteristic of Chromebooks I will just have to get used to.

I am able to sort files within a folder, which is important since my music files are typically named such a way that if sorted by name they will be in the correct order for playing in sequence.  Selecting music files shows the option to listen to them. Very simple.

I have not done a lot with files so far, so I don't know how Chrome OS decides which applications are associated with certain types of files (file extensions). I tried clicking on an arbitrary file and Chrome OS popped up a message saying it didn't know what to do with it and to look for an app in the Chrome web store for working with that type of file. So perhaps you have to install apps that specify that they work with that type of file (extension).

One important thing to note (for crouton users) is that the Downloads folder is shared between the Chrome OS and Linux chroot environments. Thus, you can share common files or use the area to get files from one environment to the other.

Playing Music


As mentioned in the section above, within the Files app, if you select one or more audio files it gives you the option of listening to them. I tried some Ogg Vorbis (.ogg) files myself, but I am sure it works the same with mp3 and other formats.  The music player is very simple. I don't see options for more control (like using an equalizer). This is what it looks like:



There appear to be other music players in the Chrome web store, like Better Music for Google Play Music, that may be better. Of course there are also web applications, or if necessary, there are numerous Linux music clients available that could be used within the crouton environment.

It should be noted that since the Chromebook is really for use with the Cloud, I expect you are expected to keep your music files in something like Google Drive. There is a Music Player for Google Drive on the Chrome web store for playing your audio files stored in Google Drive. It looks like it has a little more functionality than the basic player I have been using.

Browsing


The browser in the Chrome OS is of course Chrome.  Since I was essentially using this (Chromium) by choice in Linux anyway, there was no learning curve for me.  Unlike many other browsers supporting tabs, this browser uses a separate process for each tab. The advantage to this is if one particular tab has an issue, you can kill it without restarting the entire browser. The disadvantage is that it uses more resources.  I have read that on a Chromebook if you open too many tabs and use too many resources, it will automatically close some of the older tabs. I have not experienced this yet.

Watching Videos


As I explained previously, I don't usually watch movies on my laptops, I use my TV (which has Google TV attached and cable as well).  I do of course watch embedded videos at various web sites. Some of these are Flash and some of these are HTML 5.  I have not watched a lot of HTML 5 videos so far, but so far I have not had problems. As far as Flash goes, some seemed fine. However, I tried watching live (Flash) video streams from the French Open on Tennis Channel and it was not successful. However, after updating to the 27.0 version of Chrome OS, which includes a new version of Pepper Flash (the Chrome Flash player), I was able to view these streams successfully.  There were occasional pauses, but I don't know if that was a limitation of the Chromebook itself or something with the stream. At other times, I have had it fail to start and have gone to the Accessibility page to look at the video streams. This has worked fine. The broadband player is the one I sometimes have issues with.

I tried WatchESPN but apparently that is not normally supported on the Chromebook (or Linux, unless you use Wine). Then I found on the web that it was a user agent issue. By changing the user agent I was able to watch it after all.

Printing


I have used network printers for some time, so this is the approach I would use anyway. I don't think USB attached printers are supported in Chrome OS, although theoretically you could do it within the crouton Linux environment. My two printers are not new Cloud Ready Printers, but I was able to get my classic printers working with Google Cloud Print.  I actually did this on my Thinkpad (running Linux) prior to getting my Chromebook. I have tried going to the Google Cloud Print site and uploading a file to print, as well as using the Cloud Print extension to print from a web page. Both worked, although interestingly, the former case seemed  to work faster.

Below is the Google Cloud Print page in the Chrome browser showing available print targets. The Samsung and Workforce 610 are my network attached printers.



Email


I described in earlier posts my decision to use sylpheed as my email client and the steps I took to get HTML viewing working. As I described earlier in this post, I am using X-notifier to monitor my email within the Chrome OS browser. When it indicates I have email, I use it to open the web account, and delete unwanted emails. Only if I find emails I want to keep do I start up the Linux crouton environment, start the sylpheed email client, and process the remaining emails. Note that I have my sylpheed client set to delete the emails from the web account when it retrieves them.

Although I have the ability, via the htmlview plug-in, of viewing HTML mail, I cannot compose HTML mail (at least without patches). I didn't think this would be an issue, but I realize now this is precluding the ability to insert links such that the reader can simply click on them. This limitation is something I need to consider. If I decide I want more fully featured HTML support, I may have to consider going back to Thunderbird or finding some other email alternative.

Accessing my Garmin USB Ant+ Stick


I have described in earlier posts the steps I took to be able to download data (via python-ant-downloader) from my Garmin watch via the USB Ant+ stick and to use pytrainer to process the data. I have done this a couple of times already without issue. Note that I zipped and copied the .pytrainer directory from my home directory on the Thinkpad, and unzipped it under my home directory within the crouton Linux environment in order to restore my previous activity results.

Office Suite (Documents, Spreadsheets, Slides, etc.)


I installed LibreOffice 4 from the Ubuntu repository (via synaptic). I haven't needed to use it yet, but did verify that it seemed to be working. I have used it, or its cousin OpenOffice (no need to discuss the politics here), for many years. It has more than enough capability for me.

Personal Finance Software


I have used GnuCash as my personal finance software for a while now.  It uses double entry accounting and took some getting used to, but I am used to it now. People who use Quicken products may find it difficult to transition to. I was able to migrate my preferences and settings from my Thinkpad to my Chromebook by zipping up the .gnucash directory under my home and restoring it under my home directory under by crouton Linux directory on my Chromebook. I also to copy over the directory where I stored my GnuCash data to the my home directory (in Linux) and open the main file so that GnuCash had everything. After that I was all set.

Image Manipulation (like PhotoShop)


I have used GIMP for image manipulation for years. It is very powerful, if not the easiest tool to understand. There are a myriad of things it can be used for--I have barely scratched the surface myself. I installed it under the crouton Linux environment from the Ubuntu repository (via synaptic). It installed and seemed to work fine.

Notes

I have been using Evernote for taking and organizing notes for some time now.  Since I was using linux, I was using NeverNote (aka NixNote). I have been happy with the capability of this open source clone.  I haven't decided yet whether to just use the web version of Evernote or to install and use NeverNote/NixNote instead. I will be investigating this soon.

Things I Want to Investigate Next

Clipboard Synchronization


It would be useful to share the clipboard between the Chrome OS and crouton Linux environments. That is, I would like to copy something within Chrome OS and then switch into Linux and get it from the clipboard. And of course, go in the opposite direction as well. There is a code project that supposedly supports this here.

Opening URLs from Linux Mail Client in Chrome OS Browser


As I described in a previous post, I would prefer to view web stuff only in the Chrome browser. Thus, within the native email client running in Linux, if I click on a link, I would like to send the URL over to  the Chrome browser running in Chrome OS.  This will take some code on the Linux side and an extension on the Chrome OS side. Hopefully this will not be too hard.

Get My Scanner Working from Chromebook


As I described in previous posts, I don't think I can get my network access to my scanner working because of the ARM architecture. Hopefully I will be able to via USB cable though (within the crouton Linux environment). I will first try with just Xsane and the if necessary, try building the epson iscan program.

Summary


Although I haven't finished migrating everything I do from my Thinkpad to my Chromebook, at this point I think I will be able to. The only real open question is the scanner.  Even though it is less than a week my Chromebook has far exceeded my expectations. I really love it:
  • It boots up in less than 10 seconds
  • There is no noisy fan. It stays pretty cool
  • It is as light as a feather
  • The battery life seems great
  • I can run Linux applications I need within crouton, but otherwise (and mostly) stay within Chrome OS
  • It works well with the Cloud (of course). I just need to start utilizing it more.
  • As discussed above, I can do just about everything I need to do with it.
  • It was cheap. The low end Chromebooks are close to being commodity hardware
One thing I still wonder is whether or not a family member or friend who doesn't use Linux and is just a user and not a techie would be able to switch to a Chromebook from a Mac or Windows laptop.  This is something I will investigate (and perhaps discuss) in the future.

I have read reviews and stories of people who have gotten Chromebooks, found them wanting, and returned them.  Certainly if you are wedded to certain Windows or Mac programs like Quicken, Photoshop, or iTunes and cannot (or will not) consider alternatives, then the Chromebook is not for you.  There are quite a few potential issues,  as explained for example in this early article, although many things have changed (including pricing) over time.  Like I said, right now I am very pleased with how things are going with my Samsung Chromebook so far. But, it has been less than a week. Over time we'll see if, possibly with some enhancements I will make, whether I can really do everything I want to do with my Chromebook.