Sunday, May 14, 2017

Upgrade Ubuntu to 16.04 in Windows 10 Creators Update

If you have configured the Ubuntu Bash Shell on Windows 10 and then received the Windows 10 Creators Update, your Ubuntu Bash Shell will not be upgraded automatically. To review, the Ubuntu Bash Shell on Windows 10 is configured to run Ubuntu 14.04. But with the Windows 10 Creators Update, Microsoft has upgraded the Ubuntu Bash Shell to run Ubuntu 16.04.

So after you receive the Windows 10 Creators Update, you will want to upgrade the Ubuntu Bash Shell to the most recent Ubuntu 16.04 release.

Which Version of Ubuntu am I running?

It's easy to check whether or not you need to upgrade the Ubuntu Bash Shell on Windows 10. Just open a Bash window and run the following command:
lsb_release -a
You should see output similar to the following:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.5 LTS
Release:        14.04
Codename:       trusty

Upgrade Ubuntu With do-release-upgrade

The easiest way to upgrade the Ubuntu Bash Shell on Windows 10 to Ubuntu 16.04 is to perform an upgrade command from the Bash shell command line:
sudo do-release-upgrade
Be aware that the upgrade process will take some time. Also, you will most likely be asked several questions along the way so make sure to pay attention to the upgrade process once it begins.

Once the upgrade process has completed, you should see something like the following:

Ubuntu 16.04 Upgrade

I pressed y to restart the system but it actually did nothing. So I would suggest that you can just press N when prompted to restart.

If you run lsb_release -a again, you should see output similar to the following:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.2 LTS
Release:        16.04
Codename:       xenial

Thursday, December 1, 2016

Well that didn't last long

Unfortunately, using Ubuntu Desktop as my primary OS has come to an end just after six months of "giving it the ol' college try". Why, you might ask? Two words: graphics drivers.

For over sixteen years, I have contributed spare computing power to SETI@Home, and the fastest way to earn credits is to set up GPU computing on BOINC. But in order for GPU computing to work properly on BOINC, it needs to work with an OpenCL library.

  • Open Source Drivers (radeon, nouveau, intel): While the open source drivers for AMD, Nvidia, and Intel all have varying degrees of support for hardware acceleration OOTB, one thing they do not support is OpenCL. While Mesa or Beignet has open source OpenCL support, these libraries do not work with BOINC.
  • AMD Proprietary Drivers: Before Ubuntu 16.04, AMD actually provided the proprietary FGLRX drivers for Linux which actually worked with BOINC after doing some shoehorning to get the drivers and BOINC to play nice together. Since 16.04, however, they have dropped Linux support of all but their most recent graphics chipsets so trying to run GPU computing on BOINC with AMD is nearly impossible unless you have one of their latest cards.
  • Nvidia Proprietary Drivers: After upgrading to Ubuntu 16.04, I went ahead and switched out my AMD R7 250x for an Nvidia GTX 750 Ti since on the surface it appears Nvidia supports Linux better than AMD does. However, trying to find the right driver for the GTX 750 Ti was a nightmare as I posted in Enabling Nvidia Hardware Acceleration in Google Chrome on Ubuntu 16.04. And then once I finally did find the right driver version for my Nvidia card, the very next graphics driver update broke the entire setup completely and my Ubuntu Desktop reverted back to the open source nouveau drivers.
  • Intel Graphics Drivers for Linux: While I had varying degrees of success with getting AMD and Nvidia to churn out GPU credits for BOINC under Ubuntu, for the life of me I could not get my integrated Intel graphics GPU to work with BOINC at all. I tried the open source Linux drivers, I tried Beignet, I tried whatever closed-source libarary they provide for OpenCL. While I could get BOINC to recognize the fact that I at least had an Intel GPU, every time it tried to download work units for the Intel GPU it failed with a computation error.
Unless you have eccentric requirements for GPU usage under Ubuntu like myself, Ubuntu is still a great OS for doing everything else you could possibly want. While Ubuntu Desktop is no longer my primary OS (yes, unfortunately Windows 10 is back), one of the first things I did was to set up a VMWare virtual machine running Ubuntu Desktop 16.04 for my development activities. Even though Microsoft is actively working on the Ubuntu Bash Shell on Windows, it still doesn't compare to running Ubuntu in a VM and doing all of my development efforts therein.

