73 lines
2.2 KiB
Rust
73 lines
2.2 KiB
Rust
|
use clap::{Arg, Command};
|
||
|
use std::{env, io, process::exit};
|
||
|
|
||
|
use bscreensaver_command::{BCommand, Error, bscreensaver_command};
|
||
|
|
||
|
fn main() -> io::Result<()> {
|
||
|
let mut command = Command::new("bscreensaver-command")
|
||
|
.author(env!("CARGO_PKG_AUTHORS"))
|
||
|
.version(env!("CARGO_PKG_VERSION"))
|
||
|
.about("Send commands to the running bscreensaver instance")
|
||
|
.arg(
|
||
|
Arg::new("blank")
|
||
|
.long("blank")
|
||
|
.short('b')
|
||
|
.help("Blanks the screen right now")
|
||
|
)
|
||
|
.arg(
|
||
|
Arg::new("lock")
|
||
|
.long("lock")
|
||
|
.short('l')
|
||
|
.help("Lock the screen right now")
|
||
|
)
|
||
|
.arg(
|
||
|
Arg::new("deactivate")
|
||
|
.long("deactivate")
|
||
|
.short('d')
|
||
|
.help("Deactivates the screen lock, presenting the unlock dialog if needed. This can be used to 'reset' things so the screensaver thinks there has been user input")
|
||
|
)
|
||
|
.arg(
|
||
|
Arg::new("restart")
|
||
|
.long("restart")
|
||
|
.short('r')
|
||
|
.help("Restarts the bscreensaver daemon")
|
||
|
)
|
||
|
.arg(
|
||
|
Arg::new("exit")
|
||
|
.long("exit")
|
||
|
.short('x')
|
||
|
.help("Causes the bscreensaver daemon to exit now, even if the screen is locked")
|
||
|
);
|
||
|
let args = command.get_matches_mut();
|
||
|
|
||
|
let command =
|
||
|
if args.is_present("blank") {
|
||
|
BCommand::Blank
|
||
|
} else if args.is_present("lock") {
|
||
|
BCommand::Lock
|
||
|
} else if args.is_present("deactivate") {
|
||
|
BCommand::Deactivate
|
||
|
} else if args.is_present("restart") {
|
||
|
BCommand::Restart
|
||
|
} else if args.is_present("exit") {
|
||
|
BCommand::Exit
|
||
|
} else {
|
||
|
command.print_help()?;
|
||
|
exit(1);
|
||
|
};
|
||
|
|
||
|
match bscreensaver_command(command) {
|
||
|
Err(Error::NotRunning) => {
|
||
|
eprintln!("bscreensaver is not running");
|
||
|
exit(1);
|
||
|
},
|
||
|
Err(Error::X(err)) => {
|
||
|
eprintln!("Failed to communicate with X server: {}", err);
|
||
|
exit(1);
|
||
|
},
|
||
|
Ok(_) => (),
|
||
|
}
|
||
|
|
||
|
Ok(())
|
||
|
}
|