From 4a5d60095a2422edff3fd06b60d5e76e79b59560 Mon Sep 17 00:00:00 2001 From: burakgizlice Date: Fri, 13 Feb 2026 23:45:43 +0300 Subject: [PATCH] fix: use SOCK_DGRAM for ydotoold socket (v1.0.4+) ydotoold v1.0.4+ uses SOCK_DGRAM (unixgram) Unix sockets instead of SOCK_STREAM. The availability check was using net.DialTimeout("unix", ...) which only supports stream sockets, causing a "protocol wrong type for socket" error on systems with newer ydotool versions. Try unixgram first, then fall back to stream for older versions. --- internal/injection/ydotool.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/injection/ydotool.go b/internal/injection/ydotool.go index 23258be..9974507 100644 --- a/internal/injection/ydotool.go +++ b/internal/injection/ydotool.go @@ -32,7 +32,12 @@ func (y *ydotoolBackend) Available() error { return fmt.Errorf("ydotoold socket not found - ensure ydotoold is running") } - conn, err := net.DialTimeout("unix", socketPath, 500*time.Millisecond) + // ydotoold v1.0.4+ uses SOCK_DGRAM (unixgram) sockets. + // Try unixgram first, then fall back to stream for older versions. + conn, err := net.Dial("unixgram", socketPath) + if err != nil { + conn, err = net.DialTimeout("unix", socketPath, 500*time.Millisecond) + } if err != nil { return fmt.Errorf("ydotoold not responding at %s: %w", socketPath, err) }