Muon Suite 1.2.0 released

August 12, 2011

After six months of development, I’m proud to announce the release of the Muon Suite, version 1.2.0.

The Muon Package Management Suite is a collection of package management applications that make package management easy on Debian-based systems, whether or not you know what “package management” means. Packages for Kubuntu 11.04 “Natty Narwhal” are available in the QApt  PPA. Packages for the development version of Kubuntu 11.10 are available through the official repositories.

The focus of this release has been adding features to the existing Suite applications, as well as refining existing ones.

I would like to also thank the KDE translation team for their awesome work this cycle. The Muon Suite is now fully translated in 20 languages with 9 more languages over 70% translated. There are four new fully translated languages since 1.1.0. Awesome work all around.

What’s New

Muon Package Manager

Lots of work has been put in to refining the user interface of the Muon Package Manager to make it even more convenient and usable. Additionally, several new features have been added to give you greater control over your packages. Many of these changes also apply to the Muon Update Manager, which shares components with the Package Manager.

New features and improvements:

  • A history view like the one included with the Muon Software Center has been added as a dialog. You can access it from the “View” menu, or by using the Ctrl + H shortcut.
  • Added an option to the configuration dialog to make APT treat a package’s “Suggests” as dependencies. For those who don’t care about disk space. ;-)
  • Modifying settings that require administrator privileges to apply now turns the “Apply” button’s icon to the key icon, as in KDE’s System Settings.
  • An option has been added to control whether Muon warns you about installing untrusted packages, or disallows the installation of them entirely.

  • Multiple packages can now be selected and marked all at once by selecting them and choosing an action from the right-click menu.
  • A package in the package view can now be de-selected, hiding the details widget, by ctrl-clicking on the package.
  • Packages can be locked at their current version via the right-click menu. Locked packages have a little lock emblem on the package graphic. Additionally, a “Locked” filter has been added to the status filter box.

  • The layout of the status bar has been improved. These improvements allowed me to remove the frames around the status bar labels.

  • Space-saving improvements were made to the package detail tab widget. The sides and bottom of the tab widget frame were removed, leaving less borders around the edges. The marking buttons were moved to the line with the package short description, and the “screenshot” button was removed since most packages don’t have a screenshot, and the Muon Software Center handles this functionality much better. The support label was also moved to the package description view. The end result gives much more space to actual detail content, wasting less on chrome.

Ever been in a situation when you’ve needed to install packages on a computer without internet access? In version 1.2, the Muon Package Manager makes it easy to do this. First, mark the packages that you wish to install as normal. Go the “File” menu and select “Save Package Download List”. Next, take this file over to another computer with Muon and select “Download Packages From List” from the file menu. After pointing it to your USB stick, Muon will happily download your packages and place them on your USB stick. Lastly, take your USB drive back to your internet-less computer and go to “File -> Add Downloaded Packages”. Once this is done, you can hit “apply” and install your packages as normal.

Muon Software Center

There are several new, nifty features for the Software Center this time around.

  • Installed packages now have a checkmark emblem, as shown here.
  • The “Addons” view and “Reviews” view (more on that in a second) can now be collapsed.
  • The application launcher dialog that appears when you install new applications has been replaced by a less intrusive in-window notification, with animated appearance/disappearance. (Based on your KDE widget effects settings, not related to desktop effects.)

  • Non-application packages are now shown in PPA views, since many PPAs host software not in the Ubuntu application database.
  • Added some Debian branding love.

  • Miscellaneous optimizations to make browsing applications even faster.
The biggest feature for the Muon Software Center in 1.2 is support for the Ubuntu Ratings and Reviews API. Previously, PopCon usage statistics were used to determine ratings given to all applications in the Muon Software Center. This was really a bit unfair, though, since it could mean that a perfectly good application that wasn’t widely used would get a seemingly low amount of stars. Using the ratings from the Ubuntu application ratings server means that ratings from normal people determine how many stars an application gets.
Read Only support for full application reviews has also been implemented. I know that it kinda sucks that you can’t submit reviews from the Muon Software Center at this point, but I figured this is better than not being able to see them, either. 🙂 The reason that full read/write support is not implemented is that there is as of now not really a suitable way for C++ Qt/KDE applications to interface with the Ubuntu Single Sign On service, which is necessary to submit reviews. Work on an SSO interface was started by the unstoppable Harald Sitter during his Ubuntu One GSoC project last year, but the SSO API has since changed and the KDE SSO stuff will need a fair bit of work before it is useful again. I plan to work on this during the next release cycle to ensure full review awesomeness. As a note, this is also the reason why support for the Ubuntu Software Store has not been added yet.

