Je n'ai pas résolu ce problème auparavant, mais il semble que cela pourrait convenir à "l'activation basée sur le chemin".
Au lieu d'avoir une clause "After=" dans votre fichier de service, vous créeriez un .path fichier, comme décrit dans man systemd.path .
Trouvez un fichier approprié sous /dev/bus/usb ou /sys/bus/usb , dont la présence indique que "USB est actif". Alors avoir systemd surveiller le chemin du fichier en utilisant le .path fichier que vous allez créer. Le .path le fichier activerait alors votre .service fichier lorsque le fichier existe.
Ce que je ferais, c'est de créer une unité de périphérique systemd en utilisant la règle an udev. Ex. :créer /etc/udev/rules.d/20-usb-bus.rules avec :
KERNEL=="usb[1-2]", TAG+="systemd"
Au prochain démarrage (ou rechargement des règles udev), vous aurez maintenant votre unité de périphérique système :
# systemctl status dev-bus-usb-001-001.device
● dev-bus-usb-001-001.device - 2.0 root hub
...
# systemctl status dev-bus-usb-002-001.device
● dev-bus-usb-002-001.device - 3.0 root hub
...
Vous pouvez maintenant faire démarrer votre service une fois que le bus USB est prêt en ajoutant :
[Unit]
...
After=dev-bus-usb-001-001.device dev-bus-usb-002-001.device
à votre service systemd.