Como executo um script em um sinal dbus?

13

É possível executar um script em um sinal dbus arbitrário? Algo como o Upstart, que é executado como um usuário sem privilégios e não requer permissões de root para modificar?

Eu pergunto porque eu já escrevi um script bobo que aguarda os eventos bluetooth iniciarem o meu music player . Agora eu gostaria de fazer algo semelhante quando minha máquina se conectar a redes específicas ou outros dispositivos conectados.

EDIT: Minha pergunta original não especificou isso, mas eu quis dizer "associar vários scripts a um de um conjunto de eventos" - para que eu tenha a mesma coisa de iniciador (como o Upstart) que gerencia vários scripts , cada qual se preocupa com um sinal dbus diferente. Tudo no espaço do usuário.

Erigami
fonte
Talvez não seja exatamente o que você procura, mas surgiu na minha mente quando você falou sobre iniciante. Você pode disparar scripts com o systemd . Não sei exatamente que tipo de unidade cria o seu dispositivo bluetooth, mas acho que existe um.
sumid 29/09/15

Respostas:

16

Você precisa do dbus-monitor

O script será algo como

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

Retirado do stackoverflow .

int_ua
fonte