duagfgfn1981
2017-11-16 02:46
浏览 341
已采纳

使用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!

图片转代码服务由CSDN问答提供 功能建议

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

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

  [D-BUS服务] 
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调用--system --dest org.freedesktop.hello --object-path / org / freedesktop / hello --method org.freedesktop.DBus。  Introspectable.Introspect 
   
 
 

但是我一直在Golang中报错,

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

我现在的代码是

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • drwf69817 2017-11-16 07:18
    已采纳
    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().

    点赞 评论

相关推荐 更多相似问题