From 24ed38e3f85917d22c6f656c29e18cdf0e3044bf Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Tue, 6 Feb 2024 10:26:53 -0700 Subject: [PATCH] Wrap x sessions in startx --- src/greeter.rs | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/greeter.rs b/src/greeter.rs index 4f400e3..5a0bdee 100644 --- a/src/greeter.rs +++ b/src/greeter.rs @@ -50,13 +50,13 @@ pub fn main() -> Result<(), Box> { //TODO: allow custom directories? let session_dirs = &[ - Path::new("/usr/share/wayland-sessions"), - Path::new("/usr/share/xsessions"), + (Path::new("/usr/share/wayland-sessions"), false), + (Path::new("/usr/share/xsessions"), true), ]; let sessions = { let mut sessions = HashMap::new(); - for session_dir in session_dirs { + for (session_dir, x_wrapper) in session_dirs { let read_dir = match fs::read_dir(&session_dir) { Ok(ok) => ok, Err(err) => { @@ -116,8 +116,18 @@ pub fn main() -> Result<(), Box> { } }; - let split = match shlex::split(exec) { - Some(some) => some, + let mut command = if *x_wrapper { + vec!["startx".to_string(), "/usr/bin/env".to_string()] + } else { + vec![] + }; + + match shlex::split(exec) { + Some(split) => { + for arg in split { + command.push(arg) + } + } None => { log::warn!( "failed to parse session file {:?} Exec field {:?}", @@ -128,9 +138,10 @@ pub fn main() -> Result<(), Box> { } }; - match sessions.insert(name.to_string(), split) { + log::warn!("session {} using command {:?}", name, command); + match sessions.insert(name.to_string(), command) { Some(some) => { - log::warn!("session overwritten with command {:?}", some); + log::warn!("session {} overwrote old command {:?}", name, some); } None => {} }