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.

3 comments:

  1. Hello! Did you ever work on the issue of opening a URL in the Chrome OS side, instead of the Linux side? Do you have a follow-up post to this? I just got my chromebook yesterday and the clipboard, and URL openings are the only problems so far!

    Thanks!

    ReplyDelete
  2. Why are there no real email clients available for Chrome OS?!
    I want to use this in a business environment.
    Gmail web is not usable compared to Thunderbird. Especially with multiple accounts.

    ReplyDelete
  3. Robert, Chrome OS is largely browser based. So you typically use the Chromium browser for email. If you want something like thunderbird, consider something like crouton. You can switch back and forth between ChromeOS and Ubuntu linux. You can install thunderbird, or any other linux email client within Ubuntu. You have to be in developer mode though. There is a lot of doc on the Internet on how to do this.

    ReplyDelete