60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os/exec"
|
|
"syscall"
|
|
|
|
"github.com/shirou/gopsutil/process"
|
|
)
|
|
|
|
func killSwayidleProcess() error {
|
|
processes, _ := process.Processes()
|
|
for _, process := range processes {
|
|
name, _ := process.Name()
|
|
if name == "swayidle" {
|
|
err := process.Kill()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func createSwayidleProcess(t1, t2 int) error {
|
|
command := fmt.Sprintf("swayidle -w timeout %d 'swaylock -f -c 3B4252' timeout %d 'swaymsg \"output * power off\"' resume 'swaymsg \"output * power on\"' before-sleep 'swaylock -f -c 3B4252'", t1, t2)
|
|
cmd := exec.Command("sh", "-c", command)
|
|
|
|
cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true}
|
|
|
|
err := cmd.Start()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func main() {
|
|
t1 := flag.Int("t1", 300, "Set timeout for screenlock.")
|
|
t2 := flag.Int("t2", 600, "Set timeout for display.")
|
|
disable := flag.Bool("off", false, "Disable screenlock and display timeout.")
|
|
|
|
flag.Parse()
|
|
|
|
// kill running swayidle instance.
|
|
err := killSwayidleProcess()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if !*disable {
|
|
err := createSwayidleProcess(*t1, *t2)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|