From 202b72879ac30e3bfa0f4c9fa41519835925bea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krist=C3=B3f=20T=C3=B3th?= Date: Mon, 17 Aug 2020 16:54:03 +0200 Subject: [PATCH] Add package to control and monitor screensaver --- screensaver/screensaver.go | 61 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 screensaver/screensaver.go diff --git a/screensaver/screensaver.go b/screensaver/screensaver.go new file mode 100644 index 0000000..ca4bbae --- /dev/null +++ b/screensaver/screensaver.go @@ -0,0 +1,61 @@ +package screensaver + +import ( + "os/exec" + "regexp" + "strings" +) + + +func IsActive() (bool, error) { + cmd := exec.Command("qdbus", + "org.kde.screensaver", + "/ScreenSaver", + "org.freedesktop.ScreenSaver.GetActive", + ) + outputBytes, err := cmd.CombinedOutput() + if err != nil { + return false, err + } + output := string(outputBytes) + + if strings.HasPrefix(output, "true") { + return true, nil + } + return false, nil +} + +func Activate() error { + cmd := exec.Command("xset", + "dpms", + "force", + "suspend", + ) + return cmd.Run() +} + +func ShouldBeActive() (bool, error) { + cmd := exec.Command("xset", "q") + outputBytes, err := cmd.CombinedOutput() + if err != nil { + return false, err + } + return arbitrateXsetOutput(string(outputBytes)), nil +} + +func arbitrateXsetOutput(output string) bool { + if ! strings.Contains(output, "Monitor") { + // after booting xset q is missing this line + // lacking better ideas assume display is on + return true + } + + re := regexp.MustCompile(`Monitor is (\w+)`) + matches := re.FindStringSubmatch(output) + if len(matches) >= 2 { + if matches[1] == "On" { + return true + } + } + return false +}