Como executo um script em um sinal dbus?

10

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

Eu pergunto porque eu já escrevi um script bobo que aguarda eventos bluetooth para iniciar o meu reprodutor de música . Agora gostaria de fazer algo semelhante quando minha máquina se conecta a redes específicas ou a outros dispositivos conectados.

EDITAR: Minha pergunta original não especificou isso, mas eu quis dizer "associar um número de scripts a um de um conjunto de eventos" - então eu teria a mesma coisa de launcher-y (como o Upstart) que gerencia vários scripts, cada um dos quais se preocupa com um sinal dbus diferente. Tudo no espaço do usuário.

    
por Erigami 14.06.2012 / 14:56

1 resposta

12

Você precisa do dbus-monitor

O script será parecido com

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

Extraído do link

    
por int_ua 14.06.2012 / 17:17