73 lines
1.6 KiB
Go
73 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os/exec"
|
|
"regexp"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/euank/go-kmsg-parser/kmsgparser"
|
|
)
|
|
|
|
func notify(msg string) {
|
|
cmd := exec.Command("notify-send", "-t", "5000", "dmesg", msg)
|
|
err := cmd.Run()
|
|
if err != nil {
|
|
log.Println(err)
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
parser, err := kmsgparser.NewParser()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
working := false
|
|
go func(){
|
|
time.Sleep(1 * time.Second)
|
|
working = true
|
|
}()
|
|
|
|
usbPattern := regexp.MustCompile("usb (\\d+-\\d+): (.*)")
|
|
|
|
usbManufacturer := map[string]string{}
|
|
usbProduct := map[string]string{}
|
|
|
|
for m := range parser.Parse() {
|
|
msg := ""
|
|
|
|
// log.Println("owo", m.Message)
|
|
if sm := usbPattern.FindStringSubmatch(m.Message); len(sm) > 0 {
|
|
addr := sm[1]
|
|
message := sm[2]
|
|
|
|
if strings.HasPrefix(message, "Manufacturer: ") {
|
|
usbManufacturer[addr] = message[14:]
|
|
}
|
|
|
|
if strings.HasPrefix(message, "Product: ") {
|
|
usbProduct[addr] = message[9:]
|
|
msg = fmt.Sprintf(
|
|
"New USB device: %s %s",
|
|
usbManufacturer[addr],
|
|
usbProduct[addr],
|
|
)
|
|
}
|
|
|
|
if strings.HasPrefix(message, "USB disconnect") {
|
|
msg = fmt.Sprintf(
|
|
"USB disconnect: %s %s",
|
|
usbManufacturer[addr],
|
|
usbProduct[addr],
|
|
)
|
|
}
|
|
}
|
|
|
|
if working && msg != "" {
|
|
notify(msg)
|
|
}
|
|
}
|
|
}
|