Created
May 6, 2024 22:24
-
-
Save craigcabrey/1330a8ad10796f98f5a56cb5fcf6f619 to your computer and use it in GitHub Desktop.
Repro for https://github.com/dbus2/zbus/issues/765
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[package] | |
name = "gnome-shell-dbus-debug" | |
version = "0.1.0" | |
edition = "2021" | |
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | |
[dependencies] | |
async-std = { version = "1.12.0", features = ["attributes"] } | |
zbus = "4.2.0" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const Gio = imports.gi.Gio; | |
const GLib = imports.gi.GLib; | |
const iface = ` | |
<node> | |
<interface name="net.hadess.PowerProfiles"> | |
<property name="ActiveProfile" type="s" access="readwrite"/> | |
</interface> | |
</node>`; | |
const proxyWrapper = Gio.DBusProxy.makeProxyWrapper(iface); | |
let proxy = new proxyWrapper( | |
Gio.DBus.system, | |
"net.hadess.PowerProfiles", | |
"/net/hadess/PowerProfiles" | |
); | |
proxy.connect('g-properties-changed', (changed_properties, invalidated_properties) => { | |
log("Properties changed, getting active profile:"); | |
log(changed_properties, invalidated_properties); | |
log(proxy.ActiveProfile); | |
}); | |
log("Pre set:", proxy.ActiveProfile); | |
proxy.ActiveProfile = "client-provided-value"; | |
log("Post set:", proxy.ActiveProfile); | |
let loop = new GLib.MainLoop(null, false); | |
loop.run(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::future::pending; | |
use zbus::{connection, interface, Result}; | |
struct Handler { | |
value: String, | |
} | |
#[interface(name = "net.hadess.PowerProfiles")] | |
impl Handler { | |
#[zbus(property)] | |
async fn active_profile(&self) -> String { | |
println!("Getting {}", self.value); | |
self.value.clone() | |
} | |
#[zbus(property)] | |
async fn set_active_profile(&mut self, value: String) { | |
println!("Setting to {}", value); | |
self.value = value.clone() | |
} | |
} | |
#[async_std::main] | |
async fn main() -> Result<()> { | |
let handler = Handler { | |
value: "initial-value".to_string() | |
}; | |
let _conn = connection::Builder::system()? | |
.name("net.hadess.PowerProfiles")? | |
.serve_at("/net/hadess/PowerProfiles", handler)? | |
.build() | |
.await?; | |
Ok(pending::<()>().await) | |
} |
craigcabrey@gamerboi:/var/home/craigcabrey/gnome-shell-dbus-debug/scripts$ gjs client.js
Gjs-Message: 17:28:05.502: JS LOG: Pre set: initial-value
Gjs-Message: 17:28:05.505: JS LOG: Post set: client-provided-value
Gjs-Message: 17:28:05.507: JS LOG: Properties changed, getting active profile:
Gjs-Message: 17:28:05.508: JS LOG: [object instance wrapper GIName:Gio.DBusProxy jsobj@0x2b7abd67cce0 native@0x55bf6a903650] [object variant of type "a{sv}"]
Gjs-Message: 17:28:05.508: JS LOG: null
thanks. I can reproduce the issue too.
Stop & disable
power-profiles-daemon
:systemctl disable --now power-profiles-daemon
Actually, you can just switch both service and client code to use the session bus instead and then you don't have to do anything special.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Stop & disable
power-profiles-daemon
:systemctl disable --now power-profiles-daemon