85 lines
1.6 KiB
Go
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
|
|
}
|
|
}
|
|
}
|