Files
swayidle-ctrl/main.go
2025-01-07 16:15:19 +01:00

85 lines
1.6 KiB
Go

package main
import (
"flag"
"fmt"
"os/exec"
)
func startSwayidleService() error {
command := "systemctl --user start swayidle.service"
cmd := exec.Command("sh", "-c", command)
err := cmd.Start()
if err != nil {
return err
}
return nil
}
func stopSwayidleService() error {
command := "systemctl --user stop swayidle.service"
cmd := exec.Command("sh", "-c", command)
err := cmd.Start()
if err != nil {
return err
}
return nil
}
func getSwayidleServiceStatus() (bool, error) {
command := "systemctl --user is-active --quiet swayidle.service"
cmd := exec.Command("sh", "-c", command)
err := cmd.Run()
if err != nil {
if exitError, ok := err.(*exec.ExitError); ok {
/*
Get exit code to evaluate service status.
3 == not Running.
Everything else indicating an Error.
*/
if exitError.ExitCode() == 3 {
return false, nil
}
}
return false, err
}
// Der Service läuft
return true, nil
}
func main() {
enable := flag.Bool("on", false, "Enable screenlock and display timeout.")
disable := flag.Bool("off", false, "Disable screenlock and display timeout.")
flag.Parse()
// check current status of swayidle service.
isRunning, err := getSwayidleServiceStatus()
if err != nil {
panic(err)
}
// start service if not already running.
if *enable && !isRunning {
err := startSwayidleService()
if err != nil {
fmt.Println("Failed to start swayidle Service!")
return
}
}
// stop service if not already stoped.
if *disable && isRunning {
err := stopSwayidleService()
if err != nil {
fmt.Println("Failed to stop swayidle Service!")
return
}
}
}