我的编程空间,编程开发者的网络收藏夹
学习永远不晚

错误 org.freedesktop.DBus.Error.UnknownMethod:未知/无效方法“Notify”

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

错误 org.freedesktop.DBus.Error.UnknownMethod:未知/无效方法“Notify”

问题内容

我正在尝试使用 godbus 创建一个通知服务器,但我无法正确地将我的服务器对象导出到 dbus,并且 dbus 只能识别我的内省 xml。我按照 https://specifications.freedesktop.org/notification-spec/notification-spec-latest.html 来实现它。我还在 godbus 存储库中使用了 _example/server.go,您可能会在下面提供的服务器代码中注意到。 这是服务器代码:

package main

import (
    "fmt"
    "os"

    "github.com/godbus/dbus/v5"
    "github.com/godbus/dbus/v5/introspect"
)

const xml = `

    
        
            
            
            
            
            
            
            
            
            
        

        
            
        

        
            
            
            
            
        

        
            
        

        
            
            
        
    ` + introspect.introspectdatastring + ` `

type notificationserver struct {
}

func (s *notificationserver) notify(appname string, replacesid uint32, appicon string, summary string, body string, actions []string, hints map[string]dbus.variant, expiretimeout int32) (uint32, *dbus.error) {
    fmt.printf("new notification: %s\n", body)
    return 0, nil
}

func (s *notificationserver) getcapabilities() ([]string, *dbus.error) {
    return []string{"action-icons", "actions", "body", "body-hyperlinks", "body-images", "body-markup", "icon-multi", "icon-static", "persistence", "sound"}, nil
}

func (s *notificationserver) getserverinformation() (string, string, string, string, *dbus.error) {
    return "antarctica", "antarctica.com", "1.0", "1.2", nil
}

func (s *notificationserver) closenotification(id uint32) *dbus.error {
    s.notificationclosed(id, 0)
    return nil
}
func (s *notificationserver) notificationclosed(id, reason uint32) {

}

func main() {
    conn, err := dbus.connectsessionbus()
    if err != nil {
        panic(err)
    }
    defer conn.close()

    reply, err := conn.requestname("com.antarctica.notification",
        dbus.nameflagdonotqueue)
    if err != nil {
        panic(err)
    }

    if reply != dbus.requestnamereplyprimaryowner {
        fmt.fprintln(os.stderr, "name already taken")
        os.exit(1)
    }
    server := notificationserver{}
    err = conn.export(server,"/org/freedesktop/notifications","org.freedesktop.notifications")
    if err != nil {
        panic(err)
    }
    conn.export(introspect.introspectable(xml), "/org/freedesktop/notifications", "org.freedesktop.dbus.introspectable")
    fmt.println("listening on com.antarctica.notification / /com/antarctica/notification ...")
    select {}
}

现在的问题是,即使客户端可以访问内省 xml:

$ gdbus introspect --session --dest com.antarctica.notification --object-path /org/freedesktop/notifications --xml

> returns xml

我无法使用我在服务器代码中编写的 org.freedesktop.notifications 方法。例如,notify 未知/无效,这对于每种方法都是相同的:

$ dbus-send --session --print-reply=literal --dest=com.antarctica.notification /org/freedesktop/Notifications org.freedesktop.Notifications.Notify

> Error org.freedesktop.DBus.Error.UnknownMethod: Unknown / invalid method 'Notify'

也在 qdbusviewer 中,当我尝试执行任何方法时,它显示“无法在接口 org.freedesktop.notifications 中的路径 /org/freedesktop/notifications 上找到方法 x”

我尝试过的:

  1. 检查 dbus 是否正在运行
  2. 检查我的服务器是否正在运行
  3. 我也尝试重新启动 dbus 服务和我的计算机
  4. 我认为notificationserver实例(服务器)根本没有被导出,但我不知道为什么


正确答案


这有效。你犯了两个错误:

  1. com.antarctica.notification
  2. func (s *notificationserver)

您必须请求“org.freedesktop.notifications”作为名称,并且不能在函数中使用指针。

  1. org.freedesktop.notifications
  2. func(通知服务器)
  3. (你也不需要内省)
package main

import (
    "fmt"
    "os"

    "github.com/godbus/dbus/v5"
)

type notificationServer struct{}

func (s notificationServer) Notify(appName string, replacesID uint32, appIcon string, summary string, body string, actions []string, hints map[string]dbus.Variant, expireTimeout int32) (uint32, *dbus.Error) {
    fmt.Printf("New notification: %s\n", body)
    return 0, nil
}

