commit d5a350c4c2c39f2c6f7ee1d3ca43813282f2dee4
parent 40d8e66a9cee902179b6b5d23ad1a32e0fe114e6
Author: Matthew Gantenbein <ganten1998@gmail.com>
Date: Sun, 31 May 2026 21:02:08 -0500
fix: restart coreaudiod via killall, not kickstart (SIP blocks kickstart)
`launchctl kickstart -k system/com.apple.audio.coreaudiod` fails under SIP with
"Operation not permitted". `sudo killall coreaudiod` is permitted and launchd
respawns it immediately. Updated install-driver.sh, uninstall.sh, and docs.
(The LaunchAgent kickstart in install-agent.sh is in the gui domain — not
SIP-protected — so it stays.)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat:
4 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/TESTING.md b/TESTING.md
@@ -49,7 +49,7 @@ choose **Hydra** as the microphone — it should receive the routed audio.
Uninstall any time:
```sh
-sudo rm -rf "/Library/Audio/Plug-Ins/HAL/Hydra.driver" && sudo launchctl kickstart -k system/com.apple.audio.coreaudiod
+sudo rm -rf "/Library/Audio/Plug-Ins/HAL/Hydra.driver" && sudo killall coreaudiod
```
## 3. Run as a background agent (optional)
diff --git a/driver/README.md b/driver/README.md
@@ -43,7 +43,7 @@ bundle id is `com.ganten.hydra.driver`, factory symbol exported.
Deliberately a manual step — the daemon never installs a system driver silently.
```sh
-./scripts/install-driver.sh # copies to /Library/Audio/Plug-Ins/HAL, kickstarts coreaudiod
+./scripts/install-driver.sh # copies to /Library/Audio/Plug-Ins/HAL, restarts coreaudiod (killall; SIP blocks kickstart)
# verify:
system_profiler SPAudioDataType | grep -i hydra # or Hydra's own device list
```
diff --git a/scripts/install-driver.sh b/scripts/install-driver.sh
@@ -32,12 +32,14 @@ sudo mkdir -p "$MANIFEST_DIR"
sudo chmod 755 "$MANIFEST_DIR"
echo "• restarting coreaudiod"
-sudo launchctl kickstart -k system/com.apple.audio.coreaudiod
+# SIP blocks `launchctl kickstart` of coreaudiod ("Operation not permitted while SIP is
+# engaged"). Killing it is allowed — launchd respawns it immediately.
+sudo killall coreaudiod 2>/dev/null || true
-sleep 1
+sleep 2
echo
echo "✓ installed. Verify:"
echo " system_profiler SPAudioDataType | grep -i hydra"
echo " or in the Hydra TUI's device list."
echo
-echo "Uninstall: sudo rm -rf \"$HAL/Hydra.driver\" && sudo launchctl kickstart -k system/com.apple.audio.coreaudiod"
+echo "Uninstall: sudo rm -rf \"$HAL/Hydra.driver\" && sudo killall coreaudiod"
diff --git a/uninstall.sh b/uninstall.sh
@@ -17,7 +17,8 @@ sudo rm -f /usr/local/bin/hydra 2>/dev/null || rm -f /usr/local/bin/hydra 2>/dev
if [ -d "$HAL" ]; then
say "Removing the driver (sudo; restarts coreaudiod, ~1s audio glitch)"
sudo rm -rf "$HAL"
- sudo launchctl kickstart -k system/com.apple.audio.coreaudiod
+ # SIP blocks kickstart of coreaudiod; killing it is allowed (launchd respawns it).
+ sudo killall coreaudiod 2>/dev/null || true
fi
say "Removing the control socket"