QApt Utilities

Several new utilities are bundled with QApt to help seamlessly integrate package management with the desktop. These include:

The “Command Not Found” Plasma Runner

Yes, the one-and-the-same Plasma Runner that I mentioned over a year ago here. Back then QApt hadn’t had a stable release, and I didn’t really have a venue to publish it. (I could have published it by itself, but I’m lazy like that. :P) It functions exactly the same as I mentioned in the original blogpost. If you type the name of an executable that is not currently installed, this runner will suggest the package that provides this binary. This is especially useful on new installations where you may not have remembered to install something.

The QApt Deb Installer

This utility functions much like GDebi, with some bonuses like included icon support and less memory usage.

Now I’m putting on my Kubuntu hat. As was mentioned back with the announcement of Project Timelord, Kubuntu wanted to move away from python-based tools for the default installation due to their resource-hungriness and proneness to runtime errors. Now that the Ubuntu Software Center is Ubuntu’s primary .deb installer rather than GDebi, it makes even more sense to use the QApt Deb Installer. (I know that GDebi is still being maintained, but the KDE UI is somewhat dead at any rate, with nobody to step up to give it the maintenance it deserves.)

The QApt Deb Thumbnailer

This is a thumbnailing plugin for KDE. It offers thumbnail previews of .deb files in KDE file browsers. (Dolphin, open/save dialogs, Konqueror, etc) Not much else to say, but pretty nifty if I do say so myself.

The QApt GStreamer Helper

This utility provides a helper that integrates with GStreamer’s codec installation API, which Phonon uses to automatically install missing codecs for multimedia playback. It uses QtGStreamer which makes dealing with GStreamer a whole lot easier.

The Future

For Muon Suite 1.3 I plan on polishing existing features, as well as providing some new ones. Things I have on my todo list in no particular order that may or may not get done are:

  • Support for submitting reviews to the Ubuntu Ratings and Reviews server.
  • (Optional, I know some people would prefer not to have it) Support for the Ubuntu App Store.
  • Configuration for the save on quit warning. (Impossible to re-enable once disabled)
  • Rewrite the Muon Update Manager to look less like the Muon Package Manager, and be more usable/appeal to a wider target audience skill-wise. (Read: simplification. Power users are probably already using the Muon Package Manager for upgrades already, since you can control what gets upgraded, and likely compulsively check for updates like I do. :P)
  • Further refinement of the new utilities distributed alongside LibQApt.
  • Add a magnifying glass when hovering over the screenshot thumbnail in the Muon Software Center, to signify that it can be made bigger.
  • Add an option to always be notified of dependencies to be marked for install in the Muon Package Manager. You can already can (and should) hit the review button before you hit apply, but apparently some people just like a dialog. 😛
  • More (optional) data columns in the main view of the Muon Package Manager. This has been requested before, but I have had higher priorities such as package lock support and multiple package selection, etc.
  • Currently the Muon Software Center resets to the home screen after all pending installations has finished so it can let APT reload its internals. I’m fairly sure that this is unavoidable, but I think it’d be nice if afterwards it took you back to where you were, if the package you were still exists, etc.
One thing I’ve already gotten done is a replacement for the screenshot popup dialog in the Muon Software Center.
Instead of an external dialog, it is now an overlay over the application view. It animates in nicely and can be dismissed by clicking anywhere. If possible, I’d also like to see about blurring the background behind the overlay for extra fanciness. This is was the last popup (except for the external software sources editor program, error dialogs, and such) in the Muon Software Center, keeping with my vision that popups are unwieldy and annoying.
Debian packages are still coming soon, in the Debian sense of the term. All of the dependencies are packaged, so all that’s left is to actually package and upload. The Kubuntu packages should be 95% of the way there, so all that should need to be done is to review and make changes as necessary. I’ve no specifics on when it’ll finally be “in”, but there is progress on that front. 🙂

Geeky Stuff

If you’re a developer developing a package management frontend using QApt, then QApt 1.2 will have some very nice new features, especially in regards to handling raw .deb files. Here’s an overview of what’s new on the QApt front:


The new DebFile class is an interface for information about .deb files. All debian/control fields are accessible, as well as the file list, a list of included icons, a getter for the .deb file’s md5sum, as well as functions to extract the .deb’s contents to an arbitrary location. You can do pretty much anything you’d ever want to do to a .deb file with the class. The QApt Deb Installer and Deb Thumbnailer are two good references for using this class.


