Comment exécuter un script sur un signal dbus?

13

Est-il possible d'exécuter un script sur un signal dbus arbitraire? Quelque chose comme Upstart qui fonctionne en tant qu'utilisateur non privilégié et qui ne nécessite pas de modification des droits d'accès root?

Je demande parce que j'ai déjà écrit un script stupide qui attend les événements Bluetooth pour démarrer mon lecteur de musique . Maintenant, j'aimerais faire quelque chose de similaire lorsque ma machine se connecte à des réseaux spécifiques ou que d'autres appareils s'y connectent.

EDIT: Ma question d'origine ne spécifiait pas cela, mais je voulais dire "associer un certain nombre de scripts à l'un d'un ensemble d'événements" - donc j'aurais la même chose lanceur-y (comme Upstart) qui gère un certain nombre de scripts , dont chacun se soucie d'un signal dbus différent. Le tout dans l'espace utilisateur.

Erigami
la source
Peut-être que ce n'est pas exactement ce que vous recherchez, mais est apparu dans mon esprit lorsque vous avez parlé de parvenu. Vous pouvez déclencher des scripts avec systemd . Je ne sais pas exactement quel type d'unité crée votre appareil Bluetooth, mais je pense qu'il y en a un.
2015 à 9h03

Réponses:

16

Vous avez besoin du dbus-monitor

Le script ressemblera à quelque chose

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

int_ua
la source