commit c6b99bb7903f4f6ffd68adcbdc3b5abdb01215ca
parent 70bb3878e5324505316c3b1c99a80f3a1a00ba90
Author: Andrew Laack <andrew@laack.co>
Date: Sun, 15 Mar 2026 15:58:38 -0500
Help menu, arbitrary command
Diffstat:
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)
+ }
}
}