kde-lockscreen-suspend-display/main.go

71 lines
1.1 KiB
Go

package main
import(
"after-lock/evdev"
"after-lock/screensaver"
"after-lock/atomicflag"
"time"
"sync"
)
const (
initialDelay = 3
loopDelay = 6
keyboardDeviceNode = "/dev/input/by-id/usb-Dell_Dell_USB_Entry_Keyboard-event-kbd"
)
func main() {
var wg sync.WaitGroup
wg.Add(1)
stopFlag := atomicflag.New(false)
keypressFlag := atomicflag.New(false)
go func() {
for {
err := evdev.BlockUntilKeypress(keyboardDeviceNode)
if err != nil {
panic(err)
}
if stopFlag.Get() {
wg.Done()
return
} else {
keypressFlag.Set(true)
}
}
}()
time.Sleep(initialDelay * time.Second)
for {
active, err := screensaver.IsActive()
if err != nil {
panic(err)
}
if !active {
stopFlag.Set(true)
wg.Wait()
return
}
shouldSleepDisplay, err := screensaver.ShouldBeActive()
if err != nil {
panic(err)
}
if shouldSleepDisplay {
err := screensaver.Activate()
if err != nil {
panic(err)
}
for {
time.Sleep(loopDelay * time.Second)
if keypressFlag.Get() {
keypressFlag.Set(false)
continue
} else {
break
}
}
}
}
}