func (s notificationServer) GetCapabilities() ([]string, *dbus.Error) {
    return []string{"action-icons", "actions", "body", "body-hyperlinks", "body-images", "body-markup", "icon-multi", "icon-static", "persistence", "sound"}, nil
}

func (s notificationServer) GetServerInformation() (string, string, string, string, *dbus.Error) {
    return "antarctica", "antarctica.com", "1.0", "1.2", nil
}

func main() {
    conn, err := dbus.ConnectSessionBus()
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    f := notificationServer{}
    conn.Export(f, "/org/freedesktop/Notifications", "org.freedesktop.Notifications")

    reply, err := conn.RequestName("org.freedesktop.Notifications", dbus.NameFlagDoNotQueue)
    if err != nil {
        panic(err)
    }
    if reply != dbus.RequestNameReplyPrimaryOwner {
        fmt.Fprintln(os.Stderr, "name already taken")
        os.Exit(1)
    }
    fmt.Println("Listening...")
    select {}
}

以上就是错误 org.freedesktop.DBus.Error.UnknownMethod:未知/无效方法“Notify”的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

错误 org.freedesktop.DBus.Error.UnknownMethod:未知/无效方法“Notify”

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

错误 org.freedesktop.DBus.Error.UnknownMethod:未知/无效方法“Notify”

问题内容我正在尝试使用 godbus 创建一个通知服务器,但我无法正确地将我的服务器对象导出到 dbus,并且 dbus 只能识别我的内省 xml。我按照 https://specifications.freedesktop.org/no
错误 org.freedesktop.DBus.Error.UnknownMethod:未知/无效方法“Notify”
2024-02-06

无法从连接读取:远程错误:tls:未知证书

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《无法从连接读取:远程错误:tls:未知证书》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。问题内容我正在 go 中创建一个低级别的
无法从连接读取:远程错误:tls:未知证书
2024-04-05

downplus中的无效使用 Null: ‘replace’错误的解决方法

错误全部文本如下: Microsoft VBScript 运行时错误 错误 '800a005e' 无效使用 Null: llDhzLtYyj'replace' /XXX/inc_function.asp,行 764 于是乎.咱们来看看这段错
2022-06-12

Win11提示显卡驱动安装出现未知错误的解决方法

如果在安装Windows 11时遇到显卡驱动安装出现未知错误的问题,可以尝试以下解决方法:1. 检查显卡驱动兼容性:确保您的显卡驱动与Windows 11兼容。您可以访问显卡制造商的官方网站,下载并安装最新的Windows 11兼容驱动程序
2023-08-19

Win8/8.1下驱动安装“数据无效”错误的有效解决方法

如果你使用的是Windows8或者8.1,并且精简过系统,那么在安装驱动程序的过程中,你可能会遇到“数据无效”的错误。笔者确信所拥有的驱动程序是可以安装在Win8/Win8.1的系统中的,但是查阅了网络上关于所有安装
2023-06-04

IntelliJIDEARun时报“无效的源发行版:16“错误问题及解决方法

这篇文章主要介绍了IntelliJIDEARun时报“无效的源发行版:16“错误问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-19

win8系统玩LOL突然闪退弹出TCLS遇到未知错误的多种解决方法

大部分游戏玩家都喜欢玩LOL(英雄联盟),很多人在ghost win8系统下玩LOL(英雄联盟)的时候都遇到过这个问题:游戏进行到一半的时候,LOL突然闪退,还弹错错误报告,这个错误报告提示“TCLS遇到未知错误”,
2022-06-04

Win8系统提示无效的产品密钥错误代码0x80070424的故障分析及解决方法

Win8系统提示无效的产品密钥错误代码0x80070424,如下图所示:故障分析:可能是Software Protection服务丢失,即在services中无法找到该服务。解决方法:1、按”Win+R”组合键,调出
2022-06-05

全网多种方法解决Invalid Host header(无效的主机头)服务器域名访问出现的错误

文章目录 1. 复现错误 2. 分析错误 3. 解决错误 4. 其他方法解决该错误 1. 复现错误 在搭建vue-cli环境,用nginx做代理服务器,访问时却显示:Invalid Host header。 2.
2023-08-23

uniapp - 解决 uni.chooseImage 在苹果 IOS 真机上点击没反应的问题,苹果手机点击 uni.chooseImage方法不生效,也不报任何错误(解决苹果ios系统点击无效问题)

前言 奇怪的是,自己新建一个 “干净” 的项目运行到苹果系统 ios 真机上测试时,调用 uni.chooseImage 方法却是正常可用的。 在 uniapp 项目开发中,苹果 ios 真机运行时,调用 uni.chooseImag
2023-08-18

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录