diff --git a/src/event_reader.rs b/src/event_reader.rs index dfb4595..96e862b 100644 --- a/src/event_reader.rs +++ b/src/event_reader.rs @@ -1,6 +1,7 @@ -use std::{collections::HashMap, sync::Arc, option::Option, process::Command}; +use std::{collections::HashMap, sync::Arc, option::Option, process::{Command, Stdio}}; use tokio::sync::Mutex; use tokio_stream::StreamExt; +use fork::{fork, setsid, Fork}; use evdev::{EventStream, Key, RelativeAxisType, AbsoluteAxisType, EventType, InputEvent}; use crate::virtual_devices::VirtualDevices; use crate::Config; @@ -440,11 +441,22 @@ impl EventReader { }, Ok(_) => { for command in command_list { - Command::new("sh") - .arg("-c") - .arg(command) - .spawn() - .expect("Failed to run command."); + match fork() { + Ok(Fork::Child) => { + setsid().unwrap(); + Command::new("sh") + .arg("-c") + .arg(command) + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .spawn() + .expect("Failed to run command."); + std::process::exit(0); + }, + Ok(Fork::Parent(_)) => (), + Err(_) => std::process::exit(1), + } } } Err(_) => {}, @@ -561,4 +573,3 @@ impl EventReader { } } } -