使用Golang启动D-Bus服务

问题描述:

I'm now working on call and start a systemd service (mine just calls a shell script) using D-Bus API for golang.

I made a D-Bus service in /usr/share/dbus-1/system-services/org.freedesktop.hello.service

[D-BUS Service]
Name=org.freedesktop.hello
Exec=/bin/false
User=root
SystemdService=hello.service

And a systemd service in /lib/systemd/system/hello.service

[Unit]
Description=Hello

[Service]
Type=dbus
BusName=org.freedesktop.hello
ExecStart=/opt/hello.sh

I'm trying to acheive the same result of code below, which worked.

sudo gdbus call --system --dest org.freedesktop.hello --object-path /org/freedesktop/hello --method org.freedesktop.DBus.Introspectable.Introspect

However I keep getting the error in Golang,

The name org.freedesktop.hello was not provided by any .service files

My code for now is

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

There aren't so many info about this stuff, so I want to get some help. Thanks!

我现在正在通话,并使用D-Bus启动systemd服务(我只是调用了shell脚本) 用于golang的API。 p>

我在/usr/share/dbus-1/system-services/org.freedesktop.hello.service p> \中创建了D-Bus服务 n

  [D-BUS服务] 
Name = org.freedesktop.hello 
Exec = / bin / false 
User = root 
SystemdService = hello.service 
  code>  pre> 
  
 

和/lib/systemd/system/hello.service中的systemd服务 p>

  [Unit] 
Description = Hello 
 
 [Service] 
Type  = dbus 
BusName = org.freedesktop.hello 
ExecStart = / opt / hello.sh 
  code>  pre> 
 
 

我正在尝试实现以下代码的相同结果,即 p>

  sudo gdbus调用--system --dest org.freedesktop.hello --object-path / org / freedesktop / hello --method org.freedesktop.DBus。  Introspectable.Introspect 
  code>  pre> 
 
 

但是我一直在Golang中报错, p>

 名称org.freedesktop.hello 没有任何.service文件提供
  code  >  pre> 
 
 

我现在的代码是 p>

 包main 
 
import(
“ encoding / json” 
“ github。  com / godbus / dbus“ 
” os“ 
” github.com/godbus/dbus/introspect"
)

func main(){
 conn,error1:= dbus.SessionBus()
如果 error1!= nil {
 panic(error1)
} 
节点,err2:= introspect.Call(conn.Object(“ org.freedesktop.hello”,“ / org / freedesktop / hello”))
如果 err2!= nil {
 panic(err2)
} 
 data,_:= json.MarshalIndent(node,“”,“”)
 os.Stdout.Write(data)
} 
  代码>  pre> 
 
 

关于这些东西的信息并不多,所以我想寻求帮助。 谢谢! p> div>

sudo gdbus call --system ...

That's on the system bus.

...
conn, error1 := dbus.SessionBus()
...

And this is on the session bus.

Try to use something like dbus.SystemBus().