Some times when you install applications they also add them selves to the login items.
This means they will startup when you login to your account. Which in some cases is not desirable.
Someone asked on Stackoverflow how to stop this.
I posted two approaches.
- Lock the login items preference file. items preference file.
- Get notified when there is a change to your login
Do a get info (command + i ) on the ~/Library/Preferences/com.apple.loginitems.plist file and tick the lock checkbox.
No changes will be written to the file. Therefor on next login there will be no additions.
I tested this and it worked.
I cannot guarantee that this is or is not be a good thing to do. But cannot think of anything that will be affected apart from when you want to add something. And the you just have to reverse the lock on the file.
I my self will am using the approach below.
I set a launchAgent to watch for changes on the ~/Library/Preferences/com.apple.loginitems.plist file
In my example here I use a launchAgent to watch for any change and then run a command to notify me.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>loginItems</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/growlnotify</string> <string>-n</string> <string>login items change</string> <string>-m</string> <string>login items change</string> <string>-s</string> </array> <key>WatchPaths</key> <array> <string>/Users/YOUR-USERNAME-HERE/Library/Preferences/com.apple.loginitems.plist</string> </array> </dict> </plist>
I actually made this using lingon which take some of the pain out of making launchAgent.
The command I run in the launchAgent is :
/usr/local/bin/growlnotify -n "login items change" -m "login items have been changed" -s
Note this is a simple example. And you should remember that any changes may take a short while to be written to the plist. But my tests have shown it to work.
If you use the above code change ”
"YOUR-USERNAME-HERE" to your account user name.
and save the file in ~/Library/LaunchAgents as a .plist file
On that note. These approaches are aimed at per user account but in theory you should be able to do them for the global /Library/LaunchAgent which affects all accounts.
A launchd agent is like a launchd daemon, except that it runs on behalf of a particular user. It is launched by
launchd, typically as part of the process of logging in the user. A third party launchd agent should be installed by adding a property list file to the
~/Library/LaunchAgentsdirectory (to be invoked just for this user) or
/Library/LaunchAgentsdirectory (to be invoked for all users).