This class provides detailed relational dependency information about packages and debfiles, such as depends, recommends, conflicts, replaces, breaks, etc. It is very useful for resolving dependencies with .deb files, where APT cannot be used for dependency resolution.

Both DebFile objects and Package objects have several functions returning DependencyInfo objects in 1.2.


  • Added the ability to pin and unpin packages via writing files to /etc/apt/preferences.d/. Refer to the docs in package.h for more info.
  • Added an upstreamVersion() function to the Package class to return the upstream  version of a package. Also include a static version in case we have a package version without a Package object and want the upstream version without having a Package object instantiated.
  • Added a static method “compareVersion()” to the Package class to compare the  versions of two packages, returning the standard strcmp() less than 0, 0, or greater than zero when appropriate.


  • Added Backend::saveDownloadList() to create a download list of all packages that are marked and need downloading, usable by the new downloadArchives() function.
  • Added a downloadArchives() function to download a list of archives to an arbitrary directory. The worker will emit package download signals as usual. This can be useful, for example, for downloading packages to a USB stick for a user.
  • Added Backend::addArchiveToCache(), whichs adds .deb files for the candidate versions of existing packages to the apt .deb cache. This function can be used to add .debs from e.g. a USB stick so that computers without internet connections can update packages.
  • Added an installDebFile method to QApt::Backend and the QApt Worker. This method starts the installation of the given .deb file, complete with a DebInstallStarted event signal on start, DebInstallFinished when finished, and a debInstallMessage() signal in between for dpkg output. A new error, WrongArchError, has been added to QApt::ErrorCode for when a .deb file cannot be installed due to incompatible CPU architectures for binary packages. (No multiarch support yet)

Full changelogs for both the Muon Suite and LibQApt can be found here and here.


Muon Suite 1.1.0 released

January 16, 2011

After six months of development, I’m proud to announce the release of the Muon Suite, version 1.1.0. The main focus of this release has been to add additional package management utilities to help further round out the package management experience. More specifically, Muon Suite 1.1.0 introduces the Muon Update Notifier, Update Manager, and Software Center.

Packages are available from the QApt PPA for Kubuntu 10.10, and from the official archives in the prerelease version of Kubuntu 11.04. Packages of interest are the “muon” and “muon-installer” packages. Source tarballs for QApt and Muon 1.1.0 can be found here and here, respectively.

Unfortunately, packages cannot be made for Kubuntu 10.04 since the version of APT it has is too old, and a newer version cannot be backported without complications. I did notice that the Kubuntu 10.04 PPA was out of date, (QApt/Muon 1.0.2) so I updated the packages there to QApt 1.0.4 and Muon 1.0.3, the latest releases. 🙂

In addition, I’d like to thank two new contributors for their, uhm, contributions. 🙂 Guillaume Martres is responsible for both the revamped download view and network awareness features, and Felix Geyer has contributed various patches to the project. I would also like to thank the KDE l10n team for their amazing work on translations. In this release, Muon Suite is 100% translated in 16 languages, and it is over 70% translated in 4 other languages. There are seven new fully-translated languages since 1.0.0, which is great!

What’s New

Muon Package Manager

Not to be outdone, the classic Muon Package Manager has received some spiffy improvements in 1.1.0. These include:

  • Several new status filters, such as the “Residual Configuration” filter for viewing uninstalled packages that can be purged, and the “Installed (auto-removable)” filter for viewing packages that APT thinks are obsolete/unnecessary that can be removed without harm.
  • A menu item has been added to mark all auto-removable packages for removal.

Packages marked for auto-removal

  • A progress bar to show the progress of search index rebuilds has been added.
  • Searches are automatically reloaded after a rebuild of the search index.
  • The origin of a package has been added to the “Technical Details” tab.
  • The contents of the “Installed Files” tab are now sorted alphabetically.
  • You can now sort the package view by the “Status” and “Requested Status” columns.
  • Canonical-supported packages now have a Kubuntu or Ubuntu emblem on their entry in the package view. (Depending on if you’re running Kubuntu or Ubuntu). (Visible in the above screenshot)
  • An all-new download view, offering more detailed information on the items being downloaded.

New download view

  • A configuration dialog for controlling various APT system options has been added.

Introducing the Muon Software Center

