Please check the status of this specification in Launchpad before editing it. If it is Approved, contact the Assignee or another knowledgeable person before making changes.

Summary

We should comprehensively simplify how people exit an Ubuntu session. We should split off “Lock Screen” and “Switch User” into separate commands. We should merge “Suspend” and “Hibernate” into a configurable “Sleep” command, activated by closing the lid for laptops, and a configurable timeout for all computers. We should offer a configurable shutdown timeout for the login screen, so that people can choose “Quit” and walk away from their computer assured that it will shut down when appropriate. Most use cases for “Restart” should be handled by application-specific UI, but “Shut Down Now” and “Restart” should also be available from GDM as a fallback.

summary.jpg

Release notes

Rationale

From 6.06 to 7.10, Ubuntu has had a “Quit” dialog with up to eight items: “Log Out”, “Lock Screen”, “Switch User”, “Suspend”, “Hibernate”, “Restart”, “Shut Down”, and “Cancel”. This design was well-intentioned, following the principle of forcing commitment as late as possible (rather than making people climb out of one confirmation alert and into another).

Unfortunately, this benefit has been outweighed by the choice being confusing and daunting. The Quit dialog gives too many options, with the difference between them being unavoidably difficult to explain. And people can get used to clicking a particular button in the dialog, such that they click it even when they didn't mean to.

No other common appliance has this many exit modes, and we shouldn’t accept it in personal computers either. That other OSes make it complicated is not an excuse to be like them, but an opportunity to be better than they are.

What other systems do

Gnome upstream

Three menu items:

You can try these options in Ubuntu by setting the gconf key /apps/panel/global/upstream_session (and then either restarting the panel or adding a new menu bar).

Fedora

Alters the Gnome design by splitting “Suspend” and “Hibernate” off into a fourth alert.

OpenSUSE

A single dialog, with "Log Out", "Lock Screen", "Shutdown" [sic], and "Restart", all explained inline.

Windows Vista

The Start menu has two buttons — a power icon, and a lock icon — then one menu with seven choices: “Switch User”, “Log Off”, “Lock”, “Restart”, “Sleep”, “Hibernate”, and “Shut Down”.

The two buttons in the windows Start Menu can change dynamically also. I've noticed the "Shutdown" button turns into a "Install pending upgrades then Shutdown" when there are updates available. Unsure if there are other modes, or this is just one special case.

Joel Spolsky: “Inevitably, you are going to think of a long list of intelligent, defensible reasons why each of these options is absolutely, positively essential. Don't bother. I know. Each additional choice makes complete sense until you find yourself explaining to your uncle that he has to choose between 15 different ways to turn off a laptop.”

Moishe Lettvin, Windows Vista developer: “I would like to try to explain how this happened.”

Mac OS X

The Apple menu includes four relevant items:

(With the latter three commands, holding down the Option key bypasses the alert, which is indicated by the menu items no longer having ellipses. The commands time out with an explanatory alert if any application failed to quit by itself.)

Arno Gourdol, Mac OS X developer: “I actually think that the result could have been even better than what we ended up with. I argued against including Restart, Shut Down and Sleep in the Apple menu.”

What we should do

Assumptions

First, we will take a deep breath and make these assumptions.

Lock Screen

The penultimate item in the System menu (and the Main Menu) should be “Lock”.

Implementation: Adding the menu item is trivial, change to gnome-panel.

Quit

The last item in the System menu (and the Main Menu) should be “Quit”, without ellipsis. (Sometimes quitting does require more input, which implies ellipsis, but currently we can’t tell that ahead of time.)

Choosing “Quit” should log out as quickly as possible. If an application cancels the logout, this should be explained using an error alert, using the application's human-readable name if known.

logout-cancelled.jpg

Implementation:

Account switching

If (and only if) the system has multiple user accounts set up, and you have fast account switching turned on, the menu should be added to your panel automatically. This will be the method of switching accounts while staying logged in.

Implementation: Would it be okay for the widget to exist, but be transparent if they are not enabled? That would be much easier, and only require a change to the applet. If dynamic adding and removing of the applet is required, that would be trickier.

Login screen

The login screen should have “Shut Down” and “Restart” buttons at the bottom.

login-screen.jpg

If Ubuntu is configured to shut down automatically, the “Shut Down” button label should instead be “Shut Down Now”. The button should pulse subtly (about 5 seconds per cycle), and the icon inside the button should slowly rotate clockwise to indicate how close it is to shutting down. If any input device is touched (or storage device is attached) during the countdown, it should reset, and this should be shown by the Shut Down icon rewinding (in 0.5 seconds) back to its original position. When time runs out (so the icon reaches 360° rotation), the button should visibly appear clicked for 0.5 seconds. After the button is clicked (whether manually or automatically), all controls on the screen should become insensitive, then the computer should shut down.

auto-shutdown.jpg

When “Restart” is clicked, all controls on the screen should become insensitive, then the computer should restart.

Implementation: As part of GdmFaceBrowser development.

