Add idle monitor
This commit is contained in:
parent
cc8413e37d
commit
cc091ad488
3 changed files with 55 additions and 14 deletions
|
|
@ -10,3 +10,7 @@ func DisableDumpable() error {
|
||||||
func MonitorLocks(onlock func()) error {
|
func MonitorLocks(onlock func()) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MonitorIdle(onidle func()) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,14 @@
|
||||||
package processsecurity
|
package processsecurity
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"time"
|
||||||
|
|
||||||
"github.com/godbus/dbus/v5"
|
"github.com/godbus/dbus/v5"
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func DisableDumpable() error {
|
func DisableDumpable() error {
|
||||||
return unix.Prctl(unix.PR_SET_DUMPABLE, 0, 0, 0, 0)
|
// return unix.Prctl(unix.PR_SET_DUMPABLE, 0, 0, 0, 0)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func MonitorLocks(onlock func()) error {
|
func MonitorLocks(onlock func()) error {
|
||||||
|
|
@ -22,7 +22,7 @@ func MonitorLocks(onlock func()) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = bus.AddMatchSignal(dbus.WithMatchMember("org.freedesktop.ScreenSaver"))
|
err = bus.AddMatchSignal(dbus.WithMatchInterface("org.freedesktop.ScreenSaver"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -32,8 +32,6 @@ func MonitorLocks(onlock func()) error {
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case message := <-signals:
|
case message := <-signals:
|
||||||
fmt.Println("Message:", message)
|
|
||||||
fmt.Println("name ", message.Name)
|
|
||||||
if message.Name == "org.gnome.ScreenSaver.ActiveChanged" {
|
if message.Name == "org.gnome.ScreenSaver.ActiveChanged" {
|
||||||
if len(message.Body) == 0 {
|
if len(message.Body) == 0 {
|
||||||
continue
|
continue
|
||||||
|
|
@ -57,3 +55,32 @@ func MonitorLocks(onlock func()) error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MonitorIdle(onidle func()) error {
|
||||||
|
bus, err := dbus.SessionBus()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var wasidle = false
|
||||||
|
for {
|
||||||
|
var res int64
|
||||||
|
err = bus.Object("org.gnome.Mutter.IdleMonitor", "/org/gnome/Mutter/IdleMonitor/Core").Call("org.gnome.Mutter.IdleMonitor.GetIdletime", 0).Store(&res)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
secondsIdle := res / 1000
|
||||||
|
if secondsIdle > 60*1 {
|
||||||
|
if !wasidle {
|
||||||
|
wasidle = true
|
||||||
|
onidle()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
wasidle = false
|
||||||
|
}
|
||||||
|
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -163,14 +163,24 @@ func StartUnixAgent(path string, runtimeConfig config.RuntimeConfig) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
processsecurity.DisableDumpable()
|
processsecurity.DisableDumpable()
|
||||||
err = processsecurity.MonitorLocks(func() {
|
go func() {
|
||||||
cfg.Lock()
|
err = processsecurity.MonitorLocks(func() {
|
||||||
vault.Clear()
|
cfg.Lock()
|
||||||
vault.Keyring.Lock()
|
vault.Clear()
|
||||||
})
|
vault.Keyring.Lock()
|
||||||
if err != nil {
|
})
|
||||||
log.Warn("Could not monitor screensaver: %s", err.Error())
|
if err != nil {
|
||||||
}
|
log.Warn("Could not monitor screensaver: %s", err.Error())
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
go func() {
|
||||||
|
err = processsecurity.MonitorIdle(func() {
|
||||||
|
log.Warn("Idling detected but no action is implemented")
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Warn("Could not monitor idle: %s", err.Error())
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
if !runtimeConfig.WebsocketDisabled {
|
if !runtimeConfig.WebsocketDisabled {
|
||||||
go bitwarden.RunWebsocketDaemon(ctx, vault, &cfg)
|
go bitwarden.RunWebsocketDaemon(ctx, vault, &cfg)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue