not-a-blog, not-a-service, not-a-clue.

## homing pidgin

Just another bit of shell glue which took about twenty minutes but yielded lovely results as it occurred to me that the DICE-wide inventory tools can now locate (at least in theory) any machine.

Being able to find out what office I’m in is more useful a feature than you might think.  Primary of those is the ability to advertise my whereabouts to colleagues, for example on entering a server room, in case I can be of button-pushing assistance to others.  Whenever I move around, I make an effort to update my Jabber status to point this out.

In fact, the glue was very straightforward and I learned about a particularly useful new tool: the Python DBUS libraries.  DBUS is the message bus adopted by most modern “freedesktop”-compatible environments, and the Python library provides a quick and easy way onto the bus.

First, I hacked together a tiny script to establish where I am.  This should really be done more programmatically. But it worked.

whereami:
#!/bin/bash
/usr/bin/minv hostname -s | awk '/located in/ {print \$(NF);}'

Then some Python DBUS wrangling:

pidgin_status.py:
#!/usr/bin/env python
import dbus
bus = dbus.SessionBus()
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")

def set_message(s, message):
# Get current status type (Available/Away/etc.)
current = purple.PurpleSavedstatusGetType(purple.PurpleSavedstatusGetCurrent())
# Create new transient status and activate it
status = purple.PurpleSavedstatusNew("", current)
purple.PurpleSavedstatusSetMessage(status, message)
purple.PurpleSavedstatusActivate(status)

if __name__ == "__main__":
[...]


So, gluing it all together:

pidginloc:
#!/bin/bash
/usr/bin/pidgin&
(sleep 10; pidgin_status.py whereami)&


[source: developer.pidgin.im]

Written by gdutton

6 May 2010 at 1100

Posted in DICE, howto

Tagged with , , , ,