From 5c8be0874e736240e6cbeb24b2307b04bbc9fc56 Mon Sep 17 00:00:00 2001 From: Robert Detjens Date: Sat, 29 Aug 2020 16:53:39 -0700 Subject: [PATCH] Use sudo instead of pkexec for CLI --- main.go | 2 +- module.go | 4 ++-- rlimit.go | 10 ++++++++-- ui.go | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/main.go b/main.go index bf12e02..c93115f 100644 --- a/main.go +++ b/main.go @@ -120,7 +120,7 @@ func main() { sources := getSources(paClient) for i := range sources { if sources[i].ID == sourceName { - loadSupressor(paClient, sources[i], &ui) + loadSupressor(paClient, sources[i], &ui, true) os.Exit(0) } } diff --git a/module.go b/module.go index f2c0a4b..00467af 100644 --- a/module.go +++ b/module.go @@ -63,7 +63,7 @@ func supressorState(c *pulseaudio.Client) int { return unloaded } -func loadSupressor(c *pulseaudio.Client, inp input, ui *uistate) error { +func loadSupressor(c *pulseaudio.Client, inp input, ui *uistate, usesudo bool) error { log.Printf("Querying pulse rlimit\n") @@ -77,7 +77,7 @@ func loadSupressor(c *pulseaudio.Client, inp input, ui *uistate) error { return err } log.Printf("Rlimit: %+v. Trying to remove.\n", lim) - removeRlimitAsRoot(pid) + removeRlimitAsRoot(pid, usesudo) defer setRlimit(pid, &lim) // lowering RLIMIT doesn't require root newLim, err := getRlimit(pid) diff --git a/rlimit.go b/rlimit.go index 4bef3d8..79d4f40 100644 --- a/rlimit.go +++ b/rlimit.go @@ -43,14 +43,20 @@ func setRlimit(pid int, new *syscall.Rlimit) error { return err } -func removeRlimitAsRoot(pid int) { +func removeRlimitAsRoot(pid int, usesudo bool) { self, err := os.Executable() if err != nil { log.Printf("Couldn't find path to own binary, trying PATH\n") self = "noisetorch" //try PATH and hope for the best } - cmd := exec.Command("pkexec", self, "-removerlimit", strconv.Itoa(pid)) + var sudocommand string + if usesudo { // use sudo for CLI + sudocommand = "sudo" + } else { // use pkexec for gui + sudocommand = "pkexec" + } + cmd := exec.Command(sudocommand, self, "-removerlimit", strconv.Itoa(pid)) log.Printf("Calling: %s\n", cmd.String()) err = cmd.Run() if err != nil { diff --git a/ui.go b/ui.go index e10c8fa..d2793e5 100644 --- a/ui.go +++ b/ui.go @@ -188,7 +188,7 @@ func updatefn(w *nucular.Window, ui *uistate) { log.Println(err) } } - if err := loadSupressor(ui.paClient, inp, ui); err != nil { + if err := loadSupressor(ui.paClient, inp, ui, false); err != nil { log.Println(err) }