Ubuntu / Linux news and application reviews.

Gnome Shell GIT screenshot - Ubuntu 10.10 Maverick Meerkat

Unfortunately there are no Gnome Shell daily builds in the Ricotz testing PPA anymore (for any Ubuntu version) and even though Ubuntu 10.10 has just been released, the Gnome Shell version in the official Ubuntu repositories is quite old so if you want to run the latest version of Gnome Shell (from GIT), you'll have to compile it. Fortunately, this is not as hard a I initially imagined (because the last time I've compiled Gnome Shell - around Ubuntu 9.04, it was a pain) thanks to the Gnome Shell testing thread @ Ubuntuforums.

By compiling Gnome Shell using the instructions in this post, all the packages the Gnome Shell script will download and compile will not replace any existing libraries and it will install in your home folder, so you don't have to worry about breaking stuff on your system (excluding here the build dependencies of course, which are usual packages from the Ubuntu repositories and will install just like any other package).

Before starting the process, here is a video I've just recorded with the latest Gnome Shell which includes a new notification area (notice how Dropbox is now only displayed in the Activities view) as well as a cool new feature (which is thanks to the latest Mutter): side-by-side tiling:


I didn't upload the video to YouTube because the video quality is very bad and I couldn't get it to record without the flickering and blue screen no matter what application I used (I've tried Recordmydesktop, ffmpeg and Kazam (which also uses ffmpeg)). Even so, YouTube makes it a lot worse after encoding (it blurs all the text) - although when I record a video under the standard Ubuntu 10.10 desktop, the videos are usually decent in quality. Also, the built-in record tool in Gnome Shell doesn't work anymore.

In the video, you can also spot the "attaching modal dialogs to their parents" which also comes with visual effects of sliding in and dimming the parent window (the attached window can be seen when trying to install the Elementary theme).


Update November 13, 2010: here is another screenshot featuring the new default Gnome Shell (Gnome 3) window border theme:

Gnome shell default theme

Compile Gnome Shell in Ubuntu 11.04 / 10.10

Below you'll find the exact steps which got Gnome Shell up and running on my Ubuntu 11.04 / 10.10:

1. Install the dependencies and download the build setup script:

Firstly, add the Vala PPA - required for the latest Vala (this step was introduced on January 19th, 2011):
sudo add-apt-repository ppa:vala-team/ppa && sudo apt-get update

Then add the Darktable PPA, required for lcms2 dependency:

sudo add-apt-repository ppa:pmjdebruijn/darktable-release
sudo apt-get update

Now install the dependencies:
sudo apt-get install curl jhbuild libjasper-dev libdconf0 libtiff4-dev libgstreamer0.10-dev libcroco3-dev xserver-xephyr xulrunner-dev python-dev mesa-utils mesa-common-dev libreadline5-dev libgl1-mesa-dev libwnck-dev librsvg2-dev libgnome-desktop-dev libgnome-menu-dev libffi-dev libgtk2.0-dev libgconf2-dev libdbus-glib-1-dev gtk-doc-tools gnome-common git-core flex bison automake build-essential icon-naming-utils autopoint libcanberra-dev libpulse-dev libvorbis-dev gnome-settings-daemon-dev libxklavier-dev libpam0g-dev libtasn1-3-bin libupower-glib-dev libgnome-keyring-dev libgtop2-dev libvala-0.12-dev valac libcups2-dev evolution-data-server-dev libecal1.2-dev libedataserver1.2-dev libedataserverui1.2-dev iso-codes sqlite3 libsqlite3-dev libproxy0 libproxy-dev libdb-dev libdb4.8 gperf libsoup2.4-dev libsoup-gnome2.4-dev python-argparse libsane-dev libgudev-1.0-dev libpolkit-gobject-1-dev liblcms2-dev libxcb-aux0-dev libxcb-event1-dev libx11-xcb-dev libgconf2.0-cil-dev libxtst-dev liboauth-dev libwebkitgtk-3.0-dev
cd
curl -O http://git.gnome.org/browse/gnome-shell/plain/tools/build/gnome-shell-build-setup.sh


2. Export /home/YOUR_USERNAME/bin path


You need to edit the next command, by replacing "andrei" with your username:
export PATH=$PATH:/home/andrei/bin

3. Start the build process:
cd
chmod +x gnome-shell-build-setup.sh
./gnome-shell-build-setup.sh
jhbuild build


If you use Firefox 4.0 from the Mozilla Daily PPA, step 3 is different for you: run the above commands until "./gnome-shell-build-setup.sh", then do not run "jhbuild build" yet! Instead, install xulrunner 1.9.2:
sudo apt-get install xulrunner-1.9.2-dev

The above command will remove xulrunner-2.0-dev - that's ok. Then you can start building Gnome Shell:
jhbuild build


Now sit back and wait - this will take some time depending on your Internet connection speed and processor.

At this point you may get an error which looks like this:

A. Possible error #1:
/home/andrei/gnome-shell/install/lib/libgio-2.0.so: undefined reference to `g_main_context_invoke'
collect2: ld returned 1 exit status
[...]
*** Error during phase build of gnome-shell: ########## Error running make   *** [24/28]

You may get this error on a different step (Gnome Shell keeps getting bigger), but don't mind that, just look if you get "undefined reference" errors. If you do, do not close the terminal! Open a new terminal and run the following command:

- for 32bit:
rm ~/gnome-shell/install/lib/*.la

- for 64bit:
rm ~/gnome-shell/install/lib64/*.la

Now, in the terminal where you ran the "jhbuild build" command and got the error, something like this should have been displayed at the bottom:
  [1] Rerun phase build
  [2] Ignore error and continue to install
  [3] Give up on module
  [4] Start shell
  [5] Reload configuration
  [6] Go to phase "wipe directory and start over"
  [7] Go to phase "configure"
  [8] Go to phase "clean"
  [9] Go to phase "distclean"

Here, enter "6" (without the quotes), then you will be asked to type "yes" to continue the process. Now Gnome Shell should build successfully (at least that was the case for me). If Gnome Shell has been built successfully, you should see this when the process is done:
*** success *** [28/28]

B. Possible error #2:

~/gnome-shell/source/gnome-settings-daemon/gnome-settings-daemon/main.c:274: undefined reference to `notify_init'
collect2: ld returned 1 exit status
make[3]: *** [gnome-settings-daemon] Error 1
make[3]: Leaving directory `/home/arindom/gnome-shell/source/gnome-settings-daemon/gnome-settings-daemon'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/arindom/gnome-shell/source/gnome-settings-daemon/gnome-settings-daemon'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/arindom/gnome-shell/source/gnome-settings-daemon'
make: *** [all] Error 2
*** Error during phase build of gnome-settings-daemon: ########## Error running make *** [26/28]

This occurs because you need a newer version of libnotify. To fix it, use the following commands:
cd ~/bin
./jhbuild shell
cd ~/gnome-shell/source
git clone git://git.gnome.org/libnotify
cd ./libnotify
./autogen.sh --prefix $HOME/gnome-shell/install/
make && make install

Thanks to Arindom and wersdaluv for this second fix!


C. Possible error #3: build fails due to missing libxklavier >= 5.1.

If you get the following error:

checking for LIBXKLAVIER... no
configure: error: Package requirements (libxklavier >= 5.1) were not met:

Requested 'libxklavier >= 5.1' but version of libxklavier is 5.0

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables LIBXKLAVIER_CFLAGS
and LIBXKLAVIER_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
*** Error during phase configure of libgnomekbd: ########## Error running ./autogen.sh --prefix /home/andrei/gnome-shell/install --libdir '/home/andrei/gnome-shell/install/lib64' --disable-static --disable-gtk-doc *** [23/32]

You need to run the following command:

32bit:
sudo gedit /usr/lib/pkgconfig/libxklavier.pc
64bit:
sudo gedit /usr/lib64/pkgconfig/libxklavier.pc

And change the Version (it's on line 9 for me) from "5.0" to "5.1". Then save the file and enter "1" in the terminal to run the configure phase again ("[1] Rerun phase configure").

This solution was suggested on the Gnome Shell mailing list. It's not pretty, but libxklavier 5.1 wasn't released yet.


D. Possible error #4: Error configuring Clutter:

*** Error during phase configure of clutter: ########## Error running ./autogen.sh --prefix /home/jacky/gnome-shell/install --libdir '/home/jacky/gnome-shell/install/lib'  --disable-static --disable-gtk-doc  *** [12/34]

This is most probably a temporarily issue, but I'll post a fix until it gets fixed anyway. Open a terminal and copy/paste this:
cd ~/gnome-shell/source/clutter
gedit build/autotools/Makefile.am.changelog

And modify this line:
MAINTAINERCLEANFILES += $(srcdir)/ChangeLog $(srcdir)/ChangeLog.pre-*

(it's on line 19 for me) so that it looks like this:
MAINTAINERCLEANFILES = $(srcdir)/ChangeLog $(srcdir)/ChangeLog.pre-*


Basically you have to remove the "+" sign in front of the equal sign.

Save the file and re-run the configure phase (enter "1" in the terminal).


E. Possible error #5: Requested 'polkit-agent-1 >= 0.100' but version of polkit-agent-1 is 0.99:

Requested 'polkit-agent-1 >= 0.100' but version of polkit-agent-1 is 0.99

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables MUTTER_PLUGIN_CFLAGS
and MUTTER_PLUGIN_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
*** Error during phase configure of gnome-shell: ########## Error running ./autogen.sh --prefix /home/andrei/gnome-shell/install --libdir '/home/andrei/gnome-shell/install/lib' --disable-static --disable-gtk-doc *** [31/34]


This is because the polkit-agent version was bumped yet jhbuild still tries to compile version 0.99 but it needs version 0.100.

The fix open a new terminal (but don't close the terminal in which you are compiling shell) and type these:
cd ~/gnome-shell/source
wget http://hal.freedesktop.org/releases/polkit-0.100.tar.gz
rm -rf polkit-0.99/
tar -xvf polkit-0.100.tar.gz
cd polkit-0.100/
./configure --prefix $HOME/gnome-shell/install/
make && make install


Now go back to the terminal in which you're bulding Gnome Shell (where you ran jhbuild) and enter "1" so that it starts the configure step again. Now it should work.


F. Possible error #6 (when starting Gnome Shell): Gnome Shell builds successful but does not start:

andrei@andrei-desktop:~$ ~/gnome-shell/source/gnome-shell/src/gnome-shell --replace
mutter: symbol lookup error: /home/andrei/gnome-shell/install/lib/gtk-3.0/modules/libcanberra-gtk-module.so: undefined symbol: gtk_quit_add

To fix it, run the following command:

32bit:
rm ~/gnome-shell/install/lib/gtk-3.0/modules/libcanberra-gtk-module.so

64bit:
rm ~/gnome-shell/install/lib64/gtk-3.0/modules/libcanberra-gtk-module.so


G. Possible error #7 (when starting Gnome Shell): Gnome Shell cannot find libmozjs.so:

If you get an error like this:

andrei@andrei-desktop:~$ ~/gnome-shell/source/gnome-shell/src/gnome-shell --replace

(mutter:13979): mutter-WARNING **: Could not load library [/home/andrei/gnome-shell/source/gnome-shell/src/libgnome-shell.la (libmozjs.so: cannot open shared object file: No such file or directory)]

mutter-ERROR **: failed to load plugins
aborting...
Shell killed with signal 5

Run the following commands:
cd /usr/lib
sudo ln -s /usr/lib/xulrunner-1.9.2.16pre/libmozjs.so libmozjs.so

The libmozjs.so path may not be "/usr/lib/xulrunner-1.9.2.16pre/libmozjs.so" for you if you're using a different version. You can locate it using:
locate libmozjs.so

And then replace the path in the last command above. Then start Gnome Shell - it should start now.


H. Possible error #8: missing colord

If you get an error like this:

checking for COLORD... no
configure: error: Package requirements (colord >= 0.1.8) were not met:

No package 'colord' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables COLORD_CFLAGS
and COLORD_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
*** Error during phase configure of gnome-settings-daemon: ########## Error running ./autogen.sh --prefix /home/himalay/gnome-shell/install --libdir '/home/andrei/gnome-shell/install/lib64'  --disable-static --disable-gtk-doc  *** [32/42]

Open a new terminal and copy/paste this:
cd ~/gnome-shell/source/
git clone git://gitorious.org/colord/master.git colord
cd colord

Then, for:
-32bit:
./autogen.sh --prefix $HOME/gnome-shell/install/
make && make install

-64bit:
./autogen.sh --prefix $HOME/gnome-shell/install/ --libdir $HOME/gnome-shell/install/lib64
make && make install

Then return to the terminal in which you ran jhbuild and enter "1" so that it starts the configure step again.


I. Possible error #9: libgdata error (step 17)

If you get an "gdata" error (step 17), similar to this:

gdata/gdata-parsable.h:42: Warning: GData: gdata_parser_error_quark: Couldn't find corresponding enumeration
gdata/gdata-service.h:156: Warning: GData: gdata_service_error_quark: Couldn't find corresponding enumeration
gdata/gdata-client-login-authorizer.h:65: Warning: GData: gdata_client_login_authorizer_error_quark: Couldn't find corresponding enumeration
gdata/services/youtube/gdata-youtube-service.h:108: Warning: GData: gdata_youtube_service_error_quark: Couldn't find corresponding enumeration
gdata/services/documents/gdata-documents-service.h:81: Warning: GData: gdata_documents_service_error_quark: Couldn't find corresponding enumeration
  GICOMP gdata/GData-0.0.gir
make[2]: Leaving directory `/home/andrei/gnome-shell/source/libgdata'
Making all in gdata/tests
make[2]: Entering directory `/home/andrei/gnome-shell/source/libgdata/gdata/tests'
  CC     general.o
In file included from ../../gdata/gdata-entry.h:26:0,
                 from ../../gdata/gdata.h:24,
                 from general.c:23:
../../gdata/gdata-parsable.h:25:27: fatal error: libxml/parser.h: No such file or directory
compilation terminated.
make[2]: *** [general.o] Error 1
make[2]: Leaving directory `/home/andrei/gnome-shell/source/libgdata/gdata/tests'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/andrei/gnome-shell/source/libgdata'
make: *** [all] Error 2
*** Error during phase build of libgdata: ########## Error running make   *** [17/43]

Fix it by running the commands below in a different terminal (not where you're building GNOME Shell):

cd ~/gnome-shell/source/
wget http://mesh.dl.sourceforge.net/project/liboauth/liboauth-0.9.4.tar.gz
tar -xvf liboauth-0.9.4.tar.gz
sudo apt-get build-dep liboauth
cd liboauth-0.9.4

Then, for:
-32bit:
./autogen.sh --prefix $HOME/gnome-shell/install/
make && make install

-64bit:
./autogen.sh --prefix $HOME/gnome-shell/install/ --libdir $HOME/gnome-shell/install/lib64
make && make install


Then return to the terminal in which you ran jhbuild and enter "1" so that it starts the configure step again.


J. Fix logoff / suspend / shutdown

If the logoff / suspend / shutdown doesn't work for you, run the following command:
ln -s /usr/bin/gnome-session-save gnome-shell/install/bin/gnome-session-quit

Thanks to Habilain for this fix!



If you get any other errors while updating Gnome Shell, remove all the Gnome Shell directories and start over!


4. Start Gnome Shell:

In a terminal, enter:
~/gnome-shell/source/gnome-shell/src/gnome-shell --replace

Exit Gnome Shell

To return to your normal desktop, press ALT + F2 and enter:
debugexit


Updating Gnome Shell

Whenever you want to update to the latest version of Gnome Shell (from GIT), all you have to do is run this command:
cd && jhbuild build --force --clean

You may run into the error I pointed out at step 3 so apply the fix mentioned there and it should work. Hopefully this will no longer be necessary soon.


Important notes:
  • While the exact instructions in this post worked for me, it may not be the case for you. I most probably won't be able to help you because I if I cannot reproduce the exact error you get, it will be very difficult to find the cause and how to fix it. To find the fix for your error, you can try searching the Gnome Shell testing thread @ Ubuntuforums.



The instructions in this post are from THIS Gnome Shell thread @ Ubuntuforums. Thanks to xtoudi for the step 3 fix! You can search that thread if you encounter any issues while compiling Gnome Shell - you might find your answer there.


Update: the instructions in this post also work in Ubuntu 11.04. Using this method of installing GNOME Shell, you can run both Gnome Shell and Unity (not in the same time though, obviously, but you can create a separate session for each) in Ubuntu 11.04