Blob Blame History Raw
From c15d2f6f22a3d5013c8b1cd6ca9c8a31be3748d5 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Mon, 9 Jul 2012 16:30:33 +0100
Subject: [PATCH] Use systemd to start usbmuxd

Instead of using udev. udev should not be used to start
long-running daemons. The started daemon will receive SIGKILL
after all event handling has been done, as udev.service cleans
up all the lingering processes.

We instead ask udev to tell systemd to start us up through the
usbmuxd.service file.

See:
https://bugzilla.redhat.com/show_bug.cgi?id=786853
for more details.
---
 udev/85-usbmuxd.rules.in |    2 +-
 udev/CMakeLists.txt      |    2 ++
 udev/usbmuxd.service.in  |    7 +++++++
 3 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 udev/usbmuxd.service.in

diff --git a/udev/85-usbmuxd.rules.in b/udev/85-usbmuxd.rules.in
index 6f2186b..d9de100 100644
--- a/udev/85-usbmuxd.rules.in
+++ b/udev/85-usbmuxd.rules.in
@@ -1,7 +1,7 @@
 # usbmuxd ("Apple Mobile Device" muxer listening on /var/run/usbmuxd)
 
 # Forces iDevices to the last USB configuration and runs usbmuxd
-ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05ac", ATTR{idProduct}=="12[9a][0-9a-f]", ENV{USBMUX_SUPPORTED}="1", ATTR{bConfigurationValue}!="$attr{bNumConfigurations}", ATTR{bConfigurationValue}="$attr{bNumConfigurations}", OWNER="usbmux", RUN+="@CMAKE_INSTALL_PREFIX@/sbin/usbmuxd -u -U usbmux"
+ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05ac", ATTR{idProduct}=="12[9a][0-9a-f]", ENV{USBMUX_SUPPORTED}="1", ATTR{bConfigurationValue}!="$attr{bNumConfigurations}", ATTR{bConfigurationValue}="$attr{bNumConfigurations}", OWNER="usbmux", TAG+="systemd", ENV{SYSTEMD_WANTS}="usbmuxd.service"
 
 # Exit usbmuxd when the last device is removed
 ACTION=="remove", SUBSYSTEM=="usb", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ENV{INTERFACE}=="255/*", RUN+="@CMAKE_INSTALL_PREFIX@/sbin/usbmuxd -x"
diff --git a/udev/CMakeLists.txt b/udev/CMakeLists.txt
index 0f7042d..3067a75 100644
--- a/udev/CMakeLists.txt
+++ b/udev/CMakeLists.txt
@@ -1,2 +1,4 @@
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/85-usbmuxd.rules.in ${CMAKE_CURRENT_BINARY_DIR}/85-usbmuxd.rules @ONLY)
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/usbmuxd.service.in ${CMAKE_CURRENT_BINARY_DIR}/usbmuxd.service @ONLY)
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/85-usbmuxd.rules DESTINATION /lib/udev/rules.d/)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/usbmuxd.service DESTINATION /lib/systemd/system/)
diff --git a/udev/usbmuxd.service.in b/udev/usbmuxd.service.in
new file mode 100644
index 0000000..bcfb347
--- /dev/null
+++ b/udev/usbmuxd.service.in
@@ -0,0 +1,7 @@
+[Unit]
+Description=iOS USB Muxer
+
+[Service]
+Type=simple
+ExecStart=/sbin/usbmuxd -u -U usbmux
+PIDFile=/var/run/usbmuxd.pid
-- 
1.7.10.2