【发布时间】:2015-03-17 18:40:37
【问题描述】:
我正在尝试使用 omxplayer 上的 D-Bus 界面来控制正在运行的视频。我正在尝试使用此处找到的 go.dbus 库:https://github.com/guelfey/go.dbus
omxplayer 文档提供了一个我可以成功使用的 dbuscontrol.sh 脚本。它设置了一些环境变量,然后可以使用 dbus-send 来查询 omxplayer。
我试图在 Go 中重现这一点,但我不断收到错误消息“任何 .service 文件都没有提供名称 org.mpris.MediaPlayer2”
这是我的代码:
package main
import (
"encoding/json"
"fmt"
"github.com/guelfey/go.dbus"
"github.com/guelfey/go.dbus/introspect"
"os"
)
func main() {
os.Setenv("OMXPLAYER_DBUS_ADDR", "/tmp/omxplayerdbus.pi")
os.Setenv("OMXPLAYER_DBUS_PID", "/tmp/omxplayerdbus.pi.pid")
conn, err := dbus.SessionBus()
if err != nil {
panic(err)
}
node, err := introspect.Call(conn.Object("org.mpris.MediaPlayer2.omxplayer", "/org/mpris/MediaPlayer2"))
if err != nil {
fmt.Println(err)
}
data, _ := json.MarshalIndent(node, "", " ")
var s []string
err = conn.BusObject().Call("org.freedesktop.DBus.ListNames", 0).Store(&s)
if err != nil {
fmt.Fprintln(os.Stderr, "Failed to get list of owned names:", err)
os.Exit(1)
}
fmt.Println("Currently owned names on the session bus:")
for _, v := range s {
fmt.Println(v)
}
os.Stdout.Write(data)
}
【问题讨论】:
-
您必须使用文件的内容 - 地址类似于 unix:abstract=/tmp/dbus-mQJTjffxVL,guid=cb5b9d6eb7d17e381a9ce1c2590d99aa 但我仍然无法调用任何 dbus 函数omxplayer
标签: go raspberry-pi dbus omxplayer