package xorg import ( "time" "github.com/go-logr/logr" "sigs.k8s.io/controller-runtime/pkg/client" "edge-infra.dev/pkg/sds/display/constants" "edge-infra.dev/pkg/sds/display/displaymanager/applier" xorgapplier "edge-infra.dev/pkg/sds/display/displaymanager/applier/xorg" "edge-infra.dev/pkg/sds/display/displaymanager/applier/xorg/command/runner" "edge-infra.dev/pkg/sds/display/displaymanager/manager" "edge-infra.dev/pkg/sds/display/displaymanager/reader" xorgreader "edge-infra.dev/pkg/sds/display/displaymanager/reader/xorg" "edge-infra.dev/pkg/sds/display/displaymanager/waiter" xorgwaiter "edge-infra.dev/pkg/sds/display/displaymanager/waiter/xorg" v2 "edge-infra.dev/pkg/sds/display/k8s/apis/v2" "edge-infra.dev/pkg/sds/lib/xorg" "edge-infra.dev/pkg/sds/lib/xorg/dpms" "edge-infra.dev/pkg/sds/lib/xorg/xinput" "edge-infra.dev/pkg/sds/lib/xorg/xrandr" ) var ( minWaitTime = time.Second * time.Duration(3) timeout = time.Second * time.Duration(30) ) type displayManager struct { hostname string socket string waiter.DisplayWaiter reader.DisplayReader applier.DisplayApplier } // Returns a new DisplayManager, which provides methods for interfacing with Xorg. func NewXorgDisplayManager(hostname string, c client.Client, log logr.Logger) manager.DisplayManager { outputIDs := map[v2.DisplayPort]xorg.OutputID{} inputIDs := map[v2.InputDeviceName][]xorg.InputDeviceID{} displayWaiter := xorgwaiter.NewXorgDisplayWaiter(xrandr.NewXrandr(), minWaitTime, timeout) displayReader := xorgreader.NewXorgDisplayReader(outputIDs, inputIDs, xrandr.NewXrandr(), xinput.NewXinput(), dpms.NewDPMS(), c, log) displayApplier := xorgapplier.NewXorgDisplayApplier(outputIDs, inputIDs, runner.NewCommandRunner()) return &displayManager{ hostname: hostname, socket: constants.X11Socket, DisplayWaiter: displayWaiter, DisplayReader: displayReader, DisplayApplier: displayApplier, } } func (x *displayManager) Hostname() string { return x.hostname } func (x *displayManager) Socket() string { return x.socket }