Update Notifier Applet

UN-Applet provides a simple applet for the system tray that informs the user about available software updates on Debian linux based systems, as Ubuntu, Linux Mint and of course Debian.
The main goal of un-applet is to provide an easy way to help users to keep their system up to date without getting in the user's way while keeping software dependencies at a minimum.
It should work with any panel-like application that conforms to the freedesktop.org system tray specifications; it has been tested with IceWm, Lxde, xfce4, KDE and Gnome, most likely other desktop environment's panels should be fine, too.
KDE or Gnome libraries are not required to run un-applet.

Installation:

Please download the latest version from the download site.
To install the applet, simply install the .deb package with
    # dpkg -i un-applet_<version>_all.deb
or the graphical package installer of your choice. If you want to have a look at the files the package contains first, you can download the .tar.bz2 archive instead of the .deb package, extract its contents and view the files within the source tree. You may then build your own package from the sources with
    $ fakeroot dpkg -b un-applet_<version>_all
If you would like to be notified about new releases of un-applet you can add its debian repository to your package sources (un-applet is the only package in the repository, so there is no reason to worry about conflicts with other packages from the official package sources).
To do so, all you have to do is to add my gpg-key to your keyring by running (as root):
# wget -O - http://download.tuxfamily.org/unapplet/debian/key/deb.gpg.key | apt-key add -
resp. on systems without root login:
$ sudo wget -O - http://download.tuxfamily.org/unapplet/debian/key/deb.gpg.key | apt-key add -
Then add the following line to /etc/apt/sources.list (or use your favourite package management application to add the repository):
deb http://download.tuxfamily.org/unapplet/debian debian main
After the next update of the package database un-applet's repository will be active.
The repository currently only supports i386 and amd64 archtectures; if you miss your architecture please send me a note. Since it is the same package for any architecture anyway, it would be easy to add if I know that someone actually needs it.

Dependencies

un-applet requires the following packages to be installed:

License

un-applet is licensed under the terms of the Gnu General Public License.
The package includes several portions of third party code, please consult the file /usr/share/doc/un-applet/README.3rdParty for details and copyright notices.

Usage:

Once the debian package is installed, you should find a main menu entry "Update Notifier Applet" under either "System" or "System" -> "Package Management", depending on the desktop environment in use. Of course you can also start the applet simply by calling
    $ un-applet

News

June 14 2016: un-applet permanently moved

Due to sourceforge's recent changes that break the usability of debian repos hosted on sf I decided that un-applet had to move to another hosting service.
Fortunately the friendly folks from TuxFamily accepted to host the project, so now here we are!
The files on sourceforge are still there, but the project's sf site is of course is no longer maintained, so please update your bookmarks.

June 13 2016: un-applet 1.0 released!

I am glad to finally announce the stable version 1.0 of un-applet!
This version features a number of major improvements plus a (presumably unpleasant) change affecting the supported terminal emulator programs:
IceWM problems
There is a bug in older versions of IceWM (i.e. for example the version 1.3.8-2 from Debian Jessie, as well as the "official" 1.3.8 from IceWM's sourceforge page) that causes uncontrollable "zombie" windows to appear on the screen if any application that requests the system tray is launched too early during window manager startup. To work around this, earlier versions of un-applet had a hard-coded two second time-out before the applet actually started. This time-out can now be increased from the preferences dialog, if necessary (for users of other desktop environments it should be safe to set this to 0).
This bug has apparently been fixed in the latest versions of IceWM (currently 1.3.8+githubmod+20150914+fa3fdef-2), however unfortunately for the worse, because a new bug was introduced that stops TkTray icons from being displayed properly in the IceWm system tray.
A bug report on this issue has been acknowledged as valid by debian's IceWM maintainers, so there may be hope that this will be resolved in subsequent releases (see here for details).

Aug. 25 2015:

A nasty bug in the KDE terminal application konsole has been reported to render un-applet virtually unusable when konsole is used as terminal emulator program, which will probably be the case for the majority of KDE users.
Please see for example this forum thread for a more detailed description of the bug.
Apparently the problem lies deep in the internals of KDE's underlying Qt-library.
At least on Ubuntu Trusty with KDE-4.13 the bug is still present.
Unfortunately the only solution for un-applet I can offer is to use a different terminal emulator program.
In case you have no other terminal programs installed you might want to try one of several light-weight alternatives as for example xvt or, in case you need utf-8 support, rxvt-unicode
I am currently trying to figure out how to best work around this issue, which might very well result in hard-coding the use of one or other terminal program.

Aug. 05 2015: un-applet_0.4

This release fixes a bug that could have caused false negative results when the package database was locked by another process while the cron script tried to check for available updates. Now the script tests if /var/lib/dpkg/status is locked before actually updating the package database. If it is, the call to apt-get update will be silently postponed until the script is called the next time.

July 19 2015: un-applet_0.3

Initial release.

How it works:

The core functionality is in fact not provided by the applet itself, but by a simple script that is installed into /etc/cron.hourly and thus executed once an hour with root privilege.
This script (by default) first tries to determine if an applet process is actually active, if not it does nothing.
In the next step it checks if the pre-defined interval between updates of the package database (default three hrs.) is expired, if not, again it stops and does nothing.
Finally, if the above conditions are met, it calls a helper script un-applet-update-pkgdatabase in order to obtain information about pending updates.
This script (by default) first runs the un-applet-verify-mirrors script to check if all of the software mirrors defined in /etc/apt/sources.list and (if present) /etc/apt/sources.list.d/*.list can be reached. This is done to work around a bug in apt-get that has been observed when apt-pinning is used (which may well be the case if you never consciously decided to do so, for example if a debian-backports mirror is in use), that may lead to a considerable amount of packages accidentally selected for upgrade if one or more mirrors can not be accessed.
Next thing, it checks if the package database is locked by another process, and if yes, stops and does nothing, in order to avoid false negative results.
If everything is ok, it calls
    apt-get update
and creates a list of pending updates, if any.
Finally the script writes the number of available upgrades, the names of the upgradable packages and the time of its last execution into three files in /var/lib/un-applet.

The applet itself simply periodically checks the contents of these files and changes its color accordingly: If updates are available, you can click on the icon and will be prompted with a yes/no dialog box that asks you if you want to perform the upgrade now. If you choose yes, a gksu prompt will show up, which starts up a terminal emulator that runs the un-applet-dist-upgrade script which basically calls
    apt-get (dist-)upgrade
to install the upgrades.
The icon has also a context menu which allows you to manually start the update of the package database or lets you open a list with information about pending updates (if any).

Configuration:

The behavior of the cron script and its helpers can be customized by editing the file /etc/un-applet/un-applet.conf . In particular the time interval between updates of the package database and the command to install pending updates (apt-get upgrade vs. apt-get dist-upgrade) might be things that you would want to change.
Please consult the comments in this file for more details.

As far as the applet itself is concerned, you can configure a few things through the applet's Preferences... dialog:

Bugs

Contact

Any comments, bug reports and suggestions are highly welcome.
Please mailto:
Michael Lange <klappnase (at) tuxfamily (dot) org>


Thanks for hosting to:

TuxFamily.org