【发布时间】:2020-07-25 07:02:38
【问题描述】:
我正在使用 Raspberry Pi Zero 和当前的 Raspbian Linux 发行版。我正在尝试使用systemd D-Bus 接口编写Rust 代码来设置时区(如"America/New_york")。我发现timedatectl 的systemd 端点是org.freedesktop.timedate1。
我正在尝试使用 Rust dbus crate。我已经使用dbus-send先进行测试以确保该方法有效:
$ dbus-send --system --dest=org.freedesktop.timedate1 --type=method_call --print-reply /org/freedesktop/timedate1 org.freedesktop.DBus.Properties.Get string:org.freedesktop.timedate1 string:Timezone
method return time=1596003827.891792 sender=:1.47 -> destination=:1.46 serial=3 reply_serial=2
variant string "America/Los_Angeles"
使用 Rust 代码:
use dbus::blocking::Connection;
use std::time::Duration;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let conn = Connection::new_system()?;
let proxy = conn.with_proxy("org.freedesktop.timedate1", "/org/freedesktop/timedate1", Duration::from_millis(5000));
// a dbus variant should be returned
let name = proxy.method_call("org.freedesktop.DBus.Properties", "Get", ("org.freedesktop.timedate1", "Timezone",))?;
println!("{:#?}", name);
Ok(())
}
我运行它但得到一个空结果:
$ cargo run
Compiling dbus-test v0.1.0 (/home/pi/dbus-test)
Finished dev [unoptimized + debuginfo] target(s) in 12.28s
Running `target/debug/dbus-test`
()
我在这里做错了什么?
【问题讨论】:
-
执行“rust D-Bus”搜索会导致dbus crate 具有examples。按照目前的表述,这个问题并不能表明您已经为解决问题付出了很多努力。
-
正如我已经说过的,我是 rust 新手,只是尝试向专家和示例学习。非常感谢您的指点。
-
@Shepmaster,我已经更新了我的帖子,还有更多指点吗?