¿Cómo ejecuto un script en una señal dbus?

13

¿Es posible ejecutar un script en una señal dbus arbitraria? ¿Algo como Upstart que se ejecuta como un usuario sin privilegios y no requiere permisos de root para modificar?

Pregunto porque ya he escrito un guión tonto que espera que los eventos de bluetooth inicien mi reproductor de música . Ahora me gustaría hacer algo similar cuando mi máquina se conecta a redes específicas u otros dispositivos conectados.

EDITAR: Mi pregunta original no especificaba esto, pero quise decir "asociar una serie de guiones con uno de un conjunto de eventos", por lo que tendría la misma cosa de iniciador (como Upstart) que administra una cantidad de guiones , cada uno de los cuales se preocupa por una señal dbus diferente. Todo en espacio de usuario.

Erigami
fuente
Tal vez no sea exactamente lo que buscas, sino que se me ocurrió cuando hablaste de advenedizo. Puede activar scripts con systemd . No estoy exactamente seguro de qué tipo de unidad crea su dispositivo bluetooth, pero creo que hay una.
Sumid

Respuestas:

16

Necesitas el dbus-monitor

El guión se verá algo así

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

Tomado de stackoverflow .

int_ua
fuente