A few versions ago in Fedora (v15), the PackageKit daemon doesn't work
in XFCE anymore, so I wrote a small Perl Gtk2 app that would watch for
available yum updates and put a tray icon in your Notification Area to
notify you (Perl version:
http://sh.kirsle.net/kupdatesd)
I've recently ported the app over to Python 2. I heard that the Fedora
XFCE spins are going to drop Perl (or at least severely shrink the Perl
installation) to save space, so the Python version of this app will be
useful going forward (on my current Fedora 18 XFCE desktops, pygtk2 was
already installed, which is pretty much this script's only dependency). :)
Source code to pyupdatesd:
http://sh.kirsle.net/pyupdatesd- this code is
open domain and you can do with it what you please. It would be neat if
this could be shipped with future releases of the Fedora XFCE spin.
Here's the source code here also, in case the links are down. This
version has only been lightly tested (I literally just finished writing
it an hour ago), but seems to work so far.
_____________________________________
#!/usr/bin/env python
"""
pyupdatesd: A simple yum update checker.
This script will watch for available yum updates and show a Gtk2 tray icon and
notification pop-up when updates become available.
This is intended for desktop environments like XFCE that don't have a native
PackageKit update watcher.
Set this script to run on session startup, and it will check for updates every
15 minutes (by default; this is configurable in the source code).
This software is open domain and may be freely modified and distributed.
Requires: pygtk2
--Kirsle
http://sh.kirsle.net
"""
################################################################################
# Configuration Section Begins Here #
################################################################################
c = dict(
# The title to be shown on the pop-up and the icon tooltip.
title = "Updates Available",
# The message to be shown in the pop-up.
message = "There are updates available to install.",
# Icon to use in the system tray and pop-up.
icon =
"/usr/share/icons/gnome/32x32/status/software-update-available.png",
# Frequency to check for available updates.
interval = 900, # 15 minutes
# Command to run to check for available updates, and the expected status
# code that indicates updates are available.
check = "/usr/bin/yum check-update",
# Path to notify-send (set to None if you don't want notifications)
notify = "/usr/bin/notify-send",
# Command to run for your graphical updater (i.e. yumex, gpk-update-viewer)
gui = "/usr/bin/yumex",
)
################################################################################
# Configuration Section Ends Here #
################################################################################
import gtk
import gobject
import commands
import subprocess
from time import time
def do_updates():
"""Show your graphical update manager."""
subprocess.call(c['gui'], shell=True)
def onClick(widget):
"""Event handler for the tray icon being clicked."""
widget.set_visible(False)
gobject.timeout_add(1, do_updates)
def show_notify():
subprocess.call([c['notify'],
'-a', __name__,
'-i', c['icon'],
c['message'],
])
tray = gtk.StatusIcon()
tray.set_from_file(c['icon'])
tray.set_title(c['title'])
tray.set_tooltip(c['title'])
tray.set_visible(False)
tray.connect('activate', onClick)
next_check = int(time()) + c['interval']
def main_loop():
# Time to check?
global next_check
if int(time()) >= next_check:
status, output = commands.getstatusoutput(c['check'])
status = status >> 8
# Updates?
if status == 100:
tray.set_visible(True)
show_notify()
elif tray.get_visible() == True and status == 0:
# Updates have disappeared behind our back!
tray.set_visible(False)
next_check = int(time()) + c['interval']
gobject.timeout_add(1000, main_loop)
gobject.timeout_add(1000, main_loop)
gtk.main()
# vim:expandtab