Es una locura que en 2016 todavía tengamos que ver con esto, pero desde la actualización a El Capitán, las soluciones anteriores ya no funcionan para mí. Esto es lo que he intentado.
silence.sh
sudo nvram SystemAudioVolume="%00" # does nothing
osascript -e 'set volume with output muted'
echo "run at $(date)" >> /var/log/silence_log.txt
1. LogoutHook
Esto es lo que funcionó en Yosemite
sudo defaults write com.apple.loginwindow LogoutHook /path/to/silence.sh
pero dejó de funcionar en mi casi nueva instalación de El Capitán
2. LaunchAgent
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
<key>Label</key>
<string>Silence</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/silence.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Pero la ejecución de launchctl load silence_sysvol.plist
no escribe nada en el registro, por lo que la secuencia de comandos no parece ejecutarse y no he descubierto cómo cargarla y ejecutarla siempre al cierre de sesión.
Leí que launchd
enviará SIGTERM
a los agentes en el cierre de sesión, ¿por lo tanto, algo como esto sería una forma de hacerlo?
#!/usr/bin/env bash
function silence()
{
sudo nvram SystemAudioVolume="%00" # not working
osascript -e 'set volume with output muted'
echo "run at $(date)" >> /var/log/silence_log.txt
}
trap silence SIGTERM
silence
3. nobootsound
Intenté esto, no funcionó.