You should be able to do this by unchecking the software update service in the system preferences to prevent the system from running the check as the "_softwareupate" user and passing it to the notification service that broadcasts to all user accounts. Then you can check for the software update in an admin account using the following Terminal line:
/System/Library/CoreServices/Software Update.app/Contents/Resources/SoftwareUpdateCheck -Check YES
This line can be scripted via Terminal services to run on a schedule (ie, every few hours), and if there are found updates it will launch the App Store for that account and present them. Granted this approach circumvents the notification service, but should work. To try this, open TextEdit on your computer and in a new document choose "Make Plain Text" from the Format menu.
Then copy and paste the following text into the new document:
<?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>local.softwareupdatecheck</string> <key>ProgramArguments</key> <array> <string>/System/Library/CoreServices/Software Update.app/Contents/Resources/SoftwareUpdateCheck</string> <string>-Check</string> <string>YES</string> </array> <key>StartInterval</key> <integer>21600</integer> </dict> </plist>
When done, save the document to your desktop as "softwareupdatecheck.plist" or anything as long as it ends with ".plist." Then get information on the file in the Finder to ensure its name ends with plist and not anything else like "plist.txt" (rename it accordingly in the Info window's "Name & Extension" section.
With the file name appropriate, hold the Option key and choose the "Library" option in the Finder's "Go" menu. Then locate the folder called "Launch Agents" in the library and drag the text file to this folder. Then log out and log back into your account.
This text file is a launch agent script that instructs the system to run the program arguments every 21600 seconds (6 hours) whenever the user is logged in. The program arguments here are simply those to check for software updates for the system. You can change this time interval to be any number of seconds you would like, but there are other options to use besides the "StartInterval" key for scheduling the task. This approach simply has it repeat every number of seconds, but you can use other options to have it only run on specific hours or days, or only have it run once when you log in, etc.
If this works for you, then if you'd like to explore these other options write back here and we can go over them for you.
Thanks for that Topher.
I have copied the text, saved the file as instructed and dragged it into my Launch Agents folder as instructed.
(Thanks for being so specific in those instructions; it really does help those of us who are not quite so Mac advanced.)
I will see how it goes and report back.
Incidentally, if it does check for updates every six hours and finds some, how does it present itself to me as a positive result? And will I also get negative results every six hours? I suppose I will find out soon...
Well, I've had the file in my launch agent folder for nearly a week now, and I have to report that the App Store app hasn't been launched at all during that time.
I know there is at least one update available, because I am refusing to 'upgrade' to iTunes 11, but I haven't been troubled by any update notifications for it, or anything else.
So I'm a bit flummoxed...
I havent done this since Snow Leopard, but it appears Apple has implemented a few new requirements to run this. Therefore as I described it earlier the launch agent will not run properly as it doesnt run the command as the appropriate user, among other details. Try instead to edit or recreate the same launch agent file as mentioned above, but instead use the following for the contents of it:
<?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>local.softwareupdatecheck</string> <key>ProgramArguments</key> <array> <string>/System/Library/CoreServices/Software Update.app/Contents/Resources/SoftwareUpdateCheck</string> <string>-Check</string> <string>YES</string> </array> <key>UserName</key> <string>_softwareupdate</string> <key>MachServices</key> <dict> <key>com.apple.softwareupdatecheck</key> <true/> </dict> <key>StartInterval</key> <integer>21600</integer> </dict> </plist>
When done, again log out and log back in. When done, while you can wait for the agent to run (every 6 hours), you can manually force it to run by opening the Terminal utility and running the following command:
launchctl start local.softwareupdatecheck
If successful, as long as an update is available this should check in the background and then launch the App Store to present updates to you. This whole procedure just divorces this process from being run by the system in the background for all users, and instead has it run only when your account is logged in.
Thanks for all your hard work Topher.
I have replaced the text in the original launch agent file with the amended version as above, but I'm sorry to say that there is still nothing happening.
To test the terminal command I also tried to do it the manual way by entering the command as above and hitting 'enter'. Again, nothing happened I'm afraid...
Not to worry; as long as I know I have automatic updates turned off I know that I have to occasionally check manually by simply launching App Store. (Or maybe even just leave it running in my dock and watch to see the red circle appear, like when new messages arrive in Mail.)