web-dev-qa-db-ja.com

dbusシグナルでスクリプトを実行するにはどうすればよいですか?

任意のdbus信号でスクリプトを実行することは可能ですか?特権のないユーザーとして実行され、変更するためにルート権限を必要としないUpstartのようなものはありますか?

Bluetoothイベントが私の音楽プレーヤーを開始するのを待つ という愚かなスクリプトをすでに書いているので、私は尋ねます。ここで、マシンが特定のネットワークに接続するとき、または他のデバイスが接続するときに、似たようなことをしたいと思います。

EDIT:私の元の質問ではこれを指定していませんでしたが、「いくつかのスクリプトを一連のイベントの1つに関連付ける」ことを意味していました。 dは、それぞれが異なるdbusシグナルを処理する多数のスクリプトを管理する同じランチャーyのもの(Upstartなど)を持っています。すべてユーザー空間内。

13
Erigami

dbus-monitorが必要です

スクリプトは次のようになります

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

https://stackoverflow.com/a/5345462/854477 から取得

14
int_ua