leo_wow 2020-10-29 14:23 采纳率: 0%
浏览 123

通过godbus调用dbus接口启用服务失败,求助!

通过godbus调用dbus接口启用服务失败

    conn, err := dbus.SystemBus()
    if err != nil {
        panic(err)
    }
    var s string
    file := "test.service"
    var target []string
    target = append(target, file)

    err = conn.Object("org.freedesktop.systemd1", "/org/freedesktop/systemd1").Call("org.freedesktop.systemd1.Manager.EnableUnitFiles", 0, target, false, true).Store(&s)
    if err != nil {
        fmt.Fprintln(os.Stderr, "Failed to enable", err)
        os.Exit(1)
    }

输出结果

Failed to enable dbus.Store: length mismatch
  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间 Java领域优质创作者 2024-07-24 22:51
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 根据代码提供的调用dbus接口的部分和报错信息,我们可以初步推断可能是参数传入不正确导致调用失败。具体来说,报错信息"dbus.Store: length mismatch"表明传入的参数与预期长度不匹配。 解决方案:
    1. 检查参数格式:确保传入的参数target是一个字符串数组,且每个元素都是有效的文件路径字符串。
    2. 调整参数数量:根据dbus接口"org.freedesktop.systemd1.Manager.EnableUnitFiles"的要求,检查是否需要传入更多参数或调整参数的顺序。 示例代码修正:
    conn, err := dbus.SystemBus()
    if err != nil {
        panic(err)
    }
    var s string
    file := "test.service"
    var target []string
    target = append(target, file)
    // 调整参数顺序
    err = conn.Object("org.freedesktop.systemd1", "/org/freedesktop/systemd1").Call("org.freedesktop.systemd1.Manager.EnableUnitFiles", target, false, true).Store(&s)
    if err != nil {
        fmt.Fprintln(os.Stderr, "Failed to enable", err)
        os.Exit(1)
    }
    

    通过以上修正,我们可以尝试重新调用dbus接口启用服务,看是否能够成功。如果还是有问题,可能需要进一步检查dbus接口的文档以确保参数传入的正确性。

    评论

报告相同问题?