Future work: “Restart into Windows” and/or “Restart into Mac OS X” buttons alongside the “Restart” button, depending on what other OSes are installed. (These future labels will be too long to include inside an elegant button, which is why the current “Shut Down Now” and “Restart” buttons shouldn’t have the label inside them either.)

Future work: Solve the fsck-when-you-don’t-want-it problem by running disk checks just before automatic shutdowns, instead of during startups.

Power Saving settings

The Power Management Preferences window should be simplified into a “Power Saving” settings window. (Outside of a power station, nobody wants to “manage” power.)

power-saving.jpg

The window should have two tabs: “When Using Mains” and “When Using Battery”. Each tab should have the same four menus and one checkbox.

(The “Immediately” and “Never” options both need to be obvious for the “go into zero-power mode” setting. If it was presented as a slider, this would require tick marks. For visual consistency, all four controls would then need to be sliders with tick marks, but that would take up too much space. This is why the window should use option menus instead.)

Other than the tab labels, the only difference between the tabs should be that if we can detect that the computer is of a type that automatically wakes up when the battery is critically low, the “When Using Battery” tab should have, under the “When asleep, go into zero-power mode:” menu, the small print “Critically low battery will also trigger zero-power mode.”. The “When Using Mains” tab (and, if we can not confirm the required hardware, the "When Using Battery" tab as well) should have an empty space exactly the same size as that small print, so that the later controls are in exactly the same position in each tab. (In both cases, this will naturally visually separate the user-specific settings from the system-wide settings.)

hibernate.jpg

Impossible combinations should be prevented by changing the selection in other menus if necessary. For example, if the computer-sleep menu is set to “After 1 hour” and you set the display-sleep menu to “After 2 hours”, the computer-sleep menu should automatically change to “After 2 hours” as well.

There should not be a setting for display brightness or dimming, because the desired brightness level will be highly dependent on the ambient light wherever the battery is being used; therefore, brightness should be configured manually instead (e.g. with function keys on the keyboard). Nor should there be a separate setting for dimming the display when idle; instead, dimming should function as a two-minute warning that either the display or the entire computer is about to go to sleep.

Implementation: This should be mostly GTK+ refactoring for gnome-power as far as the sliders are concerned. The GDM changes will have to be future work as there isn't currently any power management functions in GDM. There may be some PolicyKit issues when dealing with setting settings for GDM versus user functions. We'll need to work out how these different settings propigate for different users.

Future work: For maximum environmental points, merge screensaver settings into this window, perhaps as a new first tab.

Sleep

When the computer is due to go to sleep, if the “go into zero-power mode” setting is set to “Immediately”, it should hibernate. Otherwise, it should set itself to wake up either at the “Go into zero-power mode” timeout, or when it estimates that the battery will have 15 minutes of full power left, whichever is earlier, and suspend. When it wakes up in either of those two circumstances, it should wait until the hard disk is in a safe state to write to (if this is detectable), then hibernate.

Implementation: When told to sleep, Ubuntu should set the wakeup time for the necessary number of minutes. When waking up, the kernel should set a hal wakeup-reason flag. pm-utils should then read this flag, in deciding whether to (a) hibernate or (b) wake up X.

Big Red Button

The Big Red Button should be off by default, because if retained it would work identically to the “Quit” menu item. One access point for Quit in the GUI, and one access point on the actual hardware (the power button), is more than enough.

Index to the previous options

Log Out: Activated by choosing “Quit”.

Lock Screen: Activated by the “Lock” menu item.

Switch User: Activated by the account menu in the panel.

Suspend and Hibernate: Merged into “Sleep”. Activated by closing a laptop’s lid. Can happen after a period of inactivity (on any type of computer), if configured in the Power Saving settings.

Restart: Activated by choosing “Quit” then “Restart”, as before.

Shut Down: Activated by choosing “Quit” then “Shut Down Now” (as before), or just by choosing “Quit” and leaving the computer undisturbed for a period configured in the Power Saving settings.

Migration

... [need to adapt existing Power Management settings to the new settings]

Implementation: ...

Test/demo plan

Other ideas that were considered

Unresolved issues

Comments/questions

Regarding the assumption that "Putting a non-laptop machine to sleep is rare enough that we can make it something that happens after a configurable timeout (or from a terminal command), rather than a command in the Quit interface":

I don't think that is true. I know desktop users who fits this profile:

Another of the above asssumptions is that "Having a simple Quit interface, and more complex power management preferences, is better than the reverse". In the power management preferences, next to the other sleep settings, could be added a checkbox, defaulting to off, which when turned on would cause an extra entry to appear in the System menu, near Quit and Lock Screen, which the user can choose to manually initiate hibernating the system -- thus providing a simpler quit interface (menu entry instead of terminal command), on the cost of one extra checkbox in the preferences.

This would of course also help the laptop users (such as myself) who don't want the system to sleep when they close the lid, but want to be able to hibernate when they choose to.