The Muon Software Center is a new utility that provides an easy way to get new applications. With a focus on applications, the user does not have to worry about “package management” at all, and its simple interface means that anyone can use it. Primary features include:

  • Categorical browsing

  • Informative details about each application

  • Easily install addons, if available

  • Browse PPAs

Showing a single PPA

  • Fast, easy search. (No knowledge of package names required)

  • Easily launch newly-installed applications

  • The history view gives a searchable, filterable overview of what you’ve installed, removed or upgraded over the past few months.

The History View

  • The queuing system allows you to browse packages while larger ones are installing

Introducing the Muon Update Notifier

Not too much to say here. The Muon Update Notifier just notifies you of updates. 🙂

These notifications are configurable from either the Muon Package Manager or the Muon Update Manager.

Muon Notifier settings

Introducing the Muon Update Manager

The Muon Update Manager is a GUI for updating your system. Updates are automatically marked, and can be installed via the toolbar button in the lefthand corner. The details tabs work much like they do in the Muon Package Manager, and the download/commit views are the same as in the Muon Package Manager, too.

The Future

For Muon Suite 1.2 I’d like to further refine all of the applications in the suite. I’d like to add more power-user features to the Muon Package Manager such as package pinning support, as well as support for configuring more APT system settings. I would like to investigate adding optional commercial software support (Ubuntu’s “App Store”) to the Muon Software Center. (Though I’ve not yet been able to figure out the magic behind that from the Ubuntu Software Center sources) The Muon Update Manager definitely needs to become more update-centric. As of now it’s just a stripped-down version of the Muon Package Manager. Hopefully for 1.2 it will become less package-manager and more update-manager.

Geeky Stuff

If you’re a developer developing a package management frontend using QApt, then QApt 1.1 will have some very nice new features. Here’s an overview of what’s new on the QApt front:


  • LibQApt now compiles with QT_NO_CAST_TO_ASCII and QT_NO_CAST_FROM_ASCII.
  • Compile with -fvisibility=hidden by default so that libqapt doesn’t expose symbols from libraries it links against, making life easier for packagers everywhere.


The new Config class is an interface to APT’s system-wide configuration. It features a KConfig-style read/write API, and uses proper Polkit privileges for the writing of system settings. The QApt::Backend class contains a QApt::Config object by default, accessible by the Backend::config() function.


The QApt::History class is an interface to the APT history log files. A QList of HistoryItem objects is accessible through the historyItems() function. The HistoryItem class represents a single transaction recorded in the APT history logs. From a HistoryItem you can obtain the start date of the transaction, lists of installed/removed/upgraded/downgrades/purged packages, as well as an error string, if the transaction ended in an error.


QApt::Package has gained some new features in QApt 1.1 as well.

  • The new recommendsList(), suggestsList(), enhancesList() and enhancedByList() functions return QStringLists of the names of packages that have the aforementioned relational statuses with the Package.
  • The latin1Name() and latin1Section() functions offer more efficient ways for internally dealing with package names and package sections. They return QLatin1Strings, which are cheaper to construct and compare than QStrings. This makes them ideal for sorting by package name, or for searching for a package by name.
  • The controlField() function allows you to get the value of an arbitrary field of the package’s debian/control file. This function is useful for obtaining the values of nonstandard fields, such as the “Supported” field that Ubuntu packages supported by Canonical have, or the custom GStreamer metadata fields that gstreamer plugin packages have.


  • Added a packageDownloadProgress() signal for per-package download progress reporting. This enables client applications to give more detailed information about currently-downloading packages, including parallel package downloads.
  • Added a markPackagesForAutoRemove() method that acts like apt-get autoremove, marking packages for removal that APT deems obsolete.
  • Added a new setUndoRedoCacheSize() function to QApt::Backend. This allows applications to customize the undo/redo stack size, allowing them to increase it if RAM usage is less of an issue, or decrease/eliminate the cache if RAM is tight, or the feature is otherwise unused anyways.
  • Added a saveInstalledPackagesList() function to QApt::Backend that exports a list of all installed packages to the given path. This list can be ready by Backend::readSelections() and is fully compatible with the Synaptic Package Manager.
  • Added an areChangesMarked() function to provide an easier/more efficient way to check if there are pending changes without checking the emptiness of the QApt::PackageList that Backend::markedPackages() constructs and returns.


For those it may interest, here are the detailed, technical changelogs for what has changed between the release candidate and final release for QApt and Muon.

