From 2449c1a134ebd20d2c0c86e851ea940074f48818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Sch=C3=BCtz?= Date: Sat, 23 Mar 2013 11:49:57 +0100 Subject: [PATCH] Add support for automatic activation as systemd service. The current version of systemd-udev no longer supports starting long-running processes from inside udev rules. --- CMakeLists.txt | 2 ++ udev/85-usbmuxd-systemd.rules.in | 7 +++++++ udev/CMakeLists.txt | 8 +++++++- udev/usbmuxd.service.in | 7 +++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 udev/85-usbmuxd-systemd.rules.in create mode 100644 udev/usbmuxd.service.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a46282..389b453 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,6 +42,8 @@ if(WANT_PLIST) endif() endif() +option(WANT_SYSTEMD "Install support for systemd activation" OFF) + option(WITH_USBMUXD "Build usbmux daemon (usbmuxd)" ON) if(WIN32 AND WITH_USBMUXD) message("** NOTE: usbmuxd cannot be built on WIN32 due to missing libusb-1.0 support!") diff --git a/udev/85-usbmuxd-systemd.rules.in b/udev/85-usbmuxd-systemd.rules.in new file mode 100644 index 0000000..c0e91cd --- /dev/null +++ b/udev/85-usbmuxd-systemd.rules.in @@ -0,0 +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", 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..8902419 100644 --- a/udev/CMakeLists.txt +++ b/udev/CMakeLists.txt @@ -1,2 +1,8 @@ -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/85-usbmuxd.rules.in ${CMAKE_CURRENT_BINARY_DIR}/85-usbmuxd.rules @ONLY) +if(WANT_SYSTEMD) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/85-usbmuxd-systemd.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}/usbmuxd.service DESTINATION /lib/systemd/system/) +else() + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/85-usbmuxd.rules.in ${CMAKE_CURRENT_BINARY_DIR}/85-usbmuxd.rules @ONLY) +endif() install(FILES ${CMAKE_CURRENT_BINARY_DIR}/85-usbmuxd.rules DESTINATION /lib/udev/rules.d/) diff --git a/udev/usbmuxd.service.in b/udev/usbmuxd.service.in new file mode 100644 index 0000000..cac6cc8 --- /dev/null +++ b/udev/usbmuxd.service.in @@ -0,0 +1,7 @@ +[Unit] +Description=Socket daemon for the usbmux protocol used by Apple devices + +[Service] +Type=simple +ExecStart=@CMAKE_INSTALL_PREFIX@/sbin/usbmuxd -u -U usbmux -f + -- 1.8.1.4