Как запустить скрипт на сигнале dbus?

13

Можно ли запустить сценарий по произвольному сигналу dbus? Что-то вроде Upstart, который работает как непривилегированный пользователь и не требует прав администратора для изменения?

Я спрашиваю, потому что я уже написал глупый скрипт, который ждет событий Bluetooth, чтобы запустить мой музыкальный проигрыватель . Теперь я хотел бы сделать нечто подобное, когда моя машина подключается к определенной сети или подключается другое устройство.

РЕДАКТИРОВАТЬ: мой первоначальный вопрос не уточнил это, но я имел в виду «связать несколько сценариев с одним из набора событий» - так что я бы имел ту же вещь запуска (как Upstart), которая управляет несколькими сценариями каждая из которых заботится о различном сигнале dbus. Все в пространстве пользователя.

Erigami
источник
Может быть, это не совсем то, что вы ищете, но всплыло у меня в голове, когда вы говорили о выскочке. Вы можете запускать скрипты с помощью systemd . Я не совсем уверен, какой тип устройства создает ваше устройство Bluetooth, но я думаю, что есть один.
sumid

Ответы:

16

Вам нужно 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

Взято из stackoverflow .

int_ua
источник