Muon Suite 1.1.0


  • Automatically reload searches after a rebuild of the search index is triggered


  • Only show PPAs/package origins that have applications in the sidebar of the Muon Software Center
  • Fixed a bug that popped up in the 1.1 prerelease cycle that would disallow quitting an app after a user cancelled a download.
  • Fixed a crash when an error triggered a reload behind the Muon Software Center’s back (Bug 262712)

QApt 1.1.0


  • Added a QString-taking overload of the Package::controlField() function
  • Use a pkgTagSection object from libapt-pkg to parse the control field instead of rolling our own.
  • Only ask for the passwords after we’re sure we can start downloading. (After untrusted dialog, disk space check, etc)


  • Use pkgDepCache::GetCandidateVer() rather than CandidateVerIters throughout the QApt::Package class to make things more robust against errors due to broken/partially installed packages. (Bug 262262)
  • Fix Package::priority() not working at all due to a faulty validity check
  • The Supported package tag can also report years, not just months, so support this as well.

Muon Suite 1.1 Beta 2

December 21, 2010

The second beta of the Muon Package Management Suite (as well as its supporting library LibQApt) version 1.1 is now available. The focus of this release is to fix bugs found during the testing of the first beta, as well as UI tweaks to the new Muon Software Center. Packages for K/Ubuntu 10.10 are available from the QApt PPA. (Of interest are the muon and muon-installer packages)

Here’s a detailed list of what’s changed since Beta 1:

Muon 1.0.90


  • Add an “addons management” feature, where you can manage common addons available for applications.

Addons management

  • Overhaul the appearance of the application details page.

Revamped details page

  • Move the progress bar in the ApplicationExtender into the ApplicationDelegate itself. This way you can see applications that are being installed/uninstalled without having to click on them to extend the extender.


  • Get rid of the unused status bar in the Muon Software Center. It was only slowing down startup time.
  • Use the new QApt::Backend::Package(QLatin1String) overload to find out what package our Application represents. Slightly speeds up ApplicationBackend::init()
  • Create one KRatingPainter in the ApplicationDelegate constructor, and don’t create a new one for every paint()
  • Use the new QApt::Backend::areChangesMarked() function. This avoids constructing a QApt::PackageList as well as 67,000 calls to QApt::Package::state() in the Backend::markedPackages() function


  • Make reloading the Muon Software Center’s ApplicationBackend two-staged so that we can both delete things before they become invalid and cause crashes, while at the same time not reloading too early and causing crashes. (Bug 259026)
  • Don’t bump the Muon Software Center’s current transaction pointer on CommitErrors; A CommitChangesFinished signal will still fire in this case and workerEvent will handle this for us. This fixes a crash where errorOccurred would bump the iterator to the end, and then workerEvent would try to use the iterator and crash.
  • Watch for the search view’s destruction and set the pointer back to 0. This way searching, going back to top-level, navigating to some other categories, and then doing another top-level search doesn’t crash the Muon Software Center.
  • Ditch our KIconLoader stuff and use straight KIcon. The KIconLoader stuff led to some icons not being found, and some ones with transparent backgrounds having a loss in quality. On the downside, apps without an icon have the generic “unknown” icon rather than the “applications-other” icon.
  • Blacklist any apps that have “kdebase-runtime”,  “kdepim-runtime” or kdelibs5-plugins as a package, since removing these would remove most of KDE.
  • We must clear the Muon Software Center’s old category pointers from the list after they are deleted, else the list grows by ~200 bytes in useless pointers each reload.
  • In the Muon Software Center, don’t under any circumstances show the ApplicationLauncher when there are no apps to show. (E.g. in the case of a commit failure where the package is still installed or somesuch)
  • Fix a bug where the progress bar in the Muon Software Center would say “Removing” when you would install/remove addons for an already-installed App.
  • Use proper horizontal size hints for libmuon’s PackageDelegate.
  • Don’t enable the Muon Package Manager’s search widget before the package list is populated, so that it is impossible to try to search before the backend has initialized. (And crash) In theory this sort of thing could only happen under valgrind-levels of load, but for the sake of being proper this is should be fixed.
  • Bump up from KCategoryDrawerV2 to V3 for the Muon Software Center’s category drawer. Fixes some compile warnings.
  • Fix a small memory leak of QPropertyAnimations in the Muon Software Center.
  • Move libmuon to the top of the link list, so that ld can link it when the –as-needed flag is passed to it. (gold is unaffected)

