È assurdo che nel 2016 abbiamo ancora a che fare con questo, ma dal momento che l'aggiornamento a El Capitan, le soluzioni precedenti non sembrano funzionare per me più. Questo è quello che ho provato.
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
Questo è ciò che ha funzionato su Yosemite
sudo defaults write com.apple.loginwindow LogoutHook /path/to/silence.sh
ma ho smesso di lavorare sulla mia quasi fresca installazione El Capitan
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>
Ma l'esecuzione di launchctl load silence_sysvol.plist
non scrive nulla nel log, quindi lo script non sembra essere eseguito e non ho capito come farlo caricare ed eseguire sempre al logout.
Ho letto che launchd
invierà SIGTERM
agli agenti al logout, quindi qualcosa del genere sarebbe un modo per andare?
#!/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
Ho provato questo, non ha funzionato.