Unity - Graphical Shell in Ubuntu

Unity is a graphical shell introduced in Ubuntu. Unity consisists of several components.

Launcher

Launcher is a panel on the left side displaying application icons. It is similar to the Dock on Mac. Some applications are always displayed, the rest of them are only shown when running. When an application icon is clicked either a window of a running aplication is focused or the apllication is executed.

Dash

Dash is a desktop search utility. It is very flexible and allows users to search local files and applications as well as content on the web and data in the cloud. It does this by using Scopes and Lenses.

Scopes are services that provide searching and fetching of structured data. There are also aggregation scopes that put together results from multiple sources.

Lenses display contents returned by scopes. By default unity presents following scopes: Home, Applications, Files, Video, Music, Photos, Social.

For example you have the application lens that shows results from multiple scopes: locally installed applications and applications available from the Ubuntu store. When you are missing an application you need you can select it and install it right from the lens.

Unity Dash

HUD and Menu bar

Unity takes similar approach like Mac and displays application’s menu bar at the top of the screen. When you press alt key the HUD comes up and you can search for commands from the appmenu.

Unity HUD

Scopes internals

There is a guide describing scopes development using Unity SDK in c++. To develop a scope you must implement at least search and preview methods.

Search returns results for a given query. The scope should be able to handle cancellation of the query as user types into the search box. The query can be en empty string and the scope should produce some meaningful default values like “most popular” or “recent items”. This is called the surfacing mode. It happens when user navigates to the scope but haven’t entered a query yet. It is importat to give some results back so that user is not confronted with a blank screen.

When the results are fetched the scope can decide how to show them using previews. There is a list of available widgets including widgets like audio, video, image, gallery, rating, etc. There are options how to present items in a category. Items can be for example presented in a grid, carousel, list, etc. The items can have various sizes and colors.

Finally the scope handles the activation when user selects and clicks a item.

Unity uses internally D-BUS for communication with scopes so it is possible to implement scopes in other languages. There is a guide for implementing scopes in Python using Singlet project. There is another very detailed guide, however it is bit outdated.