QApt 1.0.90


  • Add some new functions: recommendsList(), suggestsList(), enhancesList() and enhancedByList() to return QStringLists of the names of packages that have various relational statuses with the Package.
  • Added an areChangesMarked() function to provide an easier/more efficient way to check if there are pending changes without checking the emptiness of the QApt::PackageList that Backend::MarkedPackages() constructs and returns.
  • API documentation updates, including making note of which functions are asynchronous and have signals to report events/data.


  • Add a Backend::package() overload that takes a QLatin1String. If you can use this overload, it is more efficient since you don’t have to go QString -> ascii -> latin1 -> const char.
  • Make the regular Backend::package() implementation use the QL1S overload. This is slightly more efficient since we can convert directly from QString -> latin1 without converting to ascii in between (since APT package names will always be latin1)
  • Use the new Backend::package(QL1S) overload inside Backend::search(). the QL1S overload is faster in the first place, plus since Xapian gives us an std::string it is also faster to go to QL1S than to QString.
  • Since package names are always latin1-compliant, prevent the unnecessary conversion of const char * -> std::string -> QString::fromAscii -> QString::fromLatin1 by using QLatin1String to wrap around the const char *, making the conversion process look more like const char * -> QL1S -> QString::fromLatin1.


  • Fixed an infinite loop in the Backend::search(QLatin1String) overload introduced in Beta 1. The QString::toLatin1() function returns a QByteArray when I thought it returned a QLatin1String, and my use to toLatin1() still compiled because there is a QByteArray constructor for QString, which made the search() overload use the normal search function in an infinite loop.
  • Fix a potential problem with homepage URLs with UTF8 characters not displaying correctly.
  • Fix a small memory leak in PackagePrivate. We had a pointer that we allocate to in the Package constructor which we weren’t deleting in the PackagePrivate destructor

“Muon” is now the Muon Package Management Suite

December 4, 2010

Starting with version 1.1, “Muon” is now the “Muon Package Management Suite”. (Don’t worry, I won’t try everybody try to say that for the sake of branding :P) The Muon suite is made up of the following components:

  • The Muon Package Manager. (Which has heretofore been called “Muon”) Its focus has been and will remain hardcore package management with a sane GUI.
  • The Muon Updater, an update manager
  • Finally and with grand introduction, The Muon Software Center.

Yep, the application-centric Muon GUI I’ve been hinting about for the past few blogs will in fact be included in the 1.1 release. The Muon Software Center is designed for ease-of-use, so that anybody can search for and install applications without being bothered about “packages”. But I know that everybody just wants to see the shinies, so here they are:

Screenshot Tour

The Main View

This is what you first see when you start the Muon Software Center. The default view is a categorical view, and by clicking any of the software sources in the sidebar you can view the contents of that particular source, such as a PPA.


Application lister

This is the application list that you get when you enter a category/subcategory, a particular software source, or when you perform a search.


Showing a single PPA

PPA browsing is quite easy.


The search feature is a near-instant way to find the applications you want. Blazingly fast. Seriously.


When you click “More Info” for any application you are brought to this view. The screenshot thumbnails fade in with a nice animation and background shadow after they have been downloaded, and clicking on one brings up a full-size version in a dialog window. The details page is going under some renovation at the moment, so they layout probably will change.


Removing Amor

Installations and removals can be queued, much like in Ubuntu’s Software Center. The action button changes into a progress bar that shows the progress of the installation/removal.


Application Launcher

The Application Launcher allows you to run your newly-installed applications right away.


The History View

The History View is an easy way to figure out just when you installed that one game with a fully searchable and filterable history log. The Muon Package Manager will be getting an identical history viewer.


