Es una locura que en 2016 todavía tengamos que ver con esto, pero desde que se actualizó a El Capitán, las soluciones anteriores ya no parecen funcionarme. Esto es lo que he probado.
silencio.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 instalación casi reciente 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 correr launchctl load silence_sysvol.plist
no escribe nada en el registro, por lo que el script no parece ejecutarse y no he averiguado cómo hacer que se cargue y ejecute siempre al cerrar la sesión.
He leído que launchd
enviará SIGTERM
a los agentes al cerrar la sesión, ¿podría ser algo así?
#!/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
Lo intenté, pero no funcionó.