Greetings, We did something like this but without launchd being involved: a lightweight USB monitor daemon that merely registers for IOKit attach notifications, and that launches the "real" processes on device connect. We have been doing this since Mac OS 10.1, and the usb monitor daemon consumes nearly zero resources. But some (including myself) don't like seeing daemons running for no good reason. We had hoped to eliminate that daemon with the appearance of launchd in Mac OS 10.4. Unfortunately, launchd has never supported IOKit events in general or USB connection events specifically. I filed Radar # 4297231 back in October 2005, after attending WWDC 2005. In the launchd session's Q&A, I asked about USB connection event support, but was told that it didn't support it. I had hoped that my Radar would get it added before Tiger shipped, but no such luck. I asked about it again at WWDC 2006 but was told that it remained an open issue, and remains open to this day, unfortunately. Interestingly, Radar # 4297231 is not flagged as a duplicate of the defect list below, but instead is still listed as "Open". It is possible that there are others out there as well (Radar limits my view as I am not an Apple employee). I would love for this to be resolved, if for no other reason than to close the book on this particular issue. I know that launchd is one of the projects hosted on macosforge.org. I have considered working on this as a third-party contribution, but cannot tell whether it would be accepted by the launchd macosforge project, or by Apple for inclusion in Mac OS X. And time rolls on... Smith On Mar 18, 2008, at 4:09 AM, Quinn wrote:
At 23:23 +0100 17/3/08, Mike Fischer wrote:
So far, looking at tn2083 and the man pages, I don't see any way to have a depency on USB or IOKit in general. Am I missing something here?
No, you're not missing something. This is a much-requested feature that we're tracking as <rdar://problem/4551362>.
If there is no direct support would it make sense to have a very small, lightweight daemon always running that registers for IOKit IOServiceAddMatchingNotification notifications and creates a semaphore file that can be used to trigger the launch of the real daemon for example?
That's a fine way to do it. I probably wouldn't use a semaphore file, because it persists in the file system. However, there are numerous other options available to you. If I was doing this, I'd probably have your main daemon register a UNIX domain socket and have your lightweight daemon connect to that socket to trigger a launch.
BTW: This would be mainly for Leopard, although Tiger would be interesting too.
This approach would work just fine on 10.4.x (x >= 6 if you use UNIX domain sockets).
S+E -- Quinn "The Eskimo!" <http://www.apple.com/developer/
Apple Developer Relations, Developer Technical Support, Core OS/ Hardware _______________________________________________ launchd-dev mailing list launchd-dev@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/launchd-dev