Installing and Updating Software Blows Goats

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.

Dear lazyweb…

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.

Ignoring partitions…

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.

McCann driving the multiuser desktop…

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.

Nouveau 2D progress

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!

Mapping keys : unfucking one keyboard at a time

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.

SONY USERS:

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.

THINKPAD USERS:

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.

Big Note:

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.

Walking around half open

I've just had a bug reported:

At Ottawa Linux Symposium, it was common to see people walking around with
their laptops half-open because they didn't want them to sleep. Whether wardriving, Web serving, or music playing, some people do not want their PCs to sleep.

I cast my mind back to GUADEC, and sure enough I can remember an entrance hall full of people walking about with half-open laptops. This made me smile.

I figured I could use the inhibit applet for people to use for a “don't do what you normally do” type action.

So now we have a new toy. With gnome-power-manager from SVN you can add the standard  “inhibit” applet into the panel, click the button, shut the lid and walk over to show someone your new coolness.

But wait! Some laptops melt or get rather hot when you do this. So just in case we have the following warning that is displayed when you manually inhibit and you have either suspend or hibernate configured as the battery lid close action.

New warning…

So, maybe for GUADEC this year we'll see less half-open laptops…

powertop is getting it wrong…

The powertop utility from INTEL has been very interesting to use. Unfortunately, I'm quite pissed off.

“gnome-power-manager doesn't dim the backlight to save power it actually just changes the colour of the pixels on the screen”

Err no. It never has and never will. It actually dims the backlight on all the hardware I have tested it on.

Dimming to 30% when idle saves me about 1-3W of power on all three laptops I own. That's a X60 (ibm+intel), n100 (lenovo+nvidia) and a A10 (toshiba+old-intel).

For the X60, g-p-m calls HAL, which writes to the thinkpad_acpi controlled backlight class. This then writes a value into the embedded controller address space (or issues a CMOS command) which changes the hardware backlight brightness.

Really impressive graph by the way – but what crack are you smoking?