usb-ks

USB Killswitch
git clone git://git.laack.co/usb-ks.git
Log | Files | Refs | README | LICENSE

main.go (1267B)


      1 package main
      2 
      3 import (
      4 	"bytes"
      5 	"context"
      6 	"flag"
      7 	"fmt"
      8 	"github.com/rubiojr/go-usbmon"
      9 	"os"
     10 	"os/exec"
     11 )
     12 
     13 const ShellToUse = "/bin/sh"
     14 
     15 func Shellout(command string) (string, string, error) {
     16 	var stdout bytes.Buffer
     17 	var stderr bytes.Buffer
     18 	cmd := exec.Command(ShellToUse, "-c", command)
     19 	cmd.Stdout = &stdout
     20 	cmd.Stderr = &stderr
     21 	err := cmd.Run()
     22 	return stdout.String(), stderr.String(), err
     23 }
     24 
     25 func main() {
     26 
     27 	command := "xscreensaver"
     28 
     29 	help := flag.Bool("help", false, "Help menu")
     30 	flag.Parse()
     31 	if *help {
     32 		fmt.Println("Usage: usb-ks {COMMAND}\nExecute the specified command on USB device changes (default: xscreensaver)")
     33 		return
     34 	}
     35 
     36 	if len(os.Args) == 2 {
     37 		command = os.Args[1]
     38 	}
     39 	if len(os.Args) > 2 {
     40 		fmt.Println("Too many arguments.\nUsage: usb-ks {COMMAND}")
     41 		os.Exit(1)
     42 	}
     43 
     44 	filter := &usbmon.ActionFilter{Action: usbmon.ActionAll}
     45 	devs, err := usbmon.ListenFiltered(context.Background(), filter)
     46 
     47 	if err != nil {
     48 		panic(err)
     49 	}
     50 
     51 	for range devs {
     52 
     53 		stdout, stderr, err := Shellout(command)
     54 
     55 		if err != nil {
     56 			panic(err)
     57 		}
     58 
     59 		stdoutStr := string(stdout)
     60 		stderrStr := string(stderr)
     61 
     62 		if len(stdoutStr) != 0 {
     63 			fmt.Println("Stdout: " + stdoutStr)
     64 		}
     65 
     66 		if len(stderr) != 0 {
     67 			fmt.Println("Stderr: " + stderrStr)
     68 		}
     69 	}
     70 }