pyupdatesd: A Yum Updates Tray Icon for XFCE

Noah Petherbridge root at kirsle.net
Fri May 24 21:15:50 UTC 2013


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


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.fedoraproject.org/pipermail/xfce/attachments/20130524/c4a8dd8a/attachment.html>


More information about the xfce mailing list