web-dev-qa-db-fra.com

Comment exécuter un script sur un signal dbus?

Est-il possible d'exécuter un script sur un signal dbus arbitraire? Quelque chose comme Upstart fonctionne comme un utilisateur non privilégié et ne nécessite pas de perms root pour le modifier?

Je demande parce que j’ai déjà écrit un script idiot qui attend que des événements bluetooth lancent mon lecteur de musique . Maintenant, j'aimerais faire quelque chose de similaire lorsque ma machine se connecte à des réseaux spécifiques ou à d'autres périphériques.

EDIT: Ma question initiale ne le précisait pas, mais je voulais dire "associer un certain nombre de scripts à l'un des ensembles d'événements" - alors je ' d avez le même programme de lancement (comme Upstart) qui gère un certain nombre de scripts, dont chacun traite d’un signal dbus différent. Tout dans l'espace utilisateur.

13
Erigami

Vous avez besoin du dbus-monitor

Le script ressemblera à quelque chose comme

#!/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

Tiré de https://stackoverflow.com/a/5345462/854477

14
int_ua