Designing Unity: The Start Menu

Early on when we began to develop Unity for Workstation, we started to look at ways to give users access to the guest’s start menu. This seemed like an easy thing to solve at first. A month later we realized otherwise. We debated for some time and discussed the pros and cons of many approaches before settling on a design.

We had a number of technical and design restrictions we had to consider:

  • The UI should be roughly the same across Windows and Linux hosts.
  • Start menu contents must always be accessible regardless of the desktop environment on Linux.
  • Need to cleanly support start menus from many VMs at once.

Our chosen design

The design we settled on was to have a separate utility window for representing the start menu. This window can auto-hide and dock to any corner of the screen, or remain free-floating, and provides buttons for each VM. The buttons are color-coded to match the Unity window’s border and badge color. When you first go into Unity, the window briefly shows, indicating where it’s docked.

Unity Start Menu Integration

There are many advantages to this design.

  • You don’t have to re-learn how to use it between platforms or even desktop environments.
  • It’s pretty easy to get to and yet stays out of your way when you don’t need it.
  • All the start menus are easily accessible from one place.
  • The start menu buttons are color-coded to match the Unity windows.
  • Users can control whether the window is docked in a corner or free-floats on the desktop.
  • We have a lot of flexibility for feature expansion down the road.

Why not integrate with the Start Menu?

Since the first Workstation 6.5 beta, I’ve been asked why we chose the design we have instead of integrating the start menu into the notification area or into the existing Applications/Start menus. The idea to do so seems kind of obvious at first, but there are many reason we didn’t go that route.

Let’s start with the host’s Applications/Start menus. This seems the most natural place to put applications, as the user is already used to going there. We began going down this route, until we realized the problems associated:

  • On Linux, not everyone runs GNOME, KDE or another desktop environment with an applications menu supporting the .desktop spec correctly or at all. This means we’d be drastically limiting which desktop environments we could even represent applications in.
  • In the case of GNOME, it would add more clicks to get access to any application (Applications ? Virtual Machines ? VM Name ? Applications). This becomes tedious, quickly. Also, from my tests, adding entries three levels deep doesn’t always appear to work reliably across desktops.
  • In Windows, the situation is just as unclear. People tend to think that Windows only has one Start menu, but in reality, we’d have to support three (Classic, XP, and Vista). For quicker access, we’d need to add something to the root menu, and each of these start menus have slight differences in how we can do this. None of the solutions are even particularly good there, as entries may be hidden from the user to make room for other pinned applications.
  • In summary, where you go to access the start menu contents will be different not just on each OS, but across desktop environments and even different modes of the same environment (on Windows).

What about the notification area/system tray?

Another possibility that has been brought up is to use the notification area and to tie the start menu to an icon there. While this would generally work, it wouldn’t work too well.

  • On Linux, it’s frowned upon to put persistent entries in the notification area. A panel applet could work, but users would have to manually add it, and it would be GNOME or KDE-specific.
  • There’s no guarantee there even is a notification area or even a panel in Linux desktops.
  • On Windows, the icon may be automatically hidden in the system tray to make room for other icons.
  • The icon is such a small area to click on, making it annoying to launch applications quickly.
  • The icon is generally not too discoverable.

Tips and future improvements

While we’ll probably keep our current model, there are definitely improvements I’d personally like to make in some future release. One such possible example is to allow dragging an entry off onto the panel or desktop to create a shortcut/launcher. If you frequently access certain applications, you’d be able to put them wherever you want them for quick access. Clicking them while the VM is powered off would power the VM back on in the background and then run the application.

A lot of this exists already. While there is no automatic launcher creation, you can create your own that run:

vmware-unity-helper --run /path/to/vmx C:pathtoapplication parameters

This is not a supported feature at this time and may have bugs, but in the general case it should work just fine.

4 thoughts on “Designing Unity: The Start Menu

  1. Really interesting post! I’ve been using Unity mode in anger for the last week or so, running windows XP and 2000 guests on Vista x64. I’m pretty impressed with how well it works on the whole, so well done! I think this is a much nicer solution than VirualBox, which basically just makes your guest desktop transparent, especially for running multiple guests at once

    One thing I’d really like to see in the future is a way to limit which windows appear on your host via Unity. Sometimes I want to run things in my guest that I don’t want cluttering up my host task-bar. Also, it would be great if, in the task bar, it was easy to distinguish between what is a guest window and what is a host window (saves confusion when I run say FireFox both in my guest and in my host!)

    Also, though I’m sure there are more formal channels to submit bug reports, but a few of the things I’ve noticed are:
    – The window icons for Windows 2000 guests come through garbled
    – Sometimes when I alt-tab between windows and then try to type into the newly in-focus window, my text still appears in the old window – I have to click on the new window to force focus.
    – Sometimes copy/paste between different windows in different VMs doesn’t work.
    – If I have 2 maximised windows in my guest, my Vista task-bar preview for both windows will always show an image of the most recently in-focus window (I guess this is because behind the scenes both windows are sharing the same guest desktop)

    I’m sure future updates will continue to work the glitches out!

  2. Hi! I heard from a friend that VMWare Player supports Unity mode. I’m really hoping this feature made available in VMWare Server 2.0. I wonder if i can install both server and player on my Ubuntu box… šŸ˜‰

  3. Is there a way to change the v shortcut/hotkey for causing unity to bring up your windows start menu? Its the default keybinding for RedHat gnome-terminal paste

  4. sorry post ate my key binding sequence:
    Is there a way to change the Shift+Control+v shortcut/hotkey for causing unity to bring up your windows start menu? Its the default keybinding for RedHat gnome-terminal paste

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s