80 lines
2.6 KiB
Rust
80 lines
2.6 KiB
Rust
extern crate smithay_client_toolkit as sctk;
|
|
|
|
use sctk::shell::Shell;
|
|
|
|
// This is a small program that queries the compositor for
|
|
// various information and prints them on the console before exiting.
|
|
|
|
sctk::default_environment!(CompInfo, desktop);
|
|
|
|
fn main() -> Result<(), ()> {
|
|
let (env, _display, _queue) = sctk::new_default_environment!(CompInfo, desktop)
|
|
.expect("Unable to connect to a Wayland compositor");
|
|
|
|
println!("== Smithay's compositor info tool ==\n");
|
|
|
|
// print the best supported shell
|
|
println!(
|
|
"-> Most recent shell supported by the compositor is {}.",
|
|
match env.get_shell() {
|
|
Some(Shell::Wl(_)) => "the legacy wl_shell",
|
|
Some(Shell::Zxdg(_)) => "the old unstable xdg_shell (zxdg_shell_v6)",
|
|
Some(Shell::Xdg(_)) => "the current xdg_shell",
|
|
None => "nothing",
|
|
}
|
|
);
|
|
println!();
|
|
|
|
// print the outputs
|
|
let outputs = env.get_all_outputs();
|
|
println!("-> Compositor advertised {} outputs:", outputs.len());
|
|
for output in outputs {
|
|
sctk::output::with_output_info(&output, |info| {
|
|
println!(
|
|
" -> #{}: {} ({}), with scale factor of {}",
|
|
info.id, info.model, info.make, info.scale_factor
|
|
);
|
|
println!(" Possible modes are:");
|
|
for mode in &info.modes {
|
|
println!(
|
|
" -> [{}{}] {} x {} @ {}.{} Hz",
|
|
if mode.is_preferred { "p" } else { " " },
|
|
if mode.is_current { "c" } else { " " },
|
|
mode.dimensions.0,
|
|
mode.dimensions.1,
|
|
mode.refresh_rate / 1000,
|
|
mode.refresh_rate % 1000
|
|
);
|
|
}
|
|
});
|
|
}
|
|
println!();
|
|
|
|
// print the seats
|
|
let seats = env.get_all_seats();
|
|
println!("-> Compositor advertised {} seats:", seats.len());
|
|
for seat in seats {
|
|
sctk::seat::with_seat_data(&seat, |data| {
|
|
print!(" -> {} with capabilities: ", data.name);
|
|
if data.has_pointer {
|
|
print!("pointer ");
|
|
}
|
|
if data.has_keyboard {
|
|
print!("keyboard ");
|
|
}
|
|
if data.has_touch {
|
|
print!("touch ");
|
|
}
|
|
println!();
|
|
});
|
|
}
|
|
|
|
/*
|
|
if env.decorations_mgr.is_some() {
|
|
println!("-> Compositor supports server-side decorations.")
|
|
} else {
|
|
println!("-> Compositor does not support server-side decorations.")
|
|
}
|
|
*/
|
|
Ok(())
|
|
}
|