diff --git a/core/internal/server/network/manager.go b/core/internal/server/network/manager.go index 259b97ed..4f2d5c8c 100644 --- a/core/internal/server/network/manager.go +++ b/core/internal/server/network/manager.go @@ -1,6 +1,7 @@ package network import ( + "errors" "fmt" "sync" "time" @@ -10,6 +11,10 @@ import ( "github.com/yeqown/go-qrcode/writer/standard" ) +// ErrNoNetworkBackend is returned when no supported network management daemon +// (NetworkManager, iwd, systemd-networkd, ConnMan) is present on the system. +var ErrNoNetworkBackend = errors.New("no supported network backend found") + func NewManager() (*Manager, error) { detection, err := DetectNetworkStack() if err != nil { @@ -58,7 +63,7 @@ func NewManager() (*Manager, error) { } default: - return nil, fmt.Errorf("no supported network backend found: %s", detection.ChosenReason) + return nil, fmt.Errorf("%w: %s", ErrNoNetworkBackend, detection.ChosenReason) } m := &Manager{ diff --git a/core/internal/server/server.go b/core/internal/server/server.go index 182f8755..c239f24b 100644 --- a/core/internal/server/server.go +++ b/core/internal/server/server.go @@ -3,6 +3,7 @@ package server import ( "bufio" "encoding/json" + "errors" "fmt" "net" "os" @@ -1481,26 +1482,36 @@ func Start(printDocs bool) error { log.Info("") go func() { + switch err := InitializeNetworkManager(); { + case err == nil: + notifyCapabilityChange() + return + case errors.Is(err, network.ErrNoNetworkBackend): + log.Warn("No supported network backend present; skipping retries") + return + default: + log.Warnf("Network manager unavailable, will retry: %v", err) + } + ticker := time.NewTicker(30 * time.Second) defer ticker.Stop() - if err := InitializeNetworkManager(); err != nil { - log.Warnf("Network manager unavailable: %v", err) - } else { - notifyCapabilityChange() - return - } - - for range ticker.C { + for range 10 { + <-ticker.C if networkManager != nil { return } - if err := InitializeNetworkManager(); err == nil { + switch err := InitializeNetworkManager(); { + case err == nil: log.Info("Network manager initialized") notifyCapabilityChange() return + case errors.Is(err, network.ErrNoNetworkBackend): + log.Warn("No supported network backend present; stopping retries") + return } } + log.Warn("Network manager still unavailable after retries; giving up") }() loginctlReady := make(chan struct{}) diff --git a/quickshell/Services/DisplayService.qml b/quickshell/Services/DisplayService.qml index 7f9794c8..16ccbc30 100644 --- a/quickshell/Services/DisplayService.qml +++ b/quickshell/Services/DisplayService.qml @@ -235,7 +235,7 @@ Singleton { } } - const shouldShowOsd = brightnessInitialized && anyDeviceBrightnessChanged; + const shouldShowOsd = brightnessInitialized && anyDeviceBrightnessChanged && !suppressOsd; if (!brightnessInitialized) { brightnessInitialized = true; @@ -810,10 +810,11 @@ Singleton { if (rescanAttempt < 3) { interval = rescanAttempt === 1 ? 5000 : 8000; restart(); - } else { - rescanAttempt = 0; - interval = 3000; + return; } + rescanAttempt = 0; + interval = 3000; + osdSuppressTimer.restart(); } } @@ -821,6 +822,7 @@ Singleton { target: Quickshell function onScreensChanged() { + suppressOsd = true; screenChangeRescanTimer.rescanAttempt = 0; screenChangeRescanTimer.interval = 3000; screenChangeRescanTimer.restart();