使用 Golang 启动 D-Bus 服务
Starting D-Bus Service using Golang
我现在正在使用 D-Bus API 为 golang 调用并启动一个 systemd 服务(我的只是调用一个 shell 脚本)。
我在/usr/share/dbus-1/system-services/org做了一个D-Bus服务。freedesktop.hello.service
[D-BUS Service]
Name=org.freedesktop.hello
Exec=/bin/false
User=root
SystemdService=hello.service
以及 /lib/systemd/system/hello.service
中的 systemd 服务
[Unit]
Description=Hello
[Service]
Type=dbus
BusName=org.freedesktop.hello
ExecStart=/opt/hello.sh
我正在尝试使用下面的代码实现相同的结果,该代码有效。
sudo gdbus call --system --dest org.freedesktop.hello --object-path /org/freedesktop/hello --method org.freedesktop.DBus.Introspectable.Introspect
但是我在 Golang 中不断收到错误,
The name org.freedesktop.hello was not provided by any .service files
我现在的密码是
package main
import (
"encoding/json"
"github.com/godbus/dbus"
"os"
"github.com/godbus/dbus/introspect"
)
func main() {
conn, error1 := dbus.SessionBus()
if error1 != nil {
panic(error1)
}
node, err2 := introspect.Call(conn.Object("org.freedesktop.hello", "/org/freedesktop/hello"))
if err2 != nil {
panic(err2)
}
data, _ := json.MarshalIndent(node, "", " ")
os.Stdout.Write(data)
}
关于这个东西的信息不多,所以我想得到一些帮助。谢谢!
sudo gdbus call --system ...
在系统总线上。
...
conn, error1 := dbus.SessionBus()
...
这是在会话总线上。
尝试使用类似 dbus.SystemBus()
的东西。
我现在正在使用 D-Bus API 为 golang 调用并启动一个 systemd 服务(我的只是调用一个 shell 脚本)。
我在/usr/share/dbus-1/system-services/org做了一个D-Bus服务。freedesktop.hello.service
[D-BUS Service]
Name=org.freedesktop.hello
Exec=/bin/false
User=root
SystemdService=hello.service
以及 /lib/systemd/system/hello.service
中的 systemd 服务[Unit]
Description=Hello
[Service]
Type=dbus
BusName=org.freedesktop.hello
ExecStart=/opt/hello.sh
我正在尝试使用下面的代码实现相同的结果,该代码有效。
sudo gdbus call --system --dest org.freedesktop.hello --object-path /org/freedesktop/hello --method org.freedesktop.DBus.Introspectable.Introspect
但是我在 Golang 中不断收到错误,
The name org.freedesktop.hello was not provided by any .service files
我现在的密码是
package main
import (
"encoding/json"
"github.com/godbus/dbus"
"os"
"github.com/godbus/dbus/introspect"
)
func main() {
conn, error1 := dbus.SessionBus()
if error1 != nil {
panic(error1)
}
node, err2 := introspect.Call(conn.Object("org.freedesktop.hello", "/org/freedesktop/hello"))
if err2 != nil {
panic(err2)
}
data, _ := json.MarshalIndent(node, "", " ")
os.Stdout.Write(data)
}
关于这个东西的信息不多,所以我想得到一些帮助。谢谢!
sudo gdbus call --system ...
在系统总线上。
...
conn, error1 := dbus.SessionBus()
...
这是在会话总线上。
尝试使用类似 dbus.SystemBus()
的东西。