1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
pub(crate) mod generated;
pub mod proxy;
pub mod types;
use proxy::{UserInterface, manager::ManagerInterface, session::SessionInterface};
use types::{SessionInfo, UserInfo};
use zbus::{Connection, Result};
const DEFAULT_DEST: &str = "org.freedesktop.login1";
pub struct Logind<'a> {
connection: Connection,
logind_proxy: ManagerInterface<'a>,
}
impl<'a> Logind<'a> {
#[inline]
pub fn new() -> Result<Self> {
let connection = Connection::new_system()?;
let logind_proxy = ManagerInterface::new(&connection)?;
Ok(Self {
connection,
logind_proxy,
})
}
#[inline]
pub fn main_interface(&self) -> &ManagerInterface<'a> {
&self.logind_proxy
}
#[inline]
pub fn session_interface(&self, session: &'a SessionInfo) -> Result<SessionInterface> {
SessionInterface::new(&self.connection, session)
}
#[inline]
pub fn user_interface(&self, user: &'a UserInfo) -> Result<UserInterface> {
UserInterface::new(&self.connection, user)
}
}
#[cfg(test)]
mod tests {
use crate::Logind;
#[test]
fn basic_test() {
let proxy = Logind::new().unwrap();
let sessions = proxy.main_interface().list_sessions().unwrap();
dbg!(&sessions);
let session_proxy = proxy.session_interface(&sessions[0]).unwrap();
assert!(session_proxy.get_seat().is_ok());
}
}