I plan to do a Muon Suite 1.1 beta release some time over the next two days along with a QApt 1.1 beta. I’ll give the technical rundown with the release announcements, but I thought I’d give you the good stuff early. (As a note for regular readers of my blog, the Muon Software Center is what prompted me to do my KRatingPainter optimizations. Scrolling the applications list was seriously slow before them. It’s nice and smooth now, though. 🙂

I probably won’t work much more on the Muon Updater for 1.1. I’ll probably rework the GUI to make it more update-centric in 1.2.

Stay tuned for the update this weekend, and thanks for reading.

What’s cooking in Muon trunk

October 10, 2010

Happy 10/10/10, everybody!

I’d like to take this opportunity to show off some of the neat things cooking in trunk for Muon. All these features will land with Muon 1.1, for which I have not yet set a release date yet. I’ll start off with some of the smaller features for the main Muon user interface.


  • Several new status filters have been added to the filter sidebar, including “Residual Config” for de-installed packages that can be purged of lingering system config files, and an “Installed (auto-removable)” filter. The latter shows packages that were automatically installed as dependencies, where the package that depended on them is no longer installed. (Basically, apt-get autoremove)
  • An action has been added to the edit menu to mark all auto-removeable packages for removal.

  • A progress bar for search index rebuilds has been added to the status bar.
  • The origin of a package has been added to the Technical Details tab.
  • The contents of the “Installed Files” tab are now sorted alphabetically.
  • You can now sort the package view by status and requested status.
  • Canonical-supported packages now have a Kubuntu or Ubuntu emblem on their entry in the package view. (Depending on if you’re running Kubuntu or Ubuntu). (Visible in the above screenshot)

Here are some of the bigger features:

Revamped download view

New download view

The download view has been given a lot of love this cycle. A joint-effort between Guillaume and myself, (Guillaume did most of the work) the download view now reports progress for each item individually. Furthermore, it now also shows the size of each package in its own column. The screenshot really speaks for itself, though.

The Muon Updater

Another big development for 1.1 is the new Muon Updater. The name is pretty self-explanatory, but in essence it is an update-centric GUI built off of Muon parts. No filters, search or extra fluff. It also automatically marks all upgradeable packages for upgrade, as a good updater should.

Actually, it still does have a bit of extra fluff. I plan to replace the current tab widget currently stolen from Muon with something better. Less tabs, with more of a focus on updating. This will require some improvements in changelog parsing in QApt, though, so for now clicking on a package will show you the same set of tabs as they would in Muon.

The Muon Notifier

What good is an updater, if you don’t have a way to be told of updates? Based heavily off of the Kubuntu Notification Helper, the Muon Notifier notifies of both regular updates as well as distribution upgrades to the next version of Kubuntu. (The latter only if on a Kubuntu system.)

I have made some enhancements to Kubuntu Notification Helper that will land in Kubuntu 11.04 which I have also ported over to Muon Notifier. Namely, K-N-H and Muon Notifier can now either notify you will only tray icons, only notifications, or a mixture of both. When using only KDE notifications, the notifications will have actions in the notification and will be persistent. When used in combo with the tray icon, the notification will be transient and will not have actions in the notification, since clicking on the tray icon will run the action. (With the context menu exposing the hide/ignore permanently actions) By default, the KNotify/tray icon setting will be selected. I still have to make a GUI for configuring this for Muon, but this is how I have extended the existing Kubuntu Notification Helper config dialog to accommodate the new settings:

(And yes, I am aware that “Disable X” should be changed to “X only” to conform with the HIG. ;-))


Still on the todo list is:

  • Make the Muon configuration dialog, for both notification options and some APT system options, along with other miscellaneous things like how many actions undo/redo will save.
  • Tailor Muon Updater more towards updating with better/focused package tabs.
  • History viewer
  • “Slow” search as a supplemental alternative Xapian quick search
  • Muon Installer. (Might be 1.2 material)

QApt/Muon 1.0.2 release

September 14, 2010

It’s around that time again! Time to do one last bugfix release of the Muon package manager and the library it is built upon, LibQApt. Muon is a powerful package manager for Debian-based systems, with a focus on having a sane UI. This time around, though, most of the improvements that were done were made to the underlying library, LibQApt.

Sources for QApt and Muon are available here and here, respectively. Packages are already available for the development version of Kubuntu 10.10, and packages for the existing 10.04 are being prepared, to be placed in the regular PPA when finished.

A new contributor has begun… contributing. 😛 Namely, Guillaume Martres, (known to the K/Ubuntu community by his IRC nick, smarter, an anagram of his last name) Most of the bugfixes in this release were provided by him, and he has done significant work in trunk for Muon 1.1. If he doesn’t blog about that soon then I will. 😉

QApt 1.0.2

Guillaume Martres

  • The libapt-pkg library required for building LibQApt now has a CMake check.
  • Introduce a NotFoundError to assist QApt Batch in reporting that a certain package requested for install doesn’t exist.
  • Give the QApt Batch dialog buttons proper focus for different operations.

Jonathan Thomas

  • Protect the worker against malformed /etc/apt/sources.list entries, so that the QApt worker does not crash when it encounters them.

Muon 1.0.2

Jonathan Thomas

  • Fix a small regression that popped up last release, where the purge button would show up for installed packages, even though there was already a purge action in the remove button’s submenu

Guillaume Martres

  • Fix a few more instances of accidentally-editable ListView entries in the Version tab and download widget.

