Ubuntu: How do I run a script on a dbus signal?



Question:

Is it possible to run a script on an arbitrary dbus signal? Something like Upstart that runs as an unprivileged user and doesn't require root perms to modify?

I ask because I've already written a silly script that waits for bluetooth events to start my music player. Now I'd like to do something similar when my machine connects to specific networks, or other devices attach.

EDIT: My original question didn't specify this, but I meant "associate a number of scripts with one of a set of events" - so I'd have the same launcher-y thing (like Upstart) that manages a number of scripts, each of which cares about a different dbus signal. All in user space.


Solution:1

You need the dbus-monitor

The script will look something like

#!/bin/bash    interface=org.gnome.Rhythmbox.Player  member=playingUriChanged    # listen for playingUriChanged DBus events,  # each time we enter the loop, we just got an event  # so handle the event, e.g. by printing the artist and title  # see rhythmbox-client --print-playing-format for more output options    dbus-monitor --profile "interface='$interface',member='$member'" |  while read -r line; do      printf "Now playing: "      rhythmbox-client --print-playing  done  

Taken from https://stackoverflow.com/a/5345462/854477


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »