I've found another solution how to disable the startup sound. It also works on Lion - at least for me.
There is some terminal stuff to do, but it's worth it imo ;-)
Ok here we go:
1. Login as administrator and open a terminal window
2. Create scriptfile for muting
sudo nano /path/to/mute-on.sh
3. Enter this as content, when done press control+O to save and control+X to exit:
osascript -e 'set volume with output muted'
4. Create scriptfile for unmuting
sudo nano /path/to/mute-off.sh
5. Enter this as content, when done press control+O to save and control+X to exit:
osascript -e 'set volume without output muted'
6. Make both files executable:
sudo chmod u+x /path/to/mute-on.sh
sudo chmod u+x /path/to/mute-off.sh
7. Check if any hooks already exist (these will be overwritten, so make sure it is OK for you)
sudo defaults read com.apple.loginwindow LoginHook
sudo defaults read com.apple.loginwindow LogoutHook
8. Add hooks for muting
sudo defaults write com.apple.loginwindow LogoutHook /path/to/mute-on.sh
sudo defaults write com.apple.loginwindow LoginHook /path/to/mute-off.sh
- /path/to/ is the location of the scripts, I used /Library/Scripts/
- you can skip the unmuting loginhook (i.e. each logout will silence your machine), but I like it this way because I always have sound available exactly at the volume level I set last time
- root has to be the owner of the script files - running an editor from command line with sudo is the easiest way to achieve that (otherwise you need to chown)
- to delete the hooks, use the following:
sudo defaults delete com.apple.loginwindow LoginHook
sudo defaults delete com.apple.loginwindow LogoutHook
Thanks, Acid. This method works reliably on my system, and it gave me the clues to develop my own method.
What I finally settled on is simple and visible. I simply added a line to my AppleScript which is run at each login to set the internal speakers volume to 50% so I can hear the startup sound at lower than full volume the next time I reboot. Not ideal (should actually be run at logout) but good enough for me. The added line is:
do shell script "osascript -e 'set volume output volume 50'" password "password" with administrator privileges
I think "with administrator privileges" is necessary so the internal speakers volume is set rather than the line out volume (my chosen output device), hence the use of a shell script. My knowledge of AppleScript is not great, so there may be a better way to do the same thing.
Thanks Acid, this worked for me.
I reposted your at solution on my blog since I liked the way you did it. I hope you are ok with that!
I was getting this same problem ... until I unplugged my headphones. I did as Acid suggested above but was still getting the startup sound. However as soon as I unplugged my headphones the startup sound was muted. Going to have a play about and see if I can specify the channel that Acid's script mutes.
Hmm, my iMac doesn't seem to differentiate between the internal speakers and the headphone port. Is this something specific to the iMac? Or to Lion? New to both
headphones in http://d.pr/tEP
headphones out http://d.pr/8Poh
USB headphones in instead http://d.pr/BJ8L
The startup sound only plays now if I have anything plugged into the headphone port. My USB headphones work fine.
System: iMac 27" early 2011, 3.4 GHz i7, 8GB RAM, 256 SSD, 2TB HDD, 6970M 2GB
Message was edited by: mr_urf