


Fehler org.freedesktop.DBus.Error.UnknownMethod: Unbekannte/ungültige Methode „Notify'
Ich versuche, mit Godbus einen Benachrichtigungsserver zu erstellen, aber ich kann mein Serverobjekt nicht korrekt nach Dbus exportieren und Dbus erkennt nur meine Selbstprüfungs-XML. Ich bin https://pecifications.freedesktop.org/notification-spec/notification-spec-latest.html gefolgt, um es zu implementieren. Ich verwende auch _example/server.go im Godbus-Repository, was Ihnen vielleicht im unten bereitgestellten Servercode auffällt. Dies ist der Servercode:
package main import ( "fmt" "os" "github.com/godbus/dbus/v5" "github.com/godbus/dbus/v5/introspect" ) const xml = ` <node> <interface name="org.freedesktop.notifications"> <method name="notify"> <arg direction="in" type="s"/> <arg direction="in" type="u"/> <arg direction="in" type="s"/> <arg direction="in" type="s"/> <arg direction="in" type="s"/> <arg direction="in" type="as"/> <arg direction="in" type="a{sv}"/> <arg direction="in" type="i"/> <arg direction="out" type="u"/> </method> <method name="getcapabilities"> <arg direction="out" type="as"/> </method> <method name="getserverinformation"> <arg direction="out" type="s"/> <arg direction="out" type="s"/> <arg direction="out" type="s"/> <arg direction="out" type="s"/> </method> <method name="closenotification"> <arg direction="in" type="u"/> </method> <signal name="notificationclosed"> <arg type="u" name="id"/> <arg type="u" name="reason"/> </signal> </interface>` + introspect.introspectdatastring + `</node> ` 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 {} }
Das Problem besteht nun darin, dass, selbst wenn der Client Zugriff auf die Introspection-XML hat:
$ gdbus introspect --session --dest com.antarctica.notification --object-path /org/freedesktop/notifications --xml > returns xml
Ich kann die Methode org.freedesktop.notifications, die ich im Servercode geschrieben habe, nicht verwenden. Beispielsweise ist notify unbekannt/ungültig, was für jede Methode gleich ist:
$ 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'
Wenn ich in qdbusviewer versuche, eine Methode auszuführen, heißt es außerdem: „Methode x konnte im Pfad /org/freedesktop/notifications in der Schnittstelle org.freedesktop.notifications nicht gefunden werden“
Was ich versucht habe:
- Überprüfen Sie, ob dbus läuft
- Überprüfen Sie, ob mein Server läuft
- Ich habe auch versucht, den Dbus-Dienst und meinen Computer neu zu starten
- Ich glaube, die Notificationserver-Instanz (Server) wird überhaupt nicht exportiert, aber ich weiß nicht warum
Richtige Antwort
Das funktioniert. Du hast zwei Fehler gemacht:
- com.antarktica.notification
- func (s *Benachrichtigungsserver)
Sie müssen „org.freedesktop.notifications“ als Namen anfordern und dürfen keine Zeiger in Funktionen verwenden.
- org.freedesktop.notifications
- func (Benachrichtigungsserver)
- (Sie müssen auch nicht nach innen schauen)
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 {} }
Das obige ist der detaillierte Inhalt vonFehler org.freedesktop.DBus.Error.UnknownMethod: Unbekannte/ungültige Methode „Notify'. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Dieser Artikel erläutert die Paketimportmechanismen von Go: benannte Importe (z. B. importieren & quot; fmt & quot;) und leere Importe (z. B. Import _ & quot; fmt & quot;). Benannte Importe machen Paketinhalte zugänglich, während leere Importe nur T ausführen

In diesem Artikel werden die Newflash () -Funktion von BeEGO für die Übertragung zwischen PAGE in Webanwendungen erläutert. Es konzentriert sich auf die Verwendung von Newflash (), um temporäre Nachrichten (Erfolg, Fehler, Warnung) zwischen den Controllern anzuzeigen und den Sitzungsmechanismus zu nutzen. Limita

Dieser Artikel beschreibt die effiziente Konvertierung von MySQL -Abfrageergebnissen in GO -Strukturscheiben. Es wird unter Verwendung der SCAN -Methode von Datenbank/SQL zur optimalen Leistung hervorgehoben, wobei die manuelle Parsen vermieden wird. Best Practices für die Struktur -Feldzuordnung mithilfe von DB -Tags und Robus

Dieser Artikel zeigt, dass Mocks und Stubs in GO für Unit -Tests erstellen. Es betont die Verwendung von Schnittstellen, liefert Beispiele für Mock -Implementierungen und diskutiert Best Practices wie die Fokussierung von Mocks und die Verwendung von Assertion -Bibliotheken. Die Articl

In diesem Artikel werden die benutzerdefinierten Typ -Einschränkungen von GO für Generika untersucht. Es wird beschrieben, wie Schnittstellen die minimalen Typanforderungen für generische Funktionen definieren und die Sicherheitstypsicherheit und die Wiederverwendbarkeit von Code verbessern. Der Artikel erörtert auch Einschränkungen und Best Practices

Dieser Artikel beschreibt effizientes Dateischreiben in Go und vergleicht OS.WriteFile (geeignet für kleine Dateien) mit OS.openfile und gepufferter Schreibvorgänge (optimal für große Dateien). Es betont eine robuste Fehlerbehandlung, die Verwendung von Aufschub und Überprüfung auf bestimmte Fehler.

In dem Artikel werden Schreiben von Unit -Tests in GO erörtert, die Best Practices, Spottechniken und Tools für ein effizientes Testmanagement abdecken.

In diesem Artikel wird die Verwendung von Tracing -Tools zur Analyse von GO -Anwendungsausführungsfluss untersucht. Es werden manuelle und automatische Instrumentierungstechniken, den Vergleich von Tools wie Jaeger, Zipkin und Opentelemetrie erörtert und die effektive Datenvisualisierung hervorheben
