ScreenSaver

Summary

Ubuntu currently uses the xscreensaver package as the screen saver and screen locker. While performing its job quite well, it does not integrate with the rest of the desktop as well as possible. Furthermore, its preferences dialog duplicates some of the settings covered by gnome-power-manager.

The gnome-screensaver package is an alternative to the xscreensaver daemon, which provides better integration with other desktop components, so could provide a better user experience.

Rationale

Late in the Breezy cycle, gnome-screensaver was considered as a replacement for xscreensaver, but rejected because it had too many missing features. Now it needs polishing to bring it up to the Ubuntu standard of excellence for Dapper.

Use cases

Scope

Design

Switching accounts

(This is first because it's the most in need of improvement.)

The original from gnome-screensaver:
upstream-switch.jpg

What we want:
switch.jpg

How to get from here to there, in order of importance:

  1. Nuke the "Unlock" button.
  2. Change "Switch User" to "Log In..." (with a space, an uppercase "I", and an ellipsis).
  3. Change "Switch to another user?" to "Switch to account:" (with a lowercase "a" and a colon, and not bold).
  4. Nuke the fuel gauge.
  5. Nuke the large person icon. This is a dialog, not an alert.
  6. Make the listbox rows large enough to see the account icons properly.
  7. The gap between the window edge and the controls should be 12 pixels, not more.
  8. Add a new column to the list to show the person's real name.
  9. Wangle the listbox so that the real name is presented in small type under the account name (as done with program names in gnome-app-install), rather than in a separate column.

Unlocking

The unlock interface is the followup to a screensaver that may be very beautiful. And when you're returning to the computer, you're often thinking of something you want to do right now. Therefore simplicity and elegance is more important here, and exact consistency is less important, than in your average dialog.

The original from gnome-screensaver:
upstream-unlock.jpg

What we want:
unlock.jpg

How to get from here to there, in order of importance:

  1. Nuke the fuel gauge. When "That password is incorrect." text is shown, it should be at normal size, immediately underneath the password field.
  2. Put the account name, centered, in extra-large type (but not bold) at the top. (Showing only the real name is a bad idea, because you may have multiple accounts with the same real name.)
  3. Nuke the "Name:" label. Instead, put the real name in small type underneath the account name.
  4. Nuke the "Welcome to computer name".

  5. Change "Switch User" to "Switch Account..." (with a capital A and an ellipsis).
  6. Nuke the lock icon. Instead, the icon of the current person should appear centered above their account name. (If the person does not have an icon, the Ubuntu icon -- no "ubuntu", just the icon -- should be used instead.)
  7. Nuke the icons in the buttons. They're clutter.
    • This breaks consistency with rest of the desktop. We should do them all or none. -- CoreyBurger

      • No it doesn't; Ubuntu's pushbuttons are already extremely inconsistent. See for example Firefox, About Me, File Management, Tali, and the whole of OpenOffice.org. Given the variation and the scenario, we choose the simpler option. -- MatthewPaulThomas

  8. Nuke "Enter a password to unlock the screen". (It's the only thing you can possibly do, so inctructions are fairly pointless.)
  9. Make the password field and its label a centered group (so that the gap between the left edge of the window and the "P" is the same as the gap between the right edge of the window and the right edge of the password field).
  10. The "Cancel" and "Unlock" buttons should be the same width as each other, but not the same width as the "Switch Account..." button.
  11. Make the gap between "Switch Account..." and "Cancel" at least 12 pixels, while the gap between "Cancel" and "Unlock" is 6 pixels.
  12. Nuke the access keys for "Password", "Cancel" and "Unlock". "Password" doesn't need one because you're there by default, "Cancel" is triggered with the Escape key, and "Unlock" with the Enter key.

Post-Breezy

  1. Use the gdm login screen for switching accounts, and tidy it up. (A Windows-XP-like password field embedded into the account list would save one mouse click for every account selection. And an OS-X-like dialog shake would save having to print ugly "That password was incorrect" text.)
  2. When the screensaver activates (either automatically, or with the "Lock Screen" command), the screen should first take 1000 ms to fade to black. (Imm. blanking is often very useful CoreyBurger)

  3. The keyboard should behave like it does in xscreensaver, where the first character you type is treated as the first character of your password.

  4. 2000 ms before the timeout expires for entering your password, the dialog should start fading to black. If you start typing during those two seconds, the dialog should fade up to to full brightness in 500 ms.

Implementation

Code

  • A wrapper xscreensaver program that handles scripts expecting xscreensaver to be present. And translates single dash options into double dash options.

  • Most of the above code changes got already applied upstream, UI changes should be fairly minor for us.

Data preservation and migration

When first running gnome-screensaver, get the settings by writing a "first start" wrapper that parses the xressources from ~/.xscreensaver into gconf keys

Outstanding issues

ACPI Scripts

The current ACPI scripts talk to the X screensaver using the following method:

  • list the current X sessions by looking for the unix domain sockets in /tmp/.X11-unix/
  • for each socket, find the user that owns the display, and su to that user and run "xscreensaver-command" to send the command.

The combination of gnome-screensaver, gnome-power-manager and hal handles this automatically without explicit support from the ACPI scripts:

  1. hald-addon-acpi listens for ACPI events (either directly from the kernel or acpid).

  2. when an ACPI event occurs, a notification is broadcast on the dbus system bus.
  3. gnome-power-manager listens for notifications from HAL. When a notification is received, it tells gnome-screensaver to do the appropriate action (lock, throttle, etc).

Suggestions

Having easier ways to code our own screensavers and get them working are welcome - like running swf animations as screensavers and whatever.

Recently some screensavers made on sdlBasic were registered as Launchpad projects, and seems to be very easy to code but information of how can we get them working on xscreensaver/gnomescreensaver are welcome - https://launchpad.net/sdlbasic-screensavers - http://nitrofurano.linuxkafe.com/sdlbasic

sdlBasic were not packaged in the Ubuntu repositories yet

OpenHSP (HotSoupProcessor - OnionSoft), has also a Linux port, and seems to be great for coding interpreted screensavers as well.

BoF agenda and discussion

ScreenSaver (last edited 2008-08-06 16:29:55 by localhost)