diff --git a/Cargo.lock b/Cargo.lock index 168e486..30c527a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -292,9 +292,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.159" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "linked-hash-map" diff --git a/src/main.rs b/src/main.rs index c7fc9cd..f2449d9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ use libc::{sysconf, _SC_PAGESIZE}; use std::env; use std::ffi::{OsStr, OsString}; use std::fs::{canonicalize, read_link}; +use std::io::{stdin, IsTerminal}; use std::os::raw::c_long; use std::os::unix::process::CommandExt; use std::path::{Path, PathBuf}; @@ -89,7 +90,18 @@ fn main() { "Will attempt to install missing requirements for {}", interpreter_name ); - let mut dnf_command = Command::new("pkexec"); + + let mut dnf_command; + if stdin().is_terminal() { + trace!("Running in a terminal"); + dnf_command = Command::new("pkexec"); + } else { + trace!("Not running in a terminal"); + dnf_command = Command::new("xdg-terminal-exec"); + dnf_command.arg("--"); + dnf_command.arg("pkexec"); + } + dnf_command.arg("/usr/bin/dnf"); dnf_command.arg("install"); dnf_command.args(&interpreter_missing_paths);