Last Thursday, my MacBook Pro arrived. Unfortunately, I’ve been swamped with plenty of other projects lately and haven’t had the time to do more than set up a user and browse the web at home.
This MacBook Pro with a 2.16GHz Intel Core Duo processor will replace the Dual 2.7GHz PowerMac G5 that’s at my desk, the 500MHz G3 iBook which I keep with me when I’m on call (as the IT guy, I’m always on call), and my home computer: a 400MHz PowerMac G4. To do this, a few key applications need to run on the Intel Macs: the Cisco VPN Client, the Mac OS X Server Admin Tools, and Apple Remote Desktop.
Cisco VPN Client? Check. Server Admin Tools? Check. Remote Desktop? … Remote Desktop? … Bueller?
Apple Remote Desktop (and this was even discussed in the February 22nd MacEnterprise.org Webcast entitled “Demystifying the Transition: System Imaging and Rosetta”) currently does not work on the Intel Macs. Why? Because the Apple Remote Desktop client software is Universal and so acts as a plug-in to the Apple Remote Desktop administration application. Unfortunately, applications running using Rosetta can’t have Universal plug-ins and vice versa, so that means no ARD… until recently.
Many in the Mac blogosphere were happy to hear that a few over at AFP548.com (a must-read for those administering Macs and working with Mac OS X Server) had found a workaround to get ARD working on the Intel Macs.
I heard the news, and I had been considering a workaround thanks to a friend’s blog post back on January 30th regarding his explorations into Rosetta. It turns out that:
The Finder’s “Open using Rosetta” checkbox is a figment of LaunchServices’ imagination. It stores a list of so-marked apps in ~/Library/Preferences/com.apple.LaunchServices.plist. exec()ing an application marked “Open using Rosetta” is not enough to get it translated; only going through a LaunchServices function will work.
Per the updated workaround (which merley involves checking off the “Open Using Rosetta” check-box in the Get Info panel for /System/Library/CoreServices/RemoteManagement/ARDAgent.app) I told ARDAgent.app to run using Rosetta, but Apple Remote Desktop still told me it was out of date and needed me to run Software Update (the telltale sign that isn’t going to work), requiring me to quit.
Huh. Not such an easy tweak after all? Actually, I figured it out pretty quickly: I had to turn off Apple Remote Deskop sharing in the Sharing preferences pane of System Preferences.
Even adding another step to the workaround (bringing the count up to a whopping two) still keeps it down in the piece-of-cake category, but I figured I’d explain why:
(Note: this only applies to those that have Apple Remote Desktop sharing turned on on the Intel Mac that they want to run the Apple Remote Desktop administration application on, probably not many.)
- ARD uses ARDAgent.app for some of its functionality (which can be deduced from the change required for the workaround), having it run using Rosetta allows ARD to launch as then both parts are running in Rosetta (an application running in Rosetta can’t have Universal plug-in, and vice versa).
- When Apple Remote Desktop sharing is running, ARDHelper (part of ARDAgent.app) is run as root and is done so by the RemoteDesktopAgent Startup Item (/System/Library/StartupItems/RemoteDesktopAgent).
- Per my friend’s experimentations, the preference file regarding which applications will be run in Rosetta (~/Library/Preferences/com.apple.LaunchServices.plist) is located in the user’s home folder, so the change made for this workaround needs to be done for each user that would be running ARDAgent.app.
- The preference file is for LaunchServices, so a file run via exec() will not honor the settings in com.apple.LaunchServices.plist (in fact, it has no knowledge of Rosetta, when it runs PowerPC code on an Intel processor it just works).
What does all this mean? When ARDAgent.app is run by the RemoteDesktopAgent Startup Item (i.e. Apple Remote Desktop sharing is turned on) it’s exec()’d from a shell script. Even if we could tell root to “Open [ARDAgent.app] using Rosetta”, since it’s exec()’d, it’ll never know how to do that, it’ll just run with whichever code is native to the processor.
Since it’ll run the Intel code instead of the PowerPC code, Apple Remote Desktop and ARDAgent.app will be mis-matched in terms of which code they’re running and so Apple Remote Desktop will fail (or atleast think that it can’t load ARDAgent.app, forcing the user to quit it). Which means no Apple Remote Desktop for our beloved Mac administrators running on Intel Macs (or atleast a few of them). 🙁
Luckily, with only one or two steps, Apple Remote Desktop does run fine on Intel Macs. In fact, I can’t tell the difference between running it on my Dual 2.7HGz PowerMac G5 and this 2.16GHz Intel Core Duo MacBook Pro!