mirror of
https://github.com/sipeed/NanoKVM.git
synced 2026-09-11 00:22:56 -05:00
* fix: stop HDMI capture when logged out * feat: stop HDMI capture when viewers are idle * fix: keep HDMI capture active for consumers
68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
package utils
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
const (
|
|
HDMIDisableFile = "/etc/kvm/hdmi_disable"
|
|
HDMIIdleTimeoutFile = "/etc/kvm/hdmi_idle_timeout"
|
|
DefaultHDMIIdleTimeout = 0
|
|
MaxHDMIIdleTimeoutMinutes = 7 * 24 * 60
|
|
)
|
|
|
|
func PersistHDMIDisabled() {
|
|
f, err := os.OpenFile(HDMIDisableFile, os.O_CREATE|os.O_RDONLY, 0644)
|
|
if err != nil {
|
|
log.Error("failed to create hdmi disable file:", err)
|
|
return
|
|
}
|
|
f.Close()
|
|
}
|
|
|
|
func PersistHDMIEnabled() {
|
|
if err := os.Remove(HDMIDisableFile); err != nil {
|
|
log.Error("failed to remove hdmi disable file:", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func IsHdmiDisabled() bool {
|
|
if _, err := os.Stat(HDMIDisableFile); err != nil {
|
|
if os.IsNotExist(err) {
|
|
return false // HDMI is enabled
|
|
}
|
|
log.Error("failed to check hdmi disable file:", err)
|
|
return false // Assume HDMI is enabled on error
|
|
}
|
|
return true // HDMI is disabled
|
|
}
|
|
|
|
func PersistHDMIIdleTimeout(minutes int) {
|
|
if err := os.WriteFile(HDMIIdleTimeoutFile, []byte(strconv.Itoa(minutes)), 0644); err != nil {
|
|
log.Error("failed to persist hdmi idle timeout:", err)
|
|
}
|
|
}
|
|
|
|
func GetHDMIIdleTimeout() int {
|
|
data, err := os.ReadFile(HDMIIdleTimeoutFile)
|
|
if err != nil {
|
|
if !os.IsNotExist(err) {
|
|
log.Error("failed to read hdmi idle timeout:", err)
|
|
}
|
|
return DefaultHDMIIdleTimeout
|
|
}
|
|
|
|
minutes, err := strconv.Atoi(strings.TrimSpace(string(data)))
|
|
if err != nil || minutes < 0 || minutes > MaxHDMIIdleTimeoutMinutes {
|
|
log.Error("invalid hdmi idle timeout")
|
|
return DefaultHDMIIdleTimeout
|
|
}
|
|
|
|
return minutes
|
|
}
|