Hmm, I wonder whether it might make sense to add "--debug" to udevd in gnu/services/base.scm in order to track down this problem. The loop looks rather harmless and only checks whether the actual udev socket is available - which it must be for udevd to work. It does the following right now: (start #~(lambda () (define udevd ;; 'udevd' from eudev. #$(file-append udev "/sbin/udevd")) ; TODO: Add ' "--debug"' here (define (wait-for-udevd) ;; Wait until someone's listening on udevd's control ;; socket. (let ((sock (socket AF_UNIX SOCK_SEQPACKET 0))) (let try () (catch 'system-error (lambda () (connect sock PF_UNIX "/run/udev/control") (close-port sock)) (lambda args (format #t "waiting for udevd...~%") (usleep 500000) (try)))))) [...] (let ((pid (fork+exec-command (list udevd)))) ;; Wait until udevd is up and running. This appears to ;; be needed so that the events triggered below are ;; actually handled. (wait-for-udevd)