Mpt, what do you think about this idea? I know in general it's terrible to have a preference only controlling the visibility of some UI element, but in this case would it not be a better solution than leaving people with no way to initiate a hibernation? --JonasJørgensen

I think that it is a bad idea to take this much control away from the user. On my laptop I often listen to music with the screen closed, so I would not want that to be the activation for suspend. If I am putting my laptop in my bag, but am going to use it soon, I put it in suspend. If I am going to be not using it for a longer period of time, I want to be able to hibernate it directly, rather than waste the battery power by leaving it in suspend for a while first. I also use hibernate to quickly switch between operating systems. I am a somewhat advanced user and suspend/hibernate from the command line is not a problem, but it is much more convenient to push the power button and click suspend. But I would imagine that there is a middle group of people who know and care about the different I think that the way that Ubuntu currently operates is better than the gnome default - a single dialog for all related tasks is much more usable, and a third menu for sleeping, which is almost identical in functionality to shutdown and reboot, would only complicate things unnecessarily (especially for people with laptops, who can normally press the power button to bring up the shutdown screen). If six or seven options in the shutdown screen is considered to complicated, then I would suggest a default as described above, but with checkboxes in the power management screen to enable additional buttons for suspend, hibernate, etc (kind of like how kde does it). Finally, with regard to the reboot option, I think that is dumbing it down too much - as mentioned above there are reasons to restart even with a single-os installation (such as a kernel upgrade). In the current description, it sounds like the reboot icon would appear only in those cases (i.e. the user clicked "restart later" in the update manager alert), which becomes inconsistent and confusing - the user is never certain whether or not the restart icon will be there when it is needed. Additionally, in order to keep the dialog centered, the placement of the other icons would have to be modified depending on whether restart is currently showing. This inconsistent placement thwarts any efficiency gained through muscle memory, as it the user must read each button every time rather than just remembering where the shutdown button normally is. --Elyk2

In regards to the idea of popping up a message box whenever you try to logout/restart/shutdown if any applications are left open, that's one thing I hate about Macs. When I say logout/restart/shutdown, that means logout/restart/shutdown. If there's an open application, shut it down for me, don't tell me "no, close the application first". Think of it like this, if you tell your kid to go to bed and he/she says, "no", is that not aggravating? --RossPeoples

I find this new approach is very interesting in many ways (even revolutionary), but I think some things as to take the control away from users is not a good idea. I definitely want to decide myself when and how to exit, the computer should support but not control me (decide for me too, but only if I want it...). So I used some ideas from this specification and prepared another one, but with the goal to remain the control by users and, yes, to simplify the actual exit approach (but more in the classical way), please take a look: http://ubuntuforums.org/showthread.php?t=687369
PS: my proposal isn't a dogma, please feel free to change it, make it more better (or also worse ;-)), I think the both approaches could collaborate in many ways...
Else I would have the follow question: how are you going to care the situation if there are some other users logged in? Actually they just lost its data if one user performs "Shut Down" or "Restart" (actually there isn't even simple warning...). (Please take a look at the "Open Issues" section in my proposal).
Thank You, Roman Friesen (krokosjablik)

Using Terminal to manually trigged Suspend/Hibernate is *not* an only option. GNOME Power Manager notification area icon provides way to trigged both actions. This is my main way to suspend or hibernate mine laptop. -- Zdzichu 2008-04-01 10:33:09

Please, please expose gnome exit operations (esp. shutdown & restart) to the terminal, preferably with a mechanism to force the operation (i.e. avoid question dialogues). Existing commands 'shutdown' (beep!), 'reboot' (beep!) & 'telinit' (no beep) are no substitute. Gnome exit ops from the terminal would let advanced users create their own solutions independently of any GUI team decisions, e.g. reckless (make a big red button that shuts down without questions), simplified (make a simplified menu for that hypothetical uncle's laptop). -- FredCurtis. P.S. Was pleasantly surprised to see the harmless lock-screen op factored out as a button/shortcut in 8.10.

I think on "Sleep" command it should suspend AND hibernate at the same time. And after some delay, just shutdown (move to hibernate). If you wake up PC before that delay it would use RAM, after delay or if power was gone - HDD would be used. Why? To ensure that hibernate will succeed. Even if power was suddenly off while PC is in suspend mode, we have already done hibernate, so it won't hurt. So the idea is to do critical operation (hibernation) as soon as possible. --tonnzor

Those people who don’t want their laptop to suspend or hibernate when closing the lid, but do want it to suspend or hibernate on other occasions, are technical enough that we can trust them to suspend or hibernate with terminal commands rather than in the graphical interface.

-Solve this use case: I want to shutdown my computer fast to put it into my bag, I don't want to be tripped up by errors from slow programs. My interpretation of this spec is that the process would be this: click "quit", wait for the delay while applications are closed, reach the shutdown screen, only then can I manually click the "shutdown now" button.

-Less importantly, I have no idea why the word "Mains" should be used, is that even part of the english language? Why not "Main Power"?


CategorySpec

ExitStrategy (last edited 2009-09-29 17:35:37 by eth0)