usb-ks

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit c6b99bb7903f4f6ffd68adcbdc3b5abdb01215ca
parent 70bb3878e5324505316c3b1c99a80f3a1a00ba90
Author: Andrew Laack <andrew@laack.co>
Date:   Sun, 15 Mar 2026 15:58:38 -0500

Help menu, arbitrary command

Diffstat:
M.gitignore | 1+
Mmain.go | 49++++++++++++++++++++++++++++++++++++++++++++++---
2 files changed, 47 insertions(+), 3 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -30,3 +30,4 @@ go.work.sum # Editor/IDE # .idea/ # .vscode/ +usb-ks diff --git a/main.go b/main.go @@ -2,12 +2,45 @@ package main import ( "context" + "flag" "github.com/rubiojr/go-usbmon" "os/exec" "fmt" + "os" + "bytes" ) +const ShellToUse = "bash" + +func Shellout(command string) (string, string, error) { + var stdout bytes.Buffer + var stderr bytes.Buffer + cmd := exec.Command(ShellToUse, "-c", command) + cmd.Stdout = &stdout + cmd.Stderr = &stderr + err := cmd.Run() + return stdout.String(), stderr.String(), err +} + func main() { + + command := "xscreensaver" + + help := flag.Bool("help", false, "Help menu") + flag.Parse() + if *help { + fmt.Println("Usage: usb-ks {COMMAND}\nExecute the specified command on USB device changes (default: xscreensaver)") + return + } + + if len(os.Args) == 2{ + command = os.Args[1] + } + if len(os.Args) > 2{ + fmt.Println("Too many arguments.\nUsage: usb-ks {COMMAND}") + os.Exit(1) + } + filter := &usbmon.ActionFilter{Action: usbmon.ActionAll} devs, err := usbmon.ListenFiltered(context.Background(), filter) @@ -16,12 +49,22 @@ func main() { } for range devs { - cmd := exec.Command("i3lock") - output , err := cmd.Output() + + stdout, stderr, err := Shellout(command) + if err != nil { panic(err) } - fmt.Println(string(output)) + stdoutStr := string(stdout) + stderrStr := string(stderr) + + if len(stdoutStr) != 0 { + fmt.Println("Stdout: " + stdoutStr) + } + + if len(stderr) != 0 { + fmt.Println("Stderr: " + stderrStr) + } } }