Therefore I am still a committed user of Ubuntu, even though it is now running as a Guest OS in a VM instead of the primary OS on my PC. And I am still a huge fan of Ubuntu Server for running all of my workloads in the cloud. So stay tuned, the Ubuntu Blog lives on.

Tuesday, October 25, 2016

Enabling Nvidia Hardware Acceleration in Google Chrome on Ubuntu 16.04

I bought an ASUS GeForce GTX 750 Ti for my Ubuntu 16.04 machine to replace an AMD video card and I noticed right away that Chrome was not operating at peak efficiency. So I checked chrome://gpu and sure enough the hardware acceleration was disabled. What to do?

First, I looked at chrome://settings to make sure hardware acceleration was enabled there. Going to Show advanced settings... --> System showed that the "Use hardware acceleration when available" option was checked. So far so good.

Next, I looked at chrome://flags and enabled the "Override software rendering list" option. I restarted Chrome but when I went back to chrome://gpu hardware acceleration was still disabled.

Doing some research pointed to the fact that the Chrome GPU sandbox was not playing nice with the Nvidia driver, or vice versa. The way to get around this issue was to edit my Unity launcher shortcut found at ~/.local/share/applications/google-chrome.desktop and add the --disable-gpu-sandbox command-line option to the following line:

Exec=/opt/google/chrome/chrome --disable-gpu-sandbox %U

After closing and reopening Chrome, chrome://gpu finally showed that hardware acceleration was enabled on most of the items listed under Graphics Feature Status. The two items that were still disabled were:
  • Rasterization
  • Native GpuMemoryBuffers
Going back to chrome://flags, I enabled the "GPU rasterization" option and restarted Chrome which enabled the Rasterization item. To get the Native GPU Memory Buffers to work, I had to add the --enable-native-gpu-memory-buffers command-line option to the Unity launcher shortcut. Closing and reopening Chrome enabled the Native GpuMemoryBuffers item.

Doing all of this work greatly improved everything Chrome handles including video playback. A neat place to test out the new and improved performance is the WebGL Aquarium page. Select 1000 fish and check the FPS (mine is pegged at 60 fps which is equal to the refresh rate of my monitor).

Note

Getting the right Nvidia proprietary driver to install properly on Ubuntu 16.04 for the GeForce GTX 750 Ti was nothing short of a nightmare. The first thing that I had to do was add the Proprietary GPU Drivers PPA which gives you a lot more options of various Nvidia driver versions than the standard Ubuntu repos do.
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
I tried several different versions of the Nvidia driver and had serious issues with each one I tried. So I went to the Nvidia Download Drivers page and looked up what the appropriate Linux 64-bit driver should be for my card. At the time of this writing, version 367.57 was the one that came up and can be installed with the following command:
sudo apt-get install nvidia-367

Thursday, August 25, 2016

How to install 10 Band Equalizer for Rhythmbox

I like Rhythmbox on Ubuntu Desktop but it does not come with an equalizer out of the box. Fortunately, there is a 10 band equalizer that you can install as a plugin and it works really well.

Here are the steps to install the 10 band equalizer with Rhythmbox version 3 and later:
  • Create a directory under your home directory for storing the 10 band equalizer plugin
    • mkdir -p ~/.local/share/rhythmbox/plugins/
  • Go to the newly created directory and get the source for the plugin from GitHub
    • cd ~/.local/share/rhythmbox/plugins/
    • git clone git://github.com/luqmana/rhythmbox-plugins
  • Now go to the equalizer plugin directory and install the plugin
    • cd rhythmbox-plugins/equalizer
    • sudo apt-get install gir1.2-gconf-2.0 python-lxml
    • ./install.sh --rb3
  • Open Rhythmbox and go to the Tools → Plugins... menu and enable the equalizer

  • Finally, you can go to Tools → Equalizer and change the settings to suit your music taste

That's it! Happy equalizing!

Sunday, August 21, 2016

How to fix a broken fstab in Ubuntu

I was messing around with my /etc/fstab settings which connect my Ubuntu desktop to my NAS server via Samba and I screwed it up. When I restarted my desktop, Ubuntu would just hang asking for a password and yet I could not provide the password and get to the login screen. Boot failure!