Things are going quite well for trunk. I’ll probably blog about some of the recent developments in a bit. No time right now, though; with final freeze approaching for Kubuntu 10.10, I am starting to have more and more to do. (Especially since school is starting up) Expect a blog soon, however. (Unless smarter beats me to it. :P)

Muon and QApt 1.0.1

August 27, 2010

After a somewhat difficult day release-wise, I am relieved to announce the release of Muon 1.0.1 as well as QApt 1.0.1, the package management library that Muon uses. For those of you unaware, Muon is a powerful Debian-based package manager with a sane GUI for KDE. A full rundown of its main features can be found here. Packages are available in Maverick proper as well as in my PPA for Lucid. Source tarballs can be found here and here.

Here’s a list of what’s changed since 1.0.

QApt 1.0.1

  • Fixed what is hopefully the last of “libapt-pkg gives LibQApt null const char pointers if for some reason libapt-pkg can’t get the string we want” crashes. (Bug 247439)
  • Fixed a typo in the API documentation
  • Slightly optimized the QApt::Package::isSupported() function by using better logic to reduce the amount of queries we make about package info.
  • A few coding style fixes
  • Fixed a bug where the worker would never send a “finished” signal if a download ended in error. (Bug 247534)
  • Report errors that occur while APT is initializing the package system. (This was an oversight… the error type was there, but was never used…) This prevents crashes on startup when errors like invalid lines in the package sources list being malformed and such. (Bug 247533)
  • A small memory leak was fixed by mlaurent. Thanks! This leak should not have had an impact on virtually any application using LibQApt that I know of, since the Backend class that had this leak on deconstruction does not get constructed/deconstructed a lot in practice.
  • Quieted some console debug messages.
  • Enhance QApt Batch’s handling of InitErrors to show the newly-available details about these errors, and quit after the user has been presented with the error and has closed the error message box.
  • In step with the Aptdaemon project, allow unprivileged users to check for updates by default. This can still be configured in the PolicyKit settings for those who wish to lock it down more, but really it shouldn’t be a security risk.

Muon 1.0.1

  • Show the newly-available details about InitErrors from QApt, and quit after the user has been presented with the error and has closed the error message box to prevent Muon from being a useless shell.
  • Add a throbber next to the “Get Screenshot” button while fetching the screenshot to enhance usability via feedback.
  • Fix a bug that crept in where unmarking a dependency of a package would not unmark the dependent package itself. (Bug 248376)
  • Disable the screenshot directly after the user clicks the button so that the user can’t go into a crack-induced trance, and click the screenshot button multiple times and create a ton of windows. Muon; saving KDE users from crack since 2010. 😛 (Bug 248382)
  • Allow purging residual system configuration files of uninstalled packages. Previously you could only purge these files if the package was installed. In 1.1 I plan to add a filter for uninstalled packages that still have residual system configuration files.

This release was a bit tough. It turns out that the CamelCase-style header for KPixmapSequenceWidget, the widget I am using for the busy throbber, was missing in KDE 4.4. This meant that Muon failed to compile in Lucid, which is where most of the users of this software probably are right now. 😦 This was after I spun the initial tarballs. New tarballs with the fix for KDE 4.4 are up as of now.

Similarly, (In that I discovered this after making the tarball) the libapt-pkg headers in Lucid are a bit different than they are now in Maverick, and the new error handling bits for APT initialization were missing an include that needed explicit inclusion in lucid.

But, they’re both out now, with a nice batch of fixes to make things more solid. Both QApt and Muon have moved to extragear, and once I figure out how (or who to speak with) to get an application branched in svn I plan to reopen trunk for new features and string changes. If crashers are found with 1.0.1 I will do a 1.0.x releases to remedy them, but for the next 6 months I plan on adding some new features to Muon, creating a more update-based GUI, as well as an application-based manager similar to Software Center.

Oh, and for Kubuntu users of Muon, in 10.10 the Debconf GUI has as of today received Kubuntu branding thanks to Dantti’s nifty branding feature:

Plasma theme is Kaleban, for those who are interested

I think it’ll even use the Ubuntu logo if you don’t have kubuntu-default-settings installed. (E.g. in GNOME) And of course it’ll still be the Debian logo in Debian. Dantti’s done some neat work on this front, and you should check out this blog to see how KPackageKit is using libdebconf-kde. I think it’s neat that we can share this component. 🙂

Anyways, expect to hear a bit less from me in the coming few weeks. School is starting up next week, so that’ll be a big time sync. I’ll still be around, though, just not as much.