Wie führe ich ein Skript auf einem dbus-Signal aus?

13

Ist es möglich, ein Skript auf einem beliebigen dbus-Signal auszuführen? So etwas wie Upstart, das als nicht privilegierter Benutzer ausgeführt wird und zum Ändern keine Root-Berechtigungen benötigt?

Ich frage, weil ich bereits ein dummes Skript geschrieben habe, das darauf wartet, dass Bluetooth-Ereignisse meinen Musik-Player starten . Jetzt möchte ich etwas Ähnliches tun, wenn mein Computer eine Verbindung zu bestimmten Netzwerken herstellt oder andere Geräte angeschlossen werden.

BEARBEITEN: In meiner ursprünglichen Frage wurde dies nicht angegeben, aber ich meinte "eine Reihe von Skripten mit einem von mehreren Ereignissen verknüpfen" - also hätte ich dasselbe Launcher-Y-Ding (wie Upstart), das eine Reihe von Skripten verwaltet , die sich jeweils um ein anderes dbus-signal kümmern. Alles im User Space.

Erigami
quelle
Vielleicht ist es nicht genau das, wonach Sie suchen, aber es ist mir in den Sinn gekommen, als Sie über Empörung gesprochen haben. Sie können Skripte mit systemd auslösen . Ich bin mir nicht ganz sicher, welche Art von Gerät Ihr Bluetooth-Gerät herstellt, aber ich denke, es gibt eines.
Sumid

Antworten:

15

Du brauchst das dbus-monitor

Das Skript sieht ungefähr so ​​aus

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

Entnommen aus /programming//a/5345462/854477

int_ua
quelle