In this post, I plan to talk about Ubuntu Unity. There has been hundreds of post on Unity . I will try to refrain from posting yet another Unity review. I assume that by choice or force, you are currently a Unity user. I plan to discuss how to make your life more productive by mastering it. So I will discuss various shortcuts, configurations and other cool stuff that I found in my 3 months(From Mar 2011) of active usage. Hence, this post will be slightly more technical. If you want an introductory post/review on Unity, check out the exceptional post by Ryan Paul here .
Introduction
Unity has been one of the most controversial products released recently and the reaction has been surprisingly polarized. Lot of people hate it and lot of people love it. Whatever be your position, it is a good idea to learn to use the Unity paradigm because this is the direction that most of Linux community is moving. For eg, GNOME Shell, which is another popular alternative for Unity , also has similar design vision. So, it is safe to say Unity is a harbinger of a potential UI revolution in Linux. Whether this will cause more users to come to Linux is yet another matter 🙂
Terminology
Before we discuss about Unity, I think it is a good idea to give an orientation of various Unity components. This will help you when you read other posts or when you ask questions in some forums.
Unity : Unity is nothing but a desktop “shell” to GNOME. GNOME Shell is yet another alternative. One of the key things to understand is that Unity was designed as lightweight shell as it was focused towards netbooks running Ubuntu. Understanding this will provide an appreciation of Unity’s design decisions. Since it is targeted towards netbooks, it tries to conserve screen space as much as possible. Unity was ported to desktop in Natty. It is internally written as plugin for Compiz.
Ayatana : This is another name that you will come across. Ayatana can be considered as an umbrella project primarily focusing on UI and design stuff in Ubuntu. Some of the notable projects are Unity, Unity 2D, MultiTouch, App indicators, Me-Menu and Notify OSD. See their launchpad page for more of the projects they run.
Unity-2D : Unity 2D can be considered as poor man’s Unity. If your computer does not have the necessary hardware capabilities to run Unity, Unity-2D will act as the fallback. In Natty, the classic GNOME was provided as the fallback. Starting from Oneiric, Unity-2D will be the fallback. It is primarily written in QML and uses Metacity. Even Unity-2D replaces panel, launcher and other stuff.
Mutter , Clutter , Compiz and other stuff : Unity is primarily written as a plugin for Compiz window manager. The toolkit uses in Nux which is claimed to be faster than Clutter. Nux acts as an interface between Compiz and Unity. GNOME Shell uses Mutter (Metacity Clutter) as the window manager. Metacity is yet another window manager used in GNOME 2.2+ . Clutter is the toolkit. Both Nux and Clutter are opengl toolkits that provide convenient hardware based acceleration if available. This is the reason why both Unity and GNOME Shell uses a toolkit that has this support. For Unity 2D, the window manager is Metacity (even though Compiz can be used). If all of this confuses you , ignore it. Other than hard core geeks, nobody cares about these.
Wayland : This is a development that I am excited about. Wayland is primarily a display management system (also a protocol), just like X Window system. Instead of making some assumptions about Network and stuff, Wayland allows you to use native opengl to provide great graphics. The vision is quite fascinating and I hope it will turn out great.
Now that you know the overall big picture, lets dive down to specific UI elements in Unity. The following text is based on my interpretation of Canonical’s design blog and this excellent AskUbuntu question .
Ubuntu Button : This is the big button on the left top of the screen.
Launcher : This is the entire strip on the left that comes up when you hover over the left side of your screen. This will contain multiple types of icons. Icons that act as launcher icons for other applications, icons that show the currently running applications , lenses and workspace switcher.
Accordion : If you open lot of applications such that the launcher does not fit, the icons are displayed in an accordion fashion – Basically, few of the icons are vertically stacked and if you hover your mouse over them it expands to show the icons that are present there.
Sigil : As said before, Launcher may contain some icons always – even if the application is not running. If the corresponding application is launched (or some other application), the icon in the launcher will contain a small white arrow called the sigil. It denotes that the application is currently running. The number of sigils denotes the number of instances of the same application.
Quicklist : Quicklists are another really cool idea in Unity. Although not as polished as Windows 7, it shows lot of promise. Quicklists are the common tasks that you do in an application that is accessible to you when you right click the application’s launcher item. Quicklists can be anything – For eg quicklist for a browser might be to open a new instance, open in incognito mode, go to specific site etc. Alternatively, if you use Banshee/Rhythmbox, you can have all the music controls (Play/Pause/Next/Previous) in the right click.
Dash : The full screen black translucent overlay that appears when you press Super. Alternatively, you can click on the Ubuntu button. It contains a search option and also broadly classifies applications like Media, Internet etc.
Lenses : Lenses are one of the coolest ideas in Unity. Even though Dash allows you to search , its use is fairly limited to items in your computer. Lenses take the idea of the dash and extend it in such a way that it can search arbitrarily anything. You can kinda consider “Files and Folders” and “Applications” on the launcher as a special kind of lenses. They are currently called Places but their usage will be deprecated. There are lot of other cool lenses – For eg, one which searches sub-reddits , one that searches contacts , Amazon , Youtube etc. The API is also pretty awesome. I was able to code a lens to show the latest tweets of a user just by typing their name within couple of hours. If no one writes, I will write Lens tutorial sometime soon !
Panel : The strip that is at the top. The panel has been thoroughly given a facelift in Unity. It now performs lot of tasks. By default, it shows the title of the current active applications. When you hover your mouse over it , it shows the menu items of the applications. On the right hand side are the app indicators.
Global Menu : Also called as Application menu. When an application is active, this part of the panel will show the window controls (Maximize/Minimize/Close) and the window title. If you hover over the panel or press Alt key, it changes to the menu of the application.
App Indicators : These are the icons on the right side for the panel. By default it contains Sound, Network, Mail/Chat indicator, time , Me-Menu etc. You also add other indicators if you wish. To see the potential of these indicators, check out the sound indicator. It contains all the buttons to control playing and also allows you to select other playlists.
Overlay Scrollbar : Overlay scrollbar is one of the innovations in Unity designed to save space. In a typical application that needs scrolling, the scrollbars appear taking up valuable pixels. In Unity, the scroll bar appears as a thin strip. If you move your mouse over it, the classical scrollbar appears.
Keyboard Shortcuts for Accessing Unity Items
Exhaustively discussing all the features of Unity is beyond the scope of this blog post. If you are interested, see Ryan Paul’s article linked above. I will discuss the most important stuff and will intersperse mouse and keyboard based access. If you are a keyboard junkie, all of Unity’s keyboard shortcuts are here .
Launcher : This can be activated by hovering over the left end of the screen. Alternatively, you can class keep pressing Super key for couple of seconds to make it visible. The initial delay is to prevent accidental invocation. If you are not comfortable with the default behavior, you can change it . See the section of unity configuration below. Since Unity removed the bottom panel that used to show active windows in the current workspace, viewing the launcher is one way to see all the open applications.
Launcher Items : Once the launcher is visible , you can click on any launcher item to launch the application (if not already running) or bring it to the foreground. If you are a keyboard person, keep pressing the Super key. The launcher will appear with a character appearing on each of the icon. Pressing the character along with Super key will launch the application. For eg, Super+a starts the application places and Super+1 launches the application corresponding to the first icon in the launcher. Pressing Shift or using middle click will start a new instance.
Operations on Launcher Items : The default set of launcher items are not ideal and you many want to do some personalization. The simplest is reordering of icons. You can do it by either clicking on an icon and moving it up. Or you can click on it, pull it to the right and then place it at the right place.
If you want to remove a launcher item,you can drag the icon to the trash. Unfortunately, the obvious action of pulling the icon out of the launcher does not seem to remove the icon. If you have used any docks like docky or AWN , this might seem unintuitive. If you want the icon to never appear in launcher, launch the application and right click on the icon and unselect ‘Keep in launcher’ option.
If you want to add a new application,the easiest way is to launch it by other means. Once the icon shows up in the launcher, right click it and select ‘Keep In Launcher’. Putting arbitrary application is a bit tricky. See the ‘Advanced’ section for details.
Lenses : Super+A opens the application places (lens) and Super+F opens the the Files and Folders lens. Super+T opens the trash.
Dash : Pressing Super and releasing it immediately brings the dash. If you use Alt+F2, it brings out Dash version of “Run” dialog.
App Indicators : Pressing F10 highlights the first app indicator menu which you can use keyboard navigation keys to select. To move to the other indicators press left or right arrow keys. For eg, pressing F10 for me opens the network indicator. Pressing right opens the volume indicator applet and so on. Of course, pressing Esc removes the focus from indicators.
Show Desktop : Pressing Super+D minimizes all the windows and shows the desktop. Pressing it again restores the windows.
Workspaces : If you press Super+W , it will create an Expose like effect showing all non minimized windows in all workspaces. If you want only for current workspace, type Shift+Alt+Up arrow. Moving a window to another workspace is not obvious as the bottom panel is removed. There are two ways : Press Super+S and it shows all the workspaces with the current window highlighted in current workspace. You can now use mouse to move window across the workspaces. If you want to move using keyboard, press Ctrl+Alt+Shift+ Arrow keys. You can may recognize that Ctrl+Alt+Arrow is the key combination to move across workspaces. Adding a shift, moves the window to the appropriate workspace.
Configuration and Personalization
One of the nicest things about is that it is highly configurable – Especially, if you do not mind getting your hands dirty with terminal stuff. In this section, I will discuss basic configuration of Unity and how to personalize it using quicklists and additional lenses.
To do the basic configuration, you would have to install “CompizConfig Settings Manager” (ccsm) from Synaptic. Once you have installed it press “Alt+F2” and enter “about:config” to access it. If you typed “ccsm” instead, search for Unity in the search box and get the “Ubuntu Unity Plugin” dialog.
My favorite settings are :
(1) Hide Launcher to “Dodge Windows”
(2) In Experimental tab, set “Backlight Mode” to “Backlight Toggles” . This will help you identify active and inactive launcher icons from their backlights.
(3) Launcher Icon size to 32 pixels.
Custom Launchers:
You might custom applications to your launcher. There are multiple ways to do that – The easiest is the following :
(1) Right click the desktop and select “Create Launcher”
(2) Set the launcher type – typically it is Application
(3) Enter the name of the launcher. This will be the name the Launcher icon will show if you hover over it or right click it.
(4) Enter the full command line path in Command field.
(5) Optionally enter a comment. You can also edit the icon by clicking on the icon’s icon 🙂
(6) Click ok and save the item. This will be saved in your desktop.
(7) Now drag this item on to the launcher.
(8) Voila ! The item is added to the launcher !
Custom QuickLists :
You can also create custom quicklists. The method is not very hard but involves editing configuration files manually. The basic idea is as following :
(1) Find a similar .desktop file from /usr/share/applications/ and copy it to ~/.local/share/applications/ with the name as per your wish. Of course, you can keep it in any folder you wish but ~/.local/share/application is customary.
(2) If your .desktop file has a line like “OnlyShowIn=GNOME;”, change it “OnlyShowIn=GNOME;Unity;”
(3) At the end of the file , add the following line “X-Ayatana-Desktop-Shortcuts=shortcut1;shortcut2” . Replace shortcutx with your name of shortcuts. Each of them , except the last, must be separated by semicolon. It is better to have each shortcut name to be a single word.
(4) For each of the shortcut, add a section like this :
[shortcut1 Shortcut Group]
Name=Blah
Exec=Command to run
TargetEnvironment=Unity
(5) Things to note above are that the name of the shortcut at the beginning and in each section must match exactly.
(6) Go to this folder using Nautilus. If you want to see hidden files, press Ctrl+H. Or type “xdg-open ~/.local/share/applications/” in the command line. Now drag and drop the file you modified into Launcher.
(7) Remember, if you delete this desktop file, the launcher icon will also go !
One thing to realize is that to get access to these quicklists, the launcher icon need not always be in the Launcher. For eg, I want the quicklists for Banshee but I do not want Banshee’s icon cluttering up my space. If you are like me, make the change to the desktop file and put it in ~/.local/share/applications but do not drag and drop to Launcher. When you start the application, then Unity will automatically show the quicklist options. If the application is closed, the icon also goes away !
If you are too lazy to do all these, check out this link for lot of awesome custom launchers and quick lists.
GNOME Applets :
Every Gnome user will have their own share of Gnome applets. Unfortunately, Gnome applets by themselves are not possible to be used directly in Unity. This is not just a Unity . The same holds for Gnome Shell too ! In Unity, they have to be adapted to use the indicator api to showup on the panel.
Systray Access :
You may use lot of applications that lands up in Systray. In Unity, you many notices that they are not shown at all. Most of the time , it does not really matter. But if you really wish to make the application show up, you need to add the application to a whitelist. The details are given in the following link .
Lenses :
It is not very easy to create custom lenses without knowing programming. Some of the currently popular ones are given in the link . I really like the Gwibber based lens. I am looking for a lens that uses tracker for better file search though.
Tips
This is a random collection of tips that I found useful. Some of them are discussed elsewhere in this post too !
(1) To launch a new instance of an application, middle click the launcher icon . Pressing Shift will also start a new instance.
(2) To move an application another workspace, make sure the application has the focus. Press Super+S and move the application to appropriate workspace. Alternative press Ctrl+Alt+Shift+ Arrow key to move it.
(3) If you like global menu bar and want Chrome to have it, enter “about:flags” in Chrome. Search and enable the “Experimental GNOME menu bar support” .
(4) To access the Unity settings manager, press Alt+F2 and type “about:config”. This directly gives the dialog to change Unity’s settings. To go to Compiz settings, use “ccsm”.
(5) If you mess up your Unity settings, try “unity –reset” .
(6) If you want to access special quicklist for an application but do not want the application taking up valuable space in Launcher when not active, there is a way to do that. Create the desktop file and put it in ~/.local/share/applications but do not drag and drop to Launcher. When you start the application, then Unity will automatically show the quicklist options. If the application is closed, the icon also goes away !
(6) If you were a hamster time tracking applet user and lost it in Unity, there is a hack that makes it work ! Check out this link for details http://albertomilone.com/wordpress/?p=502 . This works perfectly for my use !
Resources
There are lot of excellent links that helped me compile this list.
(1) Ryal Paul’s in depth Unity review : http://arstechnica.com/open-source/reviews/2011/05/riding-the-narwhal-ars-reviews-unity-in-ubuntu-1104.ars .
(2) Power user’s guide to Unity : http://castrojo.tumblr.com/post/4795149014/the-power-users-guide-to-unity
(3) Unity Lens Architecture document : https://wiki.ubuntu.com/Unity/Lenses
(4) Unity place sample : https://code.launchpad.net/~unity-team/unity-place-sample/unity-place-python
Great info! Have you found a decent tutorial yet for writing a custom Lens using the API? Or do you plan to write one anytime soon? Thank you!
Derrick,
I have been postponing it because Unity is evolving in a break neck speed. I will write it some time soon !
[…] my tutorial on Unity , I mentioned that if no one else writes a Lens tutorial, I will write one and here it is Lenses […]
[…] Understanding Unity […]
Unity sucks…pure and simple…makes things difficult to do that once were easy…
Nothing will change the fact that there area LOT of folks that don’t give a good high falootin’ crapola about touch screens. Jump on over to LINUX MINT and forget this nonsense.
I thought Unity sucked at first and switched to Mint. When Ubuntu 12 came out, I put a copy on my work laptop in VirtualBox. Wow, I was impressed. Ubuntu has so many things going for it. I was glad to see that Unity was much improved and pretty easy to use…once you get used to it.
Anyway, I am back to Ubuntu and happy!
> Pressing Super+D minimizes all the windows and shows the desktop. Pressing it again restores the windows.
It is now Ctrl+Super+D. By the way, holding down Super for about two or three seconds will popup a box with all main keyboard shortcuts, as a reminder.