How about these as UI designs? Click for a bigger image. I'm no UI design guru (and I was advised not to do art for GSCE…), so please complain loudly if you don't agree or have better suggestions. When we've got a simple GUI fleshed out we can work towards user interactions and how to use an API. Thanks.
Before we talk about API and system requirements we should talk about use cases and system interactions. I think this is where update systems have gone wrong in the past, closely integrating with the existing package system rather than studying the complete ideal user interactions.
Feel free to disagree and correct the interactions – either email me or preferably leave a comment.
Boot Time Security Update
Toby logs into his GNOME desktop. A notification area icon with a critical icon appears in the top right and a libnotify popup tells him there are 3 three critical security updates. The libnotify popup has three buttons:
- Update now in the background
- Always do updates automatically
- Ignore for now
Toby clicks the first button and the update completes in the background. When completed, after a few minutes, another libnotify popup appears telling Toby that the update was completed and after a few seconds the status icon disappears.
Downloading an Unknown Application
Suzanne wants to open a word file. She opens the software finder tool and types “office file” into the search box. A list of software appears, with OpenOffice being the top entry. She clicks the OpenOffice entry to highlight it, and clicks “Install now”. Suzanne is not an administrator, but because she is locally logged in and the package is from the “distro core signed repository” the root password is not required. A notification area icon appears with a downloading icon and the package manager is closed. When OpenOffice is installed, a libnotify popup tells Suzanne that the software has been downloaded and is now ready to use.
Installing debuginfo files automatically
Simon wants to borrow the computer while Suzanne waits for OpenOffice to download. He uses fast-user switching to switch to a new login. He notices the same downloading icon in his session which indicates Suzannes' download is still in progress. He starts Pidgin which then crashes. The bug-buddy window appears which prompts him to install the debuginfo so a valid backtrace can be detected. He clicks yes, and a libnotify windows appears telling Simon that the request has been queued and that he will be notified when the debuginfo has been installed. When installed, the bug-buddy helper continues and submits a valid bug.
Installing new features
Suzanne switches back to her session and wants to add some clipart to the word file she has just opened. She clicks “Insert” and then “Clipart” and then a windows pops up telling her that clipart is not installed. She clicks “Install” and a progress bar appears and moves across as the clipart is downloaded and then installs. When finished, the dialog disappears and she chooses a picture of a cat.
Installing and updating software is a really crap experience in most of the Linux distributions that I've used. Problems:
- You run the software install as a user session as root, meaning if you start an update, and then log out, or X crashes you loose your rpmdb or equivalent installer state.
- If you start a software update and the GUI update tool hangs you loose your rpmdb.
- There are long “hangs” with no progress bars, at least on Fedora.
- Every time you log in to a new user a new update tool the entire STACK is loaded, once for each user.
- The update tools and install tools are distro specific and a PITA to maintain.
- Most of the distro tools (yes I'm looking at pirut and pup here) suck ass from a UI and HIG point of view.
- You can't run a update notifier, a software installer and a package query tool all at the same time.
- The fedora ones take AGES to load and actually let me search for software.
- All the tools ask me for a root (or user) password. I own the bloody machine, I shouldn't need to do this.
Don't get me wrong, apt is fantastic, yum is still pretty good, but the user experience is utter crap. Ubuntu are the clear winners so far, but still fail on many issues outlines above. The first thing I do when installing fedora is uninstall pup and yum-updatesd, as they are just too broken for me to use. So rant over. What should we do about it? Package management as a system service. Yes, per system. When you install packages you do it as a the root user, usually for all users so it makes sense to do this in the system context. Using the new system activation stuff also allows us to start the service only when it is actually needed, i.e. when someone is trying to install something, or there is a logged in user who wants updates. APT, yum, portage etc as backends Yes, so users can still drop to a root shell and use the full command set of the native tool, but common stuff is abstracted over nice abstract interfaces. DBUS API? Sure, then we can lock it down per user or per group on interface type, so for instance let all users in the admin group install and remove packages, but only let students query packages. Common tools? YES!! We choose best of breed. We have one GNOME upstream update watcher (the ubuntu one is very good) we have one GNOME software install tool for power users (synaptic is very, very good) and also a GNOME tool for end users. The ubuntu simple application chooser is also very good. Details? Remember this is just designed for common stuff, rather than abstract every little detail of the underlying backend. These are my ramblings so far:
org.freedesktop.PackageManagement.Query as=FindPackages(s) throws NotFound() i=GetInstalledVersion (s) throws NotInstalled() as=GetOptionalDependencies(s) throws NotFound() as=GetSuggestedDependencies(s) throws NotFound() as=GetForcedDependencies(s) throws NotFound() org.freedesktop.PackageManagement.Manage b=RemovePackages (as) throws OtherPackagesDepend(as), NotFound() bas=RemovePackagesWithDependencies (as), NotFound(as) b=InstallPackages(as) throws NotFound(as), DependenciesNotSatisfied(as) bas=InstallPackagesWithDependencies(as) throws NotFound(as) ::RemovedPackages(as) ::InstalledPackages(as) org.freedesktop.PackageManagement.Update b=IsThereUpdates(i) a(sis)=GetUpdates() throws NoUpdates() b=UpdateSystem() throws NoUpdates() ::NewUpdates(a(sis))
Where to go from here? I don't know. One thing I don't know how to fix is the callbacks for percentage completeness. Do we have to make the API asynchronous? Is there interest in fixing this stuff? Am I the only person who thinks the current bodges are insufficient for the Linux Desktop of the future? Please, leave comments (or email me) with any suggestions, corrections, or insults. Thanks.
I've just pushed 27 patches into DBUS head for system activation. Design document here. As usual, rpm's will be in my repo. Various people now owe me beers.
I'm soon moving out and don't want to lug around my 15″ TV. I've got a 17″ widescreen laptop, so I figure I can use that for TV and Xbox. I need a USB dongle that does digital TV, and that I can connect to composite video and phono stereo audio (for the XBox). Any ideas of something that will work with Linux? Thanks.
Yet another public service announcement. You use HAL. Every time you log in you get a device icon for a “recovery partition” that you can't use, and really don't want cluttering your desktop. HAL provides a way to blacklist certain partitions and sets a key to ignore the volume and not be automounted.
<!-- HP ships desktops with a recovery partition --> <match key="volume.fstype" string="vfat"> <match key="volume.label" string="HP_RECOVERY"> <merge key="volume.ignore" type="bool">true</merge> </match> </match>
So. Do you see a recovery partition on your Linux desktop? If so, please email me (richard_at_hughsie_dot_com) and send me the output of “lshal | grep volume.label” and we can fix this for future versions of HAL. Cheers. edit: Also provide the output of “lshal | grep volume.fstype” – THANKS! edit2: Already I've added IBM_SERVICE, SERVICEV001, SERVICEV002, HP_RECOVERY, “Recovery Partition”, DellUtility, DellRestore, RECOVERY, PQSERVICE.
Jon McCann absolutely rocked yesterday explaining how to do a multiuser desktop correctly. I've uploaded his slides here, which you really should read. There's some cool new ideas which makes stuff like gnome-power-manager in a gdm session possible (in a sane way), which we've wanted for ages. But that's trivializing all Jons' work. Seriously, this new stuff will be really cool. Read the PDF.
Dude, keep rocking.
Time taken to do the gtkperf benchmark:
Nouveau driver from two days ago: 54.94 seconds
Nouveau driver from today: 24.86 seconds
NV driver (for comparison): 40.78 seconds
So you can see the nouveau driver is now substantially quicker than it used to be, and now even quicker than the old nv driver.
Keep rocking guys!
So the “unfuck my keyboard” project is going well. We now have a way to map scancodes to keycodes even for the vendors that choose non-standard scancodes that don't get input events.
The thinkpad-acpi and sony-laptop kernel drivers now also support the setkeycode ioctl and report key presses over input. This means we can map the acpi events to keys, even when vendors do crazy things and move the decal on the button between models and ranges for no apparent reason.
ALL LINUX USERS:
So now I need your help.
Do you get something similar to this in dmesg?:
atkbd.c: Unknown key pressed (translated set 2, code 0x97 on isa0060/serio0).
atkbd.c: Use 'setkeycodes e017 ' to make it known.
Try using all the fn-buttons and the special multimedia buttons, you might find you could help make this work.
I need to know what button does what on your laptop. You can already see I've fixed Bastiens laptop by looking at this file. This gives you an idea how simple it is.
I also need to know what mapping you have. See this file and send me a patch to make it “just work” for you in the future.
You'll need to be using a very new HAL and hal-info to make this work right now. If you want the sony and thinkpad bits to work you'll also need kernel modules from git. Actually getting it working now is unimportant – getting the data as soon as possible makes sure it should work for as many people as possible for Fedora 8, or the next version of Ubuntu or Suse.
So please, visit the quirk site and help me try to fix broken keys by sending patches. I need your help.