So I found this little nugget of wisdom on "How to fix a broken fstab in Ubuntu" which got my desktop going again:

Fix Broken /etc/fstab

    • Boot into the Ubuntu Live CD
    • Open terminal
    • Run the following commands to mount the partition with the root / directory and edit /etc/fstab:

sudo mkdir /media/mount
sudo mount /dev/sd[a..z][1..n] /media/mount
sudo vi /media/mount/etc/fstab

    • Make your changes, save, and then reboot without the Live CD

In my case, I just placed a comment hash # on the fstab line that defined the Samba share so I could get into my desktop again and fix the problem.

Sunday, April 10, 2016

overGrive!

In my earlier post about Google Drive for Linux I enumerated several options available for getting Google Drive to work under Linux.

The first option I tried was actually not on the original list. After I installed a Windows 10 Home virtual machine on my Ubuntu 15.10 Desktop, I downloaded and installed the Google Drive client for Windows. I set up a Shared Folder between my Ubuntu host OS and the Windows 10 guest OS so that Google Drive would actually sync everything to my /home/<user>/Google Drive directory under Ubuntu. I thought this was going to be an easy solution to the problem of not having an official Google Drive client for Linux.

Turns out I was wrong. The Google Drive Windows client completed the initial sync process which was good, but then it would immediately bomb out and quit with an error which was bad. Not much of a point having the Google Drive client on Windows if it's not going to stay opened and monitor the Google Drive shared folder. Therefore I uninstalled the Google Drive Windows client from my VM and went with my second option.


So I decided to give overGrive a try. Sure I had to pay $4.99 for a license to run it but I thought that was a reasonable price for a dedicated Google Drive for Linux client. Purchasing the license with PayPal was simple and downloading the latest DEB package for Ubuntu was trivial.

I started going through the installation instructions for Ubuntu and was doing fine until I hit the section about pressing the "Connect account..." button and linking overGrive with my Google Drive account. For whatever reason, Chrome kept opening up a new window with no tabs instead of bringing me to the Account Management screen in Google.

After contacting overGrive support, I did some searching and came across this thread Ubuntu 15.10 Chrome: external links are opened as blank tabs in new browser window. I just had to edit ~/.local/share/applications/google-chrome.desktop and add the %U parameter to the end of the Exec= line. Now external links like the one from "Connect account..." work properly and I was able to link up overGrive with my Google Drive account.

Currently overGrive is still doing its initial sync with Google Drive. It has taken quite a bit more time for overGrive to complete this task on Ubuntu than for the Google Drive Windows client. It seems the difference between the two is that the Google Drive Windows client appears to be multi-threaded and asks to sync several files at once while overGrive appears to be single-threaded and asks to sync one file at a time.

Friday, April 8, 2016

Why does Google Chrome use so much RAM?

I know this issue is not Linux-specific since Chrome did the same thing on Windows, but I want to bring it up anyway. Currently I have thirteen tabs open in Chrome and this is what System Monitor looks like:


Thirteen tabs, and nineteen out of the top twenty memory hogging processes are chrome. Seriously, how can Google Chrome take up a half-gig of memory for just one process? I have done a lot of Web application programming with JavaScript frameworks such as jQuery and Dojo so I understand web pages are more complicated now than they used to be. However, it seems to me these memory numbers are an order of magnitude off as I would expect even the most dazzling Ajax-ified web application to take no more than 50 MiB of memory. Even then, at 50 MiB that is some serious HTML/CSS/JavaScript/images/videos/etc.

And I thought Microsoft was terrible at memory management, especially with their Office apps.

Edit: I received a tweet from @perlmeister1l pointing me to a Chrome Help page called Reduce Chrome memory. Basically, Chrome has its own built-in Task Manager that allows you to see exactly which tabs are consuming your CPU and RAM resources.

While this is definitely more helpful than the System Monitor, the only suggestion provided in the help was to kill tabs you no longer need to free up memory. This is not entirely helpful since I would have done this anyway. Rather, I would prefer to know in greater detail about exactly why my Yahoo! Mail tab is taking up 536MB of RAM. How much of that is the DOM? JavaScript? Images? Ads? You get the picture.