如何在dbus信号上运行脚本?


13

是否可以在任意dbus信号上运行脚本?像Upstart这样的以非特权用户身份运行并且不需要修改根权限的东西吗?

我之所以问是因为我已经写了一个愚蠢的脚本,等待蓝牙事件启动我的音乐播放器。现在,当我的计算机连接到特定网络或连接其他设备时,我想做类似的事情。

编辑:我最初的问题没有指定这个,但我的意思是“将多个脚本与一组事件中的一个相关联”-因此,我将拥有管理多个脚本的相同启动器(例如Upstart) ,每个都关心不同的dbus信号。全部在用户空间中。


也许这并不是您要找的东西,但是当您谈论暴发户时,突然想到了。您可以使用systemd触发脚本。我不确定是哪种类型的设备创建了您的蓝牙设备,但我认为有一个。
sumid

Answers:


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.