feat: Initial commit
This commit is contained in:
commit
9588b96f5c
4 changed files with 88 additions and 0 deletions
7
README.md
Normal file
7
README.md
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# dmesg-notify
|
||||||
|
|
||||||
|
For running as a regular user, use:
|
||||||
|
```
|
||||||
|
sudo sysctl -w kernel.dmesg_restrict=0
|
||||||
|
```
|
||||||
|
(note: this allows all users to access dmesg)
|
5
go.mod
Normal file
5
go.mod
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
module git.ddd.rip/ptrcnull/dmesg-notify
|
||||||
|
|
||||||
|
go 1.15
|
||||||
|
|
||||||
|
require github.com/euank/go-kmsg-parser v2.0.0+incompatible
|
3
go.sum
Normal file
3
go.sum
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
github.com/euank/go-kmsg-parser v1.0.0 h1:rtNgGgSPLxuBSrjPtDNf6oFvT90i/VraFHuX8YBH+SU=
|
||||||
|
github.com/euank/go-kmsg-parser v2.0.0+incompatible h1:cHD53+PLQuuQyLZeriD1V/esuG4MuU0Pjs5y6iknohY=
|
||||||
|
github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw=
|
73
main.go
Normal file
73
main.go
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue