Jak uruchomić skrypt na sygnale dbus?

13

Czy można uruchomić skrypt na dowolnym sygnale dbus? Coś takiego jak Upstart, który działa jako nieuprzywilejowany użytkownik i nie wymaga modyfikacji uprawnień roota?

Pytam, bo napisałem już głupi skrypt, który czeka na zdarzenia Bluetooth, aby uruchomić mój odtwarzacz muzyki . Teraz chciałbym zrobić coś podobnego, gdy moje urządzenie łączy się z określonymi sieciami lub podłączają inne urządzenia.

EDYCJA: Moje pierwotne pytanie nie precyzowało tego, ale miałem na myśli „powiązać kilka skryptów z jednym z zestawu zdarzeń” - więc miałbym tę samą funkcję uruchamiania (jak Upstart), która zarządza wieloma skryptami , z których każdy dba o inny sygnał dbus. Wszystko w przestrzeni użytkownika.

Erigami
źródło
Może nie jest to dokładnie to, czego szukasz, ale pojawiło się w mojej głowie, kiedy mówiłeś o początku. Możesz uruchamiać skrypty za pomocą systemd . Nie jestem pewien, jaki typ urządzenia tworzy twoje urządzenie Bluetooth, ale myślę, że takie jest.
sumid

Odpowiedzi:

16

Potrzebujesz dbus-monitor

Skrypt będzie wyglądał mniej więcej tak

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

Pobrano z stackoverflow .

int_ua
źródło