12

実行中のビデオを制御するために、omxplayer で D-Bus インターフェイスを使用しようとしています。ここにある go.dbus ライブラリを使用してこれを試みています: https://github.com/guelfey/go.dbus

omxplayer のドキュメントには、問題なく使用できる dbuscontrol.sh スクリプトが記載されています。いくつかの環境変数を設定し、dbus-send を使用して omxplayer を照会できます。

Go でこれを再現しようとしていますが、「名前 org.mpris.MediaPlayer2 はどの .service ファイルからも提供されませんでした」というエラーが表示され続けます。

これが私のコードです:

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)
}
4

1 に答える 1