No he resuelto esto antes, pero parece que podría ser una buena opción para la "activación basada en rutas".
En lugar de tener una cláusula "Después=" en su archivo de servicio, crearía un .path archivo, como se describe en man systemd.path .
Encuentre un archivo adecuado en /dev/bus/usb o /sys/bus/usb , cuya presencia indica que "USB está activo". Entonces ten systemd monitorear la ruta del archivo usando el .path archivo que creará. El .path entonces activaría su .service archivo cuando el archivo existe.
Lo que haría sería crear una unidad de dispositivo systemd utilizando la regla an udev. Por ejemplo:crear /etc/udev/rules.d/20-usb-bus.rules con:
KERNEL=="usb[1-2]", TAG+="systemd"
En el próximo arranque (o en la recarga de las reglas de udev), ahora tendrá la unidad de dispositivo de su sistema:
# 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
...
Ahora puede hacer que su servicio comience después de que el bus USB esté listo agregando:
[Unit]
...
After=dev-bus-usb-001-001.device dev-bus-usb-002-001.device